CI/CD Server Note 05

Drone協助開發團隊更快速地將程式碼部署到生產環境中,同時確保程式碼的品質和穩定性。

CI/CD Server Note 05

Install Drone - CI/CD Tools

Drone是一個以GO語言開發的開源CI/CD平台,它可以協助開發團隊在程式碼變更時自動進行測試、建置和部署,這種自動化流程有助於提高團隊的效率,確保程式碼的品質,並快速將變更推送到生產環境中。

Drone可以透過配置簡單的YAML設定檔來定義 CI/CD 流程,該設定檔可以指定哪些測試需要運行、何時進行建置、以及何時將應用程式部署到伺服器上,Drone 也支援多種版本控制系統,如GitHub、Gitea和GitLab等等。

建置與安裝Drone

要使用Drone來建置CI/CD的流程需要先建立版本控制系統,根據Drone的文檔網站可以看到所支援的版本控制系統,在先前的文章介紹了如何安裝Gitea,安裝好了Gitea之後需要在Gitea的設定授權OAuth2才可以開始安裝Drone。

在Gitea > 設定 > 應用程式 > 新增OAuth2應用程式寫入需要的資訊,其中下面那項URL根據你之後要建立的Drone網址填入即可,若還不清楚後續再做更改也可以:

建立應用程式後要記錄客戶端ID和客戶端密鑰,在後續安裝Drone的時候會用到,密鑰在按下儲存按鈕後會被隱藏,若後面忘記的話也沒關係,按下重新產生密鑰就可以:

後續因為要建置drone-runner,需要透過OpenSSL生成一組密鑰。透過下面指令在linux產生一組長度為128 個位元組(16 個字元)隨機(rand子指令)的十六進制字串,加上"-hex"選項,表示要輸出十六進制形式的隨機數:

openssl rand -hex 16

接下來就只剩下建立Drone Server和Drone Runner的Docker,將前面所記錄的客戶端ID、客戶端密鑰和透過OpenSSL產生的隨機數填入下面的docker-compose.yml上,用docker-compose建立:

version: "3"

services:
  drone-server:
    image: drone/drone:latest
    container_name: drone-server
    ports:
      - "5080:80"
    volumes:
      - ./drone:/data
      - /var/run/docker.sock:/var/run/docker.sock
    restart: always
    environment:
      - DRONE_GITEA_SERVER=your.gitea.website
      - DRONE_GITEA_CLIENT_SECRET=客戶端密鑰
      - DRONE_GITEA_CLIENT_ID=客戶端ID
      - DRONE_GIT_ALWAYS_AUTH=true
      - DRONE_SERVER_HOST=your.drone.website
      - DRONE_SERVER_PROTO=http
      - DRONE_RPC_SECRET=透過OpenSSL產生的隨機數
      - DRONE_AGENTS_ENABLED=true
      # 先自行建立admin
      - DRONE_USER_CREATE=username:your_user_name,admin:true
      - DRONE_UI_USERNAME=root
      - DRONE_UI_PASSWORD=root

  drone-agent:
    image: drone/drone-runner-docker:latest
    container_name: drone-runner
    ports:
      - "30001:3000"
    restart: always
    depends_on:
      - drone-server
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - DRONE_RPC_PROTO=http
      - DRONE_RPC_HOST=your.drone.website
      - DRONE_RPC_SECRET=透過OpenSSL產生的隨機數
      - DRONE_RUNNER_CAPACITY=10
      - DRONE_RUNNER_NAME=agent-01

使用Drone - 入門

建好後Server跟Runner後開啟一個專案,編輯.drone.yml輸入以下程式碼,送出commit後push到Gitea:

kind: pipeline
type: docker
name: hello_world

steps:
- name: hello_world
  image: ubuntu:20.04
  commands:
    - echo hello drone

進入Drone Server的網址,點選CONTINUE:

接下來會需要填入你的基本訊息:

授權Drone可以存取你的帳戶:

處理完後就可以看到Drone的管理頁面,在首頁會顯示可以存取到的所有專案,如果沒有顯示可以點擊SYNC到Drone,這個時候Drone還不會開始工作,需要啟用要使用Drone的專案:

進入剛剛建立的專案後,點選畫面中央的+ACTIVATE REPOSITORY 就可以為這個專案啟用、建立CI的流程:

啟用後Settings的頁面會長這樣,後續如果需要做一些調整或是添加一些參數可以在這個頁面中調整:

點選Builds可以看到剛剛push上去的commit已經通過測試了:

點進這次的紀錄之後,就可以看到關於這次 Build 的詳細過程:

在Gitea上可以在Commit Message後面看到一個✅,代表通過了你寫的測試:

結論

總結來說,Drone是一個用於自動化持續整合和持續交付流程的工具,它可以協助開發團隊更快速地將程式碼部署到生產環境中,同時確保程式碼的品質和穩定性。