1. 程式人生 > 其它 >Gogs+Drone+Docker自動化部署CICD

Gogs+Drone+Docker自動化部署CICD

環境 centos7

一:安裝docker

1、通過 uname -r 命令檢視你當前的核心版本

$ uname -r

2、使用 root 許可權登入 Centos。確保 yum 包更新到最新。

$ sudo yum update

3、解除安裝舊版本(如果安裝過舊版本的話)

$ sudo yum remove docker  docker-common docker-selinux docker-engine

4、安裝需要的軟體包, yum-util 提供yum-config-manager功能,另外兩個是devicemapper驅動依賴的

$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2

5、設定yum源

$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

6、可以檢視所有倉庫中所有docker版本,並選擇特定版本安裝

$ yum list docker-ce --showduplicates | sort -r

7、安裝docker

$ sudo yum install docker-ce  #由於repo中預設只開啟stable倉庫,故這裡安裝的是最新穩定版17.12.0
$ sudo yum install <FQPN>  # 例如:sudo yum install docker-ce-17.12.0.ce

8、啟動並加入開機啟動

$ sudo systemctl start docker
$ sudo systemctl enable docker

9、驗證安裝是否成功(有client和service兩部分表示docker安裝啟動都成功了)

$ docker version

docker 基本操作命令

run 執行一個容器
start/stop/restart 啟動/停止/重啟
kill 向容器內傳送一條kill命令
rm 刪除一個容器,如果還在執行得先stop
pause/unpause 暫停/恢復
create 建立一個容器但是不執行
exec 向容器內傳送命令

docker run 命令備註

-a stdin: 指定標準輸入輸出內容型別,可選 STDIN/STDOUT/STDERR 三項;
-d: 後臺執行容器,並返回容器ID;
-i: 以互動模式執行容器,通常與 -t 同時使用;
-P: 隨機埠對映,容器內部埠隨機對映到主機的埠
-p: 指定埠對映,格式為:主機(宿主)埠:容器埠
-t: 為容器重新分配一個偽輸入終端,通常與 -i 同時使用;
--name="nginx-lb": 為容器指定一個名稱;
--dns 8.8.8.8: 指定容器使用的DNS伺服器,預設和宿主一致;
--dns-search example.com: 指定容器DNS搜尋域名,預設和宿主一致;
-h "mars": 指定容器的hostname;
-e username="ritchie": 設定環境變數;
--env-file=[]: 從指定檔案讀入環境變數;
--cpuset="0-2" or --cpuset="0,1,2": 繫結容器到指定CPU執行;
-m :設定容器使用記憶體最大值;
--net="bridge": 指定容器的網路連線型別,支援 bridge/host/none/container: 四種類型;
--link=[]: 新增連結到另一個容器;
--expose=[]: 開放一個埠或一組埠;
--volume , -v: 繫結一個卷

二:安裝Gogs

1:提前開啟伺服器或者本地的防火牆,如下命令得開啟10022和10080
2:提前建立資料夾 /mydata/gogs

docker run -p 10022:22 -p 10080:3000 --name=gogs \
-e TZ="Asia/Shanghai" \
-v /mydata/gogs:/data  \
-d gogs/gogs

開啟瀏覽器。輸入 ***********:10080 進行配置

三:安裝Drone

1)安裝Drone server(服務端,用來和gogs互動及一些配置和指定任務)

1:提前開啟伺服器或者本地的防火牆,如下命令得開啟7777
2:提前建立資料夾 /var/drone
3: 開啟debugger開關,方便除錯問題
4:detach的標誌,true為後臺執行,false輸出日誌
5:-p 相當於 --publish ,-v 相當於 --volume,-e 相當於 --env
6: DRONE_RPC_SECRET 可以使用自定義的金鑰(用你喜歡的字串)
7:DRONE_USER_CREATE 這個是建立管理原使用者,這裡不設定的話,後面會遇到麻煩,而且儘量設定成gogs的登入使用者(jjia,替換你的gogs使用者名稱)

 docker run \
  -v=/var/drone:/data \
  --env=DRONE_DEBUG=true \
  --env=DRONE_LOGS_TRACE=true \
  --env=DRONE_LOGS_DEBUG=true\
  --env=DRONE_LOGS_PRETTY=true \
  --env=DRONE_AGENTS_ENABLED=true \
  --env=DRONE_GIT_ALWAYS_AUTH=true \
  --env=DRONE_RPC_SECRET=buxiangshagnban \
  --env=DRONE_SERVER_HOST=http://*******:7777 \
  --env=DRONE_SERVER_PROTO=http \
  --env=DRONE_GOGS_SERVER=http://*******:10080 \
  -e DRONE_USER_CREATE=username:jjia,admin:true \
  --publish=7777:80 \
  -e TZ="Asia/Shanghai" \
  --restart=always \
  --detach=true \
  --name=drone2 \
  drone/drone:2

開啟瀏覽器。輸入 ***********:7777 進行配置
使用者名稱和密碼是gogs的使用者名稱密碼

2)安裝Drone runner(客戶端,用來執行任務)

1:這裡的埠可以不進行開放,因為他的原理是一直定時去請求drone server的,不是server進行推送的,所以不開放埠也沒事
2:DRONE_RPC_SECRET 這個一定要和drone server 的DRONE_RPC_SECRET保持一致,不然無法認證
3:這裡我安裝了兩個runner ,但是不是必須的,你可以只安裝一個docker runner或者ssh runner,甚至還可以安裝筆的runner詳情看官網
4:其餘的不說了,看好官網的導航中有server和runner兩個方向就行

  docker run --detach \
  --env=DRONE_RPC_PROTO=http \
  --env=DRONE_RPC_HOST=***********:7777 \
  --env=DRONE_RPC_SECRET=buxiangshagnban \
  --publish=9108:3000 \
  --restart always \
  --name ssrn1 \
  drone/drone-runner-ssh
  
docker run --detach \
  --volume=/var/run/docker.sock:/var/run/docker.sock \
  --env=DRONE_RPC_PROTO=http \
  --env=DRONE_RPC_HOST=***********:7777 \
  --env=DRONE_RPC_SECRET=buxiangshagnban \
  --env=DRONE_RUNNER_CAPACITY=2 \
  --env=DRONE_RUNNER_NAME=myfirstrunner \
  --publish=8089:3000 \
  --restart=always \
  --name=dcrn \
  drone/drone-runner-docker:1

3).drone.yml(配置檔案,實現具體的釋出流程)

.drone.yml 放置的位置,需要放在你要實現自動部署的專案的根目錄下
具體配置看官網文件
示例

---
kind: pipeline
type: docker
name: df_pipeline

#流程觸發的方式
trigger:
  #指定分支
  branch:
    - debugger
  #指定事件
  event:
    - push

steps: # 定義流水線執行步驟,這些步驟將順序執行
  - name: package # 流水線名稱
    image: maven:3-jdk-8 # 定義建立容器的Docker映象
    volumes: # 將容器內目錄掛載到宿主機,倉庫需要開啟Trusted設定
      - name: mevan-setting
        path: /usr/share/maven/conf #同步配置
    commands: # 定義在Docker容器中執行的shell命令
      - ls
      - mvn clean # 應用打包命令
      - mvn install # 應用打包命令
      - mkdir -p /app/gcs/
      - cp -r ./** /app/gcs/

  - name: start
    image: appleboy/drone-ssh # SSH工具映象
    settings:
      host: ***** # 遠端連線地址
      username: root # 遠端連線賬號
      password:
        from_secret: sever_password # 從Secret中讀取SSH密碼
      port: 22 # 遠端連線埠
      command_timeout: 5m # 遠端執行命令超時時間
      script:
        - ls

volumes: # 定義流水線掛載目錄,用於共享資料
  - name: mevan-setting #用於mevan下載加速
    host:
      path: /mydata/maven/conf/ # 從宿主機中掛載的目錄