Drone 教程


Drone 相對於常見的 Jenkins,選中 Drone 的原因在於它非常簡潔,不像 Jenkins 那樣復雜,同時它擁有可以滿足基本需求的能力,並且提供了許多實用的插件。
而且 Jenkins 包含了大量的圖形化界面,雖然大而全,但是在有時候只想簡單的做一個 CI 的容器時就顯得有些笨重,本文簡單的介紹使用 docker 搭建 drone 項目,並發布一個 SpringBoot 的 Java 項目。

Drone 文檔給出了相對於不同git倉庫和部署方式的方案,支持的git倉庫有:GitHub,GitLab,Gitea,Gogs 等,本文使用 Gogs 倉庫

使用 Docker 安裝 Drone

首先下載 Drone 的 Server 和 Runner 的鏡像

docker pull drone/drone:2
docker pull drone/drone-runner-docker:1

Server:為 Drone 的管理提供了 Web 頁面,用於管理從 Git 上獲取的倉庫中的流水線任務

Runner:一個單獨的守護進程,會輪詢 Server,獲取需要執行的流水線任務,之后執行

安裝 drone-server

sudo docker run \
  --volume=/home/cl/drone:/data \
  --env=DRONE_AGENTS_ENABLED=true \
  --env=DRONE_GOGS_SERVER=http://192.168.50.228:13000 \
  --env=DRONE_RPC_SECRET=rpc_secret \
  --env=DRONE_SERVER_HOST=192.168.50.228:3080 \
  --env=DRONE_SERVER_PROTO=http \
  --env=DRONE_USER_CREATE=username:chenglong,admin:true \
  --publish=3080:80 \
  --publish=443:443 \
  --restart=always \
  --detach=true \
  --name=drone \
  drone/drone:2

DRONE_GOGS_SERVER:用於配置 Gogs 服務地址

DRONE_RPC_SECRET:Drone 的共享秘鑰,用於驗證連接到 server 的 rpc 連接,server 和 runner 需要提供同樣的秘鑰

DRONE_SERVER_HOST:用於配置 Drone server 外部可訪問的地址

DRONE_SERVER_PROTO:用於配置 Drone server 外部可訪問的協議,必須是 http 或 https

DRONE_USER_CREATE:創建一個管理員賬號,該賬號需要在 Gogs 中注冊好,否則在后面無法將倉庫設置為Trusted

安裝 drone-runner-docker

sudo docker run --detach \
  --volume=/var/run/docker.sock:/var/run/docker.sock \
  --env=DRONE_RPC_PROTO=http \
  --env=DRONE_RPC_HOST=192.168.50.228:3080 \
  --env=DRONE_RPC_SECRET=rpc_secret \
  --env=DRONE_RUNNER_CAPACITY=2 \
  --env=DRONE_RUNNER_NAME=docker-runner \
  --publish=3000:3000 \
  --restart=always \
  --name=runner \
  drone/drone-runner-docker:1

DRONE_RPC_PROTO:用於配置連接到 Drone server 的協議,必須是 http 或 https

DRONE_RPC_HOST:用於配置 Drone server 的訪問地址,runner 會連接到 server 獲取流水線任務並執行

DRONE_RPC_SECRET:用於配置連接到 Drone server 的共享秘鑰

DRONE_RUNNER_CAPACITY:限制 runner 並發執行的流水線任務數量

DRONE_RUNNER_NAME:自定義 runner 的名稱

Drone 的使用

訪問下 Drone 的控制台頁面,第一次登錄需要輸入賬號密碼(在Gogs中注冊的賬號),訪問地址就是剛剛制定的 DRONE_SERVER_HOST 的地址。此時我們在Gogs中的項目會現在在列表中

點擊項目后點擊 Activate Repository

接下來我們需要對倉庫進行設置,將倉庫設置為 Trusted,最后點擊SAVE按鈕保存

保存成功后會在 Gogs 中自動配置一個 Web 鈎子,當我們推送代碼到 Gogs 中去時,會觸發這個鈎子,然后執行在 Drone 中的流水線任務

這里要注意,現在 Gogs 的 WebHooks 是沒有辦法測試的,點擊后會提示 io timeout,這是由於我們項目中還沒有配置 .drone.yml 文件導致的,添加后即可正常調用

剩下的就是 .drone.yml 腳本的編寫了,這個腳本要放在項目的根目錄下,我這里簡單的演示一下在項目的部署。

.drone.yml

kind: pipeline
type: docker
name: house-pipeline

steps:
  - name: build image
    image: maven:3-jdk-11
    volumes:
      - name: maven-cache
        path: /root/.m2/repository
      - name: maven-build
        path: /app/build
    commands:
      - mvn install -DskipTests=true -Dmaven.javadoc.skip=true
      - mv -f /drone/src/target/*.jar /app/build/house.jar

  - name: build-start
    image: appleboy/drone-ssh
    settings:
      host: 192.168.50.228
      username: cl
      password:
        from_secret: ssh_password
      port: 22
      command_timeout: 5m
      script:
        - cd /home/cl/maven-build
        - chmod +x run.sh
        - sh run.sh
volumes:
  - name: maven-cache
    host:
      path: /home/cl/repository
  - name: maven-build
    host:
      path: /home/cl/maven-build

run.sh

#!/bin/bash

source /etc/profile
nohup java -jar -Xmx1024M -Xms256M -Duser.timezone=GMT+8 house.jar --server.port=5188 > house.log 2>&1 &

注意 yml 的語法,使用空格而不是 Tab 可以減少看不見的錯誤
在使用 shell 腳本發布項目的時候,如果提示 java command not found,需要先執行一下 source 一下環境變量,這樣就能正常使用了

簡單解釋一下 .drone.yml,具體的使用請參考官網 demo,這里不做詳細說明

掛載容器的 /root/.m2/repository 和 /app/build 到宿主機,方便重復使用 .m2 倉庫以及保存打包好的 jar 文件

使用 appleboy/drone-ssh 這個鏡像遠程到制定的服務器中,然后調用 shell 腳本發布項目

成果

配置好后,每當我提交代碼到指定分支后,drone 就會幫我們自動部署項目啦。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM