SlideShare a Scribd company logo
Drone CI/CD


⾃動化測試及部署
About me
• Software Engineer in Mediatek


• Member of Drone CI/CD Platform


• Member of Gitea Platform


• Member of Gin Golang Framework


• Teacher of Udemy Platform: Golang + Drone
https://blog.wu-boy.com
課程⼤綱
• Docker 基礎介紹


• CI/CD 服務簡介


• Drone 架構介紹


• Drone 基礎使⽤


• Drone 外掛撰寫
Docker 容器介紹
傳統 VM 虛擬機架構
VM 虛擬機好處
• 不同的作業系統環境


• 善⽤資源分配 (CPU, RAM, Storage)


• 透過 Hypervisor 管理 VM 快照
Container 容器架構
Container 容器好處
• 容器檔案非常⼩ (Ubuntu 才⼗幾 MB)


• 快速開啟 (不到⼀秒就可以起⼀個 Ubuntu)


• 透過 Docker
fi
le 客製化容器內容


• 快速實踐 Deployment + Operation
docker 基礎指令
• docker ps


• 列出正在跑的容器


• docker images


• 列出已經下載的 Images


• docker image prune -a -f


• 清除沒在使⽤的 Images (空間如果不夠)
• docker container prune -f


• 清除沒在跑的容器


• docker login -u xxxx


• 登入 docker registry (GitLab 內建, 預設 DockerHub)


• docker run -ti ubuntu /bin/bash


• 快速建立 ubuntu 容器並且登入 Bash Shell


• ⽤於測試及除錯
建立 Docker 服務
• docker run -d -p 8081:80 nginx


• docker run -d -p 8082:80 nginx


• docker run -d -p 8083:80 nginx


• -p port 對應關係 (host port : container port)


• -d 丟到背景執⾏


• —name 容器命名


• -e 環境變數


• -v 掛載硬碟
進入已存在容器
• docker exec -ti name /bin/bash


• docker ps 可以知道正在跑的容器


• 除錯常⽤
練習
• 在本機端架設底下服務


• redis (port 6380:6379)


• mysql (port 3307:3306)


• postgres (port 5433:5432)


• ⽤ Go 或 Node 測試連線
練習
• 架設 Go Module Proxy


• https://github.com/gomods/athens


• export GOPROXY=http://localhost:3010


• 掛載 local 端空間到 athens
建立容器
使⽤ Docker
fi
le
FROM alpine:3.15


LABEL maintainer="Bo-Yi Wu <appleboy.tw@gmail.com>"


RUN apk add
-
-
no
-
cache ca
-
certif
i
cates
&
&



rm
-
rf /var/cache/apk
/
*


COPY release/linux/amd64/agent /bin/


ENTRYPOINT [ "/bin/agent" ]
編譯容器並上傳
• docker build -t appleboy/server:tag -f path .


• -t 組織名稱/容器名稱


• -f Docker
fi
le 檔案路徑


• tag: 版本 (⽤來 deploy production)


• docker push host:port/appleboy/server


• host: docker registry host (預設上傳到 docker hub)


• port: docker registry port
多個服務串接
使⽤


docker-compose.yml
version: '3.1'


services:


prometheus:


image: prom/prometheus:v2.31.1


volumes:


- ./prometheus/:/etc/prometheus/


- ./data/prometheus:/prometheus


command:


- '
-
-
conf
i
g.f
i
le=/etc/prometheus/prometheus.yml'


- '
-
-
storage.tsdb.path=/prometheus'


- '
-
-
web.console.libraries=/usr/share/prometheus/console_libraries'


- '
-
-
web.console.templates=/usr/share/prometheus/consoles'


- '
-
-
storage.tsdb.retention.time=365d'


restart: always


grafana:


image: grafana/grafana:8.2.6


depends_on:


- prometheus


volumes:


- ./data/grafana:/var/lib/grafana


- ./grafana/provisioning/:/etc/grafana/provisioning/


env_f
i
le:


- ./grafana/conf
i
g.monitoring


restart: always
docker-compose 指令
• docker-compose up -d [service_name]


• -d 在背景執⾏


• docker-compose down -v


• -v 移除 volume 資料


• docker-compose logs -f [service_name]


• 看單⼀服務 Logs


• docker-compose pull


• 更新全部 Image (每次 deploy 都需要做此步驟)


• docker-compose exec db /bin/bash


• 進入容器看 DB 資料
練習
• 將 Go 服務搭配 redis + (mysql or postgres)


• redis


• mysql


• postgres


• ⽤ docker-compose 串起上⾯服務
部署流程


GitHub Flow vs Git Flow
https://blog.wu-boy.com/2017/12/github-
fl
ow-vs-git-
fl
ow/
GitHub Flow
14	
Develop
Git Push
Git Tag
Develop
Git Push
Git Tag
Testing
Deploy
Deploy
Deploy
Production
Staging
Production
Testing
Deploy
Staging
GitHub Flow + Git Flow


in opensource
https://github.com/go-gitea/gitea
如何⾃動化上⾯的步驟?
為什麼我不選 Jenkins?
Why?
• Complicated project setting


• Write the plugin (Java language)


• Maintenance?


• Learning Curve?


• Grow your team?
為什麼我不選


GitLab CI?
Why?
• GitLab Only


• Not Extensible
Drone CI/CD 介紹
Drone CI
• Container native CI/CD platform


• Easy to install & maintain


• Isolate builds


• Simple YAML Con
fi
guration


• Integrates with several VCS Providers


• Rich set of of
fi
cial plugins (any container can be a plugin)


• Execute locally with simple command (drone exec)


• open source (https://github.com/harness/drone)
Drone CI/CD 平台真的免費嗎
https://blog.wu-boy.com/2021/08/drone-license/
Everything is a


Docker Container
Project CI/CD Flow
git clone testing deploy notify
Drone CI Infrastructure
Runner
Server
Step 1


git clone
Step 2


make build
Step 3


deploy app
work space
extra service
Runner
如何安裝


Drone + GitHub
申請


GitHub Application
Apply GitHub Application
https:
/
/
github.com/settings/developers
https:
/
/
github.com/settings/applications/new
Drone Server and Runner


In docker-compose.yml
version: '3'


services:


drone
-
server:


image: drone/drone:2


ports:


- 8081
:
80


volumes:


- ./:/data


restart: always


environment:


- DRONE_SERVER_HOST=${DRONE_SERVER_HOST}


- DRONE_SERVER_PROTO=${DRONE_SERVER_PROTO}


- DRONE_RPC_SECRET=${DRONE_RPC_SECRET}


# GitHub Conf
i
g


- DRONE_GITHUB_SERVER=https:
/
/
github.com


- DRONE_GITHUB_CLIENT_ID=${DRONE_GITHUB_CLIENT_ID}


- DRONE_GITHUB_CLIENT_SECRET=${DRONE_GITHUB_CLIENT_SECRET}


- DRONE_LOGS_PRETTY=true


- DRONE_LOGS_COLOR=true
Create docker-compose.yml
DRONE_SERVER_HOST=


DRONE_SERVER_PROTO=


DRONE_RPC_SECRET=


DRONE_GITHUB_CLIENT_ID=


DRONE_GITHUB_CLIENT_SECRET=
Create .env
fi
le
drone
-
runner:


image: drone/drone
-
runner
-
docker:1


restart: always


depends_on:


- drone
-
server


ports:


- 3000
:
3000


volumes:


- /var/run/docker.sock:/var/run/docker.sock


environment:


- DRONE_RPC_HOST=${DRONE_SERVER_HOST}


- DRONE_RPC_PROTO=${DRONE_SERVER_PROTO}


- DRONE_RPC_SECRET=${DRONE_RPC_SECRET}


- DRONE_RUNNER_CAPACITY=2


- DRONE_RUNNER_NAME=my
-
f
i
rst
-
runner
Drone Web UI Introduction
撰寫 .drone.yml 檔案
kind: pipeline


type: docker


name: default


steps:


- name: greeting


image: alpine


commands:


- echo hello


- echo world
kind: pipeline


type: docker


name: linux_amd64


steps:


- name: build


image: golang:1.17


commands:


- make build_linux_amd64
build_linux_amd64
:


CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build 


-
v
-
a
-
o release/linux/amd64/helloworld
build_linux_amd64
:


CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build 


-
v
-
a
-
o release/linux/amd64/helloworld
-
-
-


kind: pipeline


type: docker


name: linux_amd64


steps:


- name: build


image: golang:1.17


environment:


GOOS
:
linux


GOARCH
:
amd64


CGO_ENABLED
:
0


commands:


- make build_linux_amd64
build:


go build
-
v-
a
-
o 


release/${GOOS}/${GOARCH}/helloworld
kind: pipeline


type: docker


name: linux_amd64


steps:


- name: build


image: golang:1.17


commands:


- make build_linux_amd64


-
-
-


kind: pipeline


type: docker


name: linux_i386


steps:


- name: build


image: golang:1.17


commands:


- make build_linux_i386
Multiple Pipeline
-
-
-


kind: pipeline


type: docker


name: linux_i386


steps:


- name: build


image: golang:1.17


environment:


GOOS
:
linux


GOARCH
:
386


CGO_ENABLED
:
0


commands:


- make build_linux_i386
Custom Environment
-
-
-


kind: pipeline


type: docker


name: linux_i386


environment:


GOOS
:
linux


GOARCH
:
386


CGO_ENABLED
:
0


steps:


- name: build


image: golang:1.17


commands:


- make build_linux_i386
Global Environment
Routing


將特定任務丟到特定主機


(GPU or High Memory)
kind: pipeline


type: docker


name: default


steps:


- name: build


image: golang


commands:


- go build


- go test


node:


keyA
:
valueA


keyB
:
valueB


DRONE_RUNNER_LABELS=keyA:valueA,keyB:valueB
Parallelism


平⾏處理
kind: pipeline


type: docker


name: default


steps:


- name: backend


image: golang


commands:


- go build


- go test


- name: frontend


image: node


commands:


- npm install


- npm test


- name: notify


image: plugins/slack


depends_on:


- frontend


- backend
Conditions and Triggers
kind: pipeline


type: docker


name: default


steps:


- name: build


image: golang


commands:


- go build


- go test


when:


branch:


- master


- feature
/
*


kind: pipeline


type: docker


name: default


steps:


- name: build


image: golang


commands:


- go build


- go test


trigger:


branch:


- master
Volumes
kind: pipeline


type: docker


name: default


steps:


- name: test


image: golang


volumes:


- name: cache


path: /go


commands:


- go get


- go test


- name: build


image: golang


volumes:


- name: cache


path: /go


commands:


- go build


volumes:


- name: cache


temp: {}
練習
• 任何程式語⾔進⾏ Lint + Testing + Build


• Go 語⾔使⽤ golangci-lint


• 測試 go test -v -cover


• 編譯 go build -o release/linux/amd64/out
Plugin
http://plugins.drone.io/
- name: publish


pull: always


image: plugins/docker:linux
-
amd64


settings:


auto_tag: true


auto_tag_suff
i
x: linux
-
amd64


cache_from: appleboy/gorush


daemon_off: false


dockerf
i
le: docker/Dockerf
i
le.linux.amd64


password:


from_secret: docker_password


repo: appleboy/gorush


username:


from_secret: docker_username


when:


event:


exclude:


- pull_request
- name: publish


pull: always


image: plugins/docker:linux
-
amd64


settings:


auto_tag: true


auto_tag_suff
i
x: linux
-
amd64


cache_from: appleboy/gorush


daemon_off: false


dockerf
i
le: docker/Dockerf
i
le.linux.amd64


password:


from_secret: docker_password


repo: appleboy/gorush


username:


from_secret: docker_username


when:


event:


exclude:


- pull_request
Plugin Input
- name: publish


pull: always


image: plugins/docker:linux
-
amd64


settings:


auto_tag: true


auto_tag_suff
i
x: linux
-
amd64


cache_from: appleboy/gorush


daemon_off: false


dockerf
i
le: docker/Dockerf
i
le.linux.amd64


password:


from_secret: docker_password


repo: appleboy/gorush


username:


from_secret: docker_username


when:


event:


exclude:


- pull_request
PLUGIN_USERNAME=appleboy
PLUGIN_PASSWORD=password
PLUGIN_REPO=appleboy/gorush
PLUGIN_TAGS=1.0.0,1.0
PLUGIN_USERNAME=appleboy
PLUGIN_PASSWORD=password
PLUGIN_REPO=appleboy/gorush
PLUGIN_TAGS=1.0.0,1.0
如何製作


Plugins
Go Plugin vs Bash Plugin


(Any language you want)
Bash Plugin
kind: pipeline


type: docker


name: default


steps:


- name: webhook


image: acme/webhook


settings:


url: http:
/
/
hook.acme.com


method: post


body: |


hello world
#
!
/bin/sh


curl 


-X ${PLUGIN_METHOD} 


-
d ${PLUGIN_BODY} 


${PLUGIN_URL}
FROM alpine:3.14


ADD script.sh /bin/


RUN chmod
+
x /bin/script.sh


RUN apk -Uuv add curl ca
-
certif
i
cates


ENTRYPOINT /bin/script.sh
$ docker build -t acme/webhook .
$ docker push acme/webhook
$ docker run --rm 
-e PLUGIN_METHOD=post 
-e PLUGIN_URL=http://hook.acme.com 
-e PLUGIN_BODY=hello 
acme/webhook
編譯
$ docker build -t acme/webhook .
$ docker push acme/webhook
$ docker run --rm 
-e PLUGIN_METHOD=post 
-e PLUGIN_URL=http://hook.acme.com 
-e PLUGIN_BODY=hello 
acme/webhook
測試
Go Plugin
package main


import (


"net/http"


"os"


"strings"


)


func main() {


body
:
=
strings.NewReader(


os.Getenv("PLUGIN_BODY"),


)


_, err
:
=
http.NewRequest(


os.Getenv("PLUGIN_METHOD"),


os.Getenv("PLUGIN_URL"),


body,


)


if err
!
=
nil {


os.Exit(1)


}


} GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o webhook
FROM alpine:3.14


ADD webhook /bin/


RUN apk -Uuv add ca
-
certif
i
cates


ENTRYPOINT /bin/webhook
練習
• 任何程式語⾔進⾏ Plugin 撰寫


• 申請 dockerhub 帳號密碼


• 透過 Drone ⾃動打包 Image 並上傳
Deploy to Production Server


via SSH Command
- name: ssh commands


image: appleboy/drone
-
ssh


settings:


host: foo.com


username: root


key:


from_secret: ssh_key


passphrase: 1234


port: 22


script:


- mkdir abc/def/efg


- echo "you can't see the steps."
Promotions


⼿動部署
kind: pipeline


type: docker


name: default


steps:


- name: test


image: node


commands:


- npm install


- npm run test


- npm run bundle


- name: deploy


image: appleboy/drone
-
ssh


settings:
.
.
.


trigger:


event:


- promote


target:


- production


kind: pipeline


type: docker


name: deploy


steps:


- name: test


image: node


commands:


- npm install


- npm run test


- npm run bundle


- name: deploy


image: appleboy/drone
-
ssh


settings:
.
.
.


when:


event:


- promote


target:


- production
$ drone build promote octocat/hello-world 42 staging
$ drone build promote <repo> <number> <environment>
$ drone build promote octocat/hello-world 42 production
Thanks

More Related Content

What's hot

Kubernetes Application Deployment with Helm - A beginner Guide!
Kubernetes Application Deployment with Helm - A beginner Guide!Kubernetes Application Deployment with Helm - A beginner Guide!
Kubernetes Application Deployment with Helm - A beginner Guide!
Krishna-Kumar
 
Cloud Native Application
Cloud Native ApplicationCloud Native Application
Cloud Native Application
VMUG IT
 
Introduction to Docker - VIT Campus
Introduction to Docker - VIT CampusIntroduction to Docker - VIT Campus
Introduction to Docker - VIT Campus
Ajeet Singh Raina
 
Kubernetes deployment strategies - CNCF Webinar
Kubernetes deployment strategies - CNCF WebinarKubernetes deployment strategies - CNCF Webinar
Kubernetes deployment strategies - CNCF Webinar
Etienne Tremel
 
Kubernetes PPT.pptx
Kubernetes PPT.pptxKubernetes PPT.pptx
Kubernetes PPT.pptx
ssuser0cc9131
 
Comparing Next-Generation Container Image Building Tools
 Comparing Next-Generation Container Image Building Tools Comparing Next-Generation Container Image Building Tools
Comparing Next-Generation Container Image Building Tools
Akihiro Suda
 
Continuous Integration/Deployment with Gitlab CI
Continuous Integration/Deployment with Gitlab CIContinuous Integration/Deployment with Gitlab CI
Continuous Integration/Deployment with Gitlab CI
David Hahn
 
Kubernetes Introduction
Kubernetes IntroductionKubernetes Introduction
Kubernetes Introduction
Eric Gustafson
 
How to write a Dockerfile
How to write a DockerfileHow to write a Dockerfile
How to write a Dockerfile
Knoldus Inc.
 
Docker 基礎介紹與實戰
Docker 基礎介紹與實戰Docker 基礎介紹與實戰
Docker 基礎介紹與實戰
Bo-Yi Wu
 
91APP: 從 "零" 開始的 DevOps
91APP: 從 "零" 開始的 DevOps91APP: 從 "零" 開始的 DevOps
91APP: 從 "零" 開始的 DevOps
Andrew Wu
 
Gitlab, GitOps & ArgoCD
Gitlab, GitOps & ArgoCDGitlab, GitOps & ArgoCD
Gitlab, GitOps & ArgoCD
Haggai Philip Zagury
 
Gitops Hands On
Gitops Hands OnGitops Hands On
Gitops Hands On
Brice Fernandes
 
Kubernetes Basics
Kubernetes BasicsKubernetes Basics
Kubernetes Basics
Eueung Mulyana
 
Introduction to Docker Compose
Introduction to Docker ComposeIntroduction to Docker Compose
Introduction to Docker Compose
Ajeet Singh Raina
 
Docker Compose by Aanand Prasad
Docker Compose by Aanand Prasad Docker Compose by Aanand Prasad
Docker Compose by Aanand Prasad
Docker, Inc.
 
Introduction to GitHub Actions
Introduction to GitHub ActionsIntroduction to GitHub Actions
Introduction to GitHub Actions
Bo-Yi Wu
 
What is Docker | Docker Tutorial for Beginners | Docker Container | DevOps To...
What is Docker | Docker Tutorial for Beginners | Docker Container | DevOps To...What is Docker | Docker Tutorial for Beginners | Docker Container | DevOps To...
What is Docker | Docker Tutorial for Beginners | Docker Container | DevOps To...
Edureka!
 
Kubernetes Introduction
Kubernetes IntroductionKubernetes Introduction
Kubernetes Introduction
Red Hat Developers
 

What's hot (20)

Kubernetes Application Deployment with Helm - A beginner Guide!
Kubernetes Application Deployment with Helm - A beginner Guide!Kubernetes Application Deployment with Helm - A beginner Guide!
Kubernetes Application Deployment with Helm - A beginner Guide!
 
Cloud Native Application
Cloud Native ApplicationCloud Native Application
Cloud Native Application
 
Introduction to Docker - VIT Campus
Introduction to Docker - VIT CampusIntroduction to Docker - VIT Campus
Introduction to Docker - VIT Campus
 
Kubernetes deployment strategies - CNCF Webinar
Kubernetes deployment strategies - CNCF WebinarKubernetes deployment strategies - CNCF Webinar
Kubernetes deployment strategies - CNCF Webinar
 
Kubernetes PPT.pptx
Kubernetes PPT.pptxKubernetes PPT.pptx
Kubernetes PPT.pptx
 
Comparing Next-Generation Container Image Building Tools
 Comparing Next-Generation Container Image Building Tools Comparing Next-Generation Container Image Building Tools
Comparing Next-Generation Container Image Building Tools
 
Continuous Integration/Deployment with Gitlab CI
Continuous Integration/Deployment with Gitlab CIContinuous Integration/Deployment with Gitlab CI
Continuous Integration/Deployment with Gitlab CI
 
Kubernetes Introduction
Kubernetes IntroductionKubernetes Introduction
Kubernetes Introduction
 
How to write a Dockerfile
How to write a DockerfileHow to write a Dockerfile
How to write a Dockerfile
 
Docker 基礎介紹與實戰
Docker 基礎介紹與實戰Docker 基礎介紹與實戰
Docker 基礎介紹與實戰
 
91APP: 從 "零" 開始的 DevOps
91APP: 從 "零" 開始的 DevOps91APP: 從 "零" 開始的 DevOps
91APP: 從 "零" 開始的 DevOps
 
Gitlab, GitOps & ArgoCD
Gitlab, GitOps & ArgoCDGitlab, GitOps & ArgoCD
Gitlab, GitOps & ArgoCD
 
jenkinsで遊ぶ
jenkinsで遊ぶjenkinsで遊ぶ
jenkinsで遊ぶ
 
Gitops Hands On
Gitops Hands OnGitops Hands On
Gitops Hands On
 
Kubernetes Basics
Kubernetes BasicsKubernetes Basics
Kubernetes Basics
 
Introduction to Docker Compose
Introduction to Docker ComposeIntroduction to Docker Compose
Introduction to Docker Compose
 
Docker Compose by Aanand Prasad
Docker Compose by Aanand Prasad Docker Compose by Aanand Prasad
Docker Compose by Aanand Prasad
 
Introduction to GitHub Actions
Introduction to GitHub ActionsIntroduction to GitHub Actions
Introduction to GitHub Actions
 
What is Docker | Docker Tutorial for Beginners | Docker Container | DevOps To...
What is Docker | Docker Tutorial for Beginners | Docker Container | DevOps To...What is Docker | Docker Tutorial for Beginners | Docker Container | DevOps To...
What is Docker | Docker Tutorial for Beginners | Docker Container | DevOps To...
 
Kubernetes Introduction
Kubernetes IntroductionKubernetes Introduction
Kubernetes Introduction
 

Similar to Drone CI/CD 自動化測試及部署

Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境
Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境
Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境
謝 宗穎
 
Real World Experience of Running Docker in Development and Production
Real World Experience of Running Docker in Development and ProductionReal World Experience of Running Docker in Development and Production
Real World Experience of Running Docker in Development and Production
Ben Hall
 
PuppetConf 2016: The Challenges with Container Configuration – David Lutterko...
PuppetConf 2016: The Challenges with Container Configuration – David Lutterko...PuppetConf 2016: The Challenges with Container Configuration – David Lutterko...
PuppetConf 2016: The Challenges with Container Configuration – David Lutterko...
Puppet
 
Challenges of container configuration
Challenges of container configurationChallenges of container configuration
Challenges of container configuration
lutter
 
Deploying Windows Containers on Windows Server 2016
Deploying Windows Containers on Windows Server 2016Deploying Windows Containers on Windows Server 2016
Deploying Windows Containers on Windows Server 2016
Ben Hall
 
Running Docker in Development & Production (DevSum 2015)
Running Docker in Development & Production (DevSum 2015)Running Docker in Development & Production (DevSum 2015)
Running Docker in Development & Production (DevSum 2015)
Ben Hall
 
[Codelab 2017] Docker 기초 및 활용 방안
[Codelab 2017] Docker 기초 및 활용 방안[Codelab 2017] Docker 기초 및 활용 방안
[Codelab 2017] Docker 기초 및 활용 방안
양재동 코드랩
 
Docker &amp; rancher
Docker &amp; rancherDocker &amp; rancher
Docker &amp; rancher
Alin Voinea
 
Docker container management
Docker container managementDocker container management
Docker container management
Karol Kreft
 
Docker Essentials Workshop— Innovation Labs July 2020
Docker Essentials Workshop— Innovation Labs July 2020Docker Essentials Workshop— Innovation Labs July 2020
Docker Essentials Workshop— Innovation Labs July 2020
CloudHero
 
Dockerizing a Symfony2 application
Dockerizing a Symfony2 applicationDockerizing a Symfony2 application
Dockerizing a Symfony2 application
Roman Rodomansky
 
Start tracking your ruby infrastructure
Start tracking your ruby infrastructureStart tracking your ruby infrastructure
Start tracking your ruby infrastructure
Sergiy Kukunin
 
Running Docker in Development & Production (#ndcoslo 2015)
Running Docker in Development & Production (#ndcoslo 2015)Running Docker in Development & Production (#ndcoslo 2015)
Running Docker in Development & Production (#ndcoslo 2015)
Ben Hall
 
Introction to docker swarm
Introction to docker swarmIntroction to docker swarm
Introction to docker swarm
Hsi-Kai Wang
 
桃園市教育局Docker技術入門與實作
桃園市教育局Docker技術入門與實作桃園市教育局Docker技術入門與實作
桃園市教育局Docker技術入門與實作
Philip Zheng
 
[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview
[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview
[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview
Leo Lorieri
 
Docker Security workshop slides
Docker Security workshop slidesDocker Security workshop slides
Docker Security workshop slides
Docker, Inc.
 
Docker Compose to Production with Docker Swarm
Docker Compose to Production with Docker SwarmDocker Compose to Production with Docker Swarm
Docker Compose to Production with Docker Swarm
Mario IC
 
Настройка окружения для кросскомпиляции проектов на основе docker'a
Настройка окружения для кросскомпиляции проектов на основе docker'aНастройка окружения для кросскомпиляции проектов на основе docker'a
Настройка окружения для кросскомпиляции проектов на основе docker'a
corehard_by
 
JDO 2019: Tips and Tricks from Docker Captain - Łukasz Lach
JDO 2019: Tips and Tricks from Docker Captain - Łukasz LachJDO 2019: Tips and Tricks from Docker Captain - Łukasz Lach
JDO 2019: Tips and Tricks from Docker Captain - Łukasz Lach
PROIDEA
 

Similar to Drone CI/CD 自動化測試及部署 (20)

Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境
Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境
Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境
 
Real World Experience of Running Docker in Development and Production
Real World Experience of Running Docker in Development and ProductionReal World Experience of Running Docker in Development and Production
Real World Experience of Running Docker in Development and Production
 
PuppetConf 2016: The Challenges with Container Configuration – David Lutterko...
PuppetConf 2016: The Challenges with Container Configuration – David Lutterko...PuppetConf 2016: The Challenges with Container Configuration – David Lutterko...
PuppetConf 2016: The Challenges with Container Configuration – David Lutterko...
 
Challenges of container configuration
Challenges of container configurationChallenges of container configuration
Challenges of container configuration
 
Deploying Windows Containers on Windows Server 2016
Deploying Windows Containers on Windows Server 2016Deploying Windows Containers on Windows Server 2016
Deploying Windows Containers on Windows Server 2016
 
Running Docker in Development & Production (DevSum 2015)
Running Docker in Development & Production (DevSum 2015)Running Docker in Development & Production (DevSum 2015)
Running Docker in Development & Production (DevSum 2015)
 
[Codelab 2017] Docker 기초 및 활용 방안
[Codelab 2017] Docker 기초 및 활용 방안[Codelab 2017] Docker 기초 및 활용 방안
[Codelab 2017] Docker 기초 및 활용 방안
 
Docker &amp; rancher
Docker &amp; rancherDocker &amp; rancher
Docker &amp; rancher
 
Docker container management
Docker container managementDocker container management
Docker container management
 
Docker Essentials Workshop— Innovation Labs July 2020
Docker Essentials Workshop— Innovation Labs July 2020Docker Essentials Workshop— Innovation Labs July 2020
Docker Essentials Workshop— Innovation Labs July 2020
 
Dockerizing a Symfony2 application
Dockerizing a Symfony2 applicationDockerizing a Symfony2 application
Dockerizing a Symfony2 application
 
Start tracking your ruby infrastructure
Start tracking your ruby infrastructureStart tracking your ruby infrastructure
Start tracking your ruby infrastructure
 
Running Docker in Development & Production (#ndcoslo 2015)
Running Docker in Development & Production (#ndcoslo 2015)Running Docker in Development & Production (#ndcoslo 2015)
Running Docker in Development & Production (#ndcoslo 2015)
 
Introction to docker swarm
Introction to docker swarmIntroction to docker swarm
Introction to docker swarm
 
桃園市教育局Docker技術入門與實作
桃園市教育局Docker技術入門與實作桃園市教育局Docker技術入門與實作
桃園市教育局Docker技術入門與實作
 
[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview
[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview
[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview
 
Docker Security workshop slides
Docker Security workshop slidesDocker Security workshop slides
Docker Security workshop slides
 
Docker Compose to Production with Docker Swarm
Docker Compose to Production with Docker SwarmDocker Compose to Production with Docker Swarm
Docker Compose to Production with Docker Swarm
 
Настройка окружения для кросскомпиляции проектов на основе docker'a
Настройка окружения для кросскомпиляции проектов на основе docker'aНастройка окружения для кросскомпиляции проектов на основе docker'a
Настройка окружения для кросскомпиляции проектов на основе docker'a
 
JDO 2019: Tips and Tricks from Docker Captain - Łukasz Lach
JDO 2019: Tips and Tricks from Docker Captain - Łukasz LachJDO 2019: Tips and Tricks from Docker Captain - Łukasz Lach
JDO 2019: Tips and Tricks from Docker Captain - Łukasz Lach
 

More from Bo-Yi Wu

用 Go 語言打造多台機器 Scale 架構
用 Go 語言打造多台機器 Scale 架構用 Go 語言打造多台機器 Scale 架構
用 Go 語言打造多台機器 Scale 架構
Bo-Yi Wu
 
Job Queue in Golang
Job Queue in GolangJob Queue in Golang
Job Queue in Golang
Bo-Yi Wu
 
Golang Project Layout and Practice
Golang Project Layout and PracticeGolang Project Layout and Practice
Golang Project Layout and Practice
Bo-Yi Wu
 
Drone 1.0 Feature
Drone 1.0 FeatureDrone 1.0 Feature
Drone 1.0 Feature
Bo-Yi Wu
 
GraphQL IN Golang
GraphQL IN GolangGraphQL IN Golang
GraphQL IN Golang
Bo-Yi Wu
 
Go 語言基礎簡介
Go 語言基礎簡介Go 語言基礎簡介
Go 語言基礎簡介
Bo-Yi Wu
 
drone continuous Integration
drone continuous Integrationdrone continuous Integration
drone continuous Integration
Bo-Yi Wu
 
Gorush: A push notification server written in Go
Gorush: A push notification server written in GoGorush: A push notification server written in Go
Gorush: A push notification server written in Go
Bo-Yi Wu
 
用 Drone 打造 輕量級容器持續交付平台
用 Drone 打造輕量級容器持續交付平台用 Drone 打造輕量級容器持續交付平台
用 Drone 打造 輕量級容器持續交付平台
Bo-Yi Wu
 
用 Go 語言 打造微服務架構
用 Go 語言打造微服務架構用 Go 語言打造微服務架構
用 Go 語言 打造微服務架構
Bo-Yi Wu
 
Introduction to Gitea with Drone
Introduction to Gitea with DroneIntroduction to Gitea with Drone
Introduction to Gitea with Drone
Bo-Yi Wu
 
運用 Docker 整合 Laravel 提升團隊開發效率
運用 Docker 整合 Laravel 提升團隊開發效率運用 Docker 整合 Laravel 提升團隊開發效率
運用 Docker 整合 Laravel 提升團隊開發效率
Bo-Yi Wu
 
用 Go 語言實戰 Push Notification 服務
用 Go 語言實戰 Push Notification 服務用 Go 語言實戰 Push Notification 服務
用 Go 語言實戰 Push Notification 服務
Bo-Yi Wu
 
用 Go 語言打造 DevOps Bot
用 Go 語言打造 DevOps Bot用 Go 語言打造 DevOps Bot
用 Go 語言打造 DevOps Bot
Bo-Yi Wu
 
A painless self-hosted Git service: Gitea
A painless self-hosted Git service: GiteaA painless self-hosted Git service: Gitea
A painless self-hosted Git service: Gitea
Bo-Yi Wu
 
Write microservice in golang
Write microservice in golangWrite microservice in golang
Write microservice in golang
Bo-Yi Wu
 
用 Docker 改善團隊合作模式
用 Docker 改善團隊合作模式用 Docker 改善團隊合作模式
用 Docker 改善團隊合作模式
Bo-Yi Wu
 
Git flow 與團隊合作
Git flow 與團隊合作Git flow 與團隊合作
Git flow 與團隊合作
Bo-Yi Wu
 
PHP & JavaScript & CSS Coding style
PHP & JavaScript & CSS Coding stylePHP & JavaScript & CSS Coding style
PHP & JavaScript & CSS Coding style
Bo-Yi Wu
 
Why to choose laravel framework
Why to choose laravel frameworkWhy to choose laravel framework
Why to choose laravel framework
Bo-Yi Wu
 

More from Bo-Yi Wu (20)

用 Go 語言打造多台機器 Scale 架構
用 Go 語言打造多台機器 Scale 架構用 Go 語言打造多台機器 Scale 架構
用 Go 語言打造多台機器 Scale 架構
 
Job Queue in Golang
Job Queue in GolangJob Queue in Golang
Job Queue in Golang
 
Golang Project Layout and Practice
Golang Project Layout and PracticeGolang Project Layout and Practice
Golang Project Layout and Practice
 
Drone 1.0 Feature
Drone 1.0 FeatureDrone 1.0 Feature
Drone 1.0 Feature
 
GraphQL IN Golang
GraphQL IN GolangGraphQL IN Golang
GraphQL IN Golang
 
Go 語言基礎簡介
Go 語言基礎簡介Go 語言基礎簡介
Go 語言基礎簡介
 
drone continuous Integration
drone continuous Integrationdrone continuous Integration
drone continuous Integration
 
Gorush: A push notification server written in Go
Gorush: A push notification server written in GoGorush: A push notification server written in Go
Gorush: A push notification server written in Go
 
用 Drone 打造 輕量級容器持續交付平台
用 Drone 打造輕量級容器持續交付平台用 Drone 打造輕量級容器持續交付平台
用 Drone 打造 輕量級容器持續交付平台
 
用 Go 語言 打造微服務架構
用 Go 語言打造微服務架構用 Go 語言打造微服務架構
用 Go 語言 打造微服務架構
 
Introduction to Gitea with Drone
Introduction to Gitea with DroneIntroduction to Gitea with Drone
Introduction to Gitea with Drone
 
運用 Docker 整合 Laravel 提升團隊開發效率
運用 Docker 整合 Laravel 提升團隊開發效率運用 Docker 整合 Laravel 提升團隊開發效率
運用 Docker 整合 Laravel 提升團隊開發效率
 
用 Go 語言實戰 Push Notification 服務
用 Go 語言實戰 Push Notification 服務用 Go 語言實戰 Push Notification 服務
用 Go 語言實戰 Push Notification 服務
 
用 Go 語言打造 DevOps Bot
用 Go 語言打造 DevOps Bot用 Go 語言打造 DevOps Bot
用 Go 語言打造 DevOps Bot
 
A painless self-hosted Git service: Gitea
A painless self-hosted Git service: GiteaA painless self-hosted Git service: Gitea
A painless self-hosted Git service: Gitea
 
Write microservice in golang
Write microservice in golangWrite microservice in golang
Write microservice in golang
 
用 Docker 改善團隊合作模式
用 Docker 改善團隊合作模式用 Docker 改善團隊合作模式
用 Docker 改善團隊合作模式
 
Git flow 與團隊合作
Git flow 與團隊合作Git flow 與團隊合作
Git flow 與團隊合作
 
PHP & JavaScript & CSS Coding style
PHP & JavaScript & CSS Coding stylePHP & JavaScript & CSS Coding style
PHP & JavaScript & CSS Coding style
 
Why to choose laravel framework
Why to choose laravel frameworkWhy to choose laravel framework
Why to choose laravel framework
 

Recently uploaded

Software Testing Exam imp Ques Notes.pdf
Software Testing Exam imp Ques Notes.pdfSoftware Testing Exam imp Ques Notes.pdf
Software Testing Exam imp Ques Notes.pdf
MayankTawar1
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
abdulrafaychaudhry
 
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
Juraj Vysvader
 
2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
Georgi Kodinov
 
BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024
Ortus Solutions, Corp
 
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Globus
 
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Globus
 
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBrokerSOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar
 
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
Tier1 app
 
How to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good PracticesHow to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good Practices
Globus
 
De mooiste recreatieve routes ontdekken met RouteYou en FME
De mooiste recreatieve routes ontdekken met RouteYou en FMEDe mooiste recreatieve routes ontdekken met RouteYou en FME
De mooiste recreatieve routes ontdekken met RouteYou en FME
Jelle | Nordend
 
top nidhi software solution freedownload
top nidhi software solution freedownloadtop nidhi software solution freedownload
top nidhi software solution freedownload
vrstrong314
 
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
informapgpstrackings
 
Into the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdfInto the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdf
Ortus Solutions, Corp
 
Using IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New ZealandUsing IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New Zealand
IES VE
 
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Globus
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
Max Andersen
 
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Globus
 
Corporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMSCorporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMS
Tendenci - The Open Source AMS (Association Management Software)
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2
 

Recently uploaded (20)

Software Testing Exam imp Ques Notes.pdf
Software Testing Exam imp Ques Notes.pdfSoftware Testing Exam imp Ques Notes.pdf
Software Testing Exam imp Ques Notes.pdf
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
 
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
 
2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
 
BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024
 
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
 
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
 
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBrokerSOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBroker
 
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
 
How to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good PracticesHow to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good Practices
 
De mooiste recreatieve routes ontdekken met RouteYou en FME
De mooiste recreatieve routes ontdekken met RouteYou en FMEDe mooiste recreatieve routes ontdekken met RouteYou en FME
De mooiste recreatieve routes ontdekken met RouteYou en FME
 
top nidhi software solution freedownload
top nidhi software solution freedownloadtop nidhi software solution freedownload
top nidhi software solution freedownload
 
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
 
Into the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdfInto the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdf
 
Using IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New ZealandUsing IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New Zealand
 
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
 
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
 
Corporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMSCorporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMS
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 

Drone CI/CD 自動化測試及部署