Skip to main content

Gitea 連結 Drone CI/CD 架設流程

  BUBU 因公司有這樣子需求架設一台自動化部署服務來使用

運行環境


  環境都是在 「Proxmox VE 」 虛擬系統上架設,都是以 「 LXC 」模式為主,除非有特殊狀況會告知使用 「 VM 」 模式

  • 系統環境: Debian 11
  • Web 服務: Nginx 1.22

安裝過程


  因 Drone 只能用 Docker 方式進行架設

安裝 Docker 服務

  • 安裝需要的套件
apt install ca-certificates curl gnupg lsb-release
  • 安裝 Docker 認證 KEY
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  • 設定來源庫
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  • 安裝 Docker
apt update
apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y
  • 下載 Docker Compose 套件
curl -L https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-x86_64 > /usr/local/bin/docker-compose
  • 設定 Docker Compose 執行權限
chmod +x /usr/local/bin/docker-compose
設定 Gitea OAuth2

  • 到個人帳號裡面有個設定

gitdr-01.png

  • 選擇應用程式

gitdr-02.png

  • 新增 OAuth2 url 填入 https://您的 Drone 位置/login 按下建立應用程式

gitdr-03.png

  • 系統會自動產生出客戶端 ID 及客戶端密鑰

gitdr-04.png

  • 產生共用密碼
openssl rand -hex 16
安裝 Drone 服務

  • 下載 Drone Docker
docker pull drone/drone:2
  • 啟動之前先建立給 Drone 目錄
mkdir -p /home/drone
  • 設定啟 Drone 啟動服務
docker run -d \
# 設定本機的 Database 目錄存放 drone 服務相關資料
--volume=/home/drone:/data \
--env=DRONE_GIT_ALWAYS_AUTH=true \
# 設定與 gitea OAuth 連結
--env=DRONE_GITEA_SERVER=gitea位置 \
--env=DRONE_GITEA_CLIENT_ID=客戶端 ID \
--env=DRONE_GITEA_CLIENT_SECRET=客戶端密鑰 \
# gitea drone 共用密碼
--env=DRONE_RPC_SECRET=共用密碼 \
# 設定 drone
--env=DRONE_SERVER_HOST=Drone位置 \
--env=DRONE_SERVER_PROTO=http \
--env=DRONE_USER_CREATE=username:leeze,admin:true \
# 設定 Port號
--publish=3080:80 \
--publish=10443:443 \
--restart=always \
--detach=true \
--name=drone \
drone/drone:latest
  • 下載 Drone-runner Docker
docker pull drone/drone-runner-docker:1
  • 設定啟 Drone-runner 啟動服務
docker run -d \
  --volume=/var/run/docker.sock:/var/run/docker.sock \
  --env=DRONE_RPC_PROTO=https \
  --env=DRONE_RPC_HOST=Drone位置 \
  --env=DRONE_RPC_SECRET=共用密碼 \
  --env=DRONE_RUNNER_CAPACITY=2 \
  --env=DRONE_RUNNER_NAME=runner-docker \
  --publish=3000:3000 \
  --restart=always \
  --name=runner-docker \
  drone/drone-runner-docker:1

Nginx


  不想要使用 IP 方式連線可以使用 Nginx 的 Proxy 方式進行連線。

server {
    listen 80;
    server_name 您的連線網域;
    rewrite ^(.*)$ https://${server_name}$1 permanent;
}
#
server {
# 使用 https 和 http/2 協定
    listen 443 ssl http2;
# 上述的 IPv6 方式
    listen [::]:443 ssl http2;
    server_name 您的連線網域;
#
# certs sent to the client in SERVER HELLO are concatenated in ssl_certificate
#
# SSL 憑證證書路徑
    ssl_certificate /etc/nginx/ssl/fullchain.pem;
# 私鑰路徑
    ssl_certificate_key /etc/nginx/ssl/privkey.pem;
# 緩存有效期
    ssl_session_timeout 1d;
# 緩存憑證類型和大小
    ssl_session_cache shared:SSL:50m;
#
# intermediate configuration. tweak to your needs.
#
# 使用的加密協定
    ssl_protocols TLSv1.3 TLSv1.2 TLSv1.1;
# 加密演算法,越前面的優先級越高
    ssl_ciphers 'TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CH
# 交握過程使用 Server 的首選加演算法,這裡使用 Client 為首選
    ssl_prefer_server_ciphers on;
#
    access_log /var/log/nginx/dr_access.log;
    error_log /var/log/nginx/dr_error.log;
#
    location / {
        proxy_pass http://站位服務連線位置:3080;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#        proxy_set_header X-Graylog-Server-URL http://$server_name/;
        proxy_headers_hash_max_size     1024;
        proxy_headers_hash_bucket_size  128;
        proxy_redirect off;
        proxy_pass_header Authorization;
    }
#
    location ~* \.(?:ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$
        proxy_pass http://站台服務連線位置:3080;
    }
}

連線方式


  • 開啟瀏灠器輸入 https://Drone連線位置,點選 CONTINUE

drone-install-01.png

  • 系統會自動跳轉到 Gitea 服務要久登入剛剛所使用的帳號進行登入

drone-install-02.png

  • 會要寫填入您的電子郵件、姓名及團體名稱。

drone-install-03.png

  • 登入成功後系統會自動同步該帳號上所有在使用專案。

drone-install-04.png

補充說明


  使用 Docker compose 方式進行兩個服務同時啟用

  • 設定 vim docker-drone.yml
version: "3.7"

services:
  server:
    image: drone/drone:2
    restart: always
    ports:
      - 3080:80
      - 10443:443
    volumes:
      # 設定本機的 Database 目錄存放 drone 服務相關資料
      - /home/drone:/data
    environment:
      - DRONE_GIT_ALWAYS_AUTH=true
      # 設定與 gitea OAuth 連結
      - DRONE_GITEA_SERVER=https://gitea 位置
      - DRONE_GITEA_CLIENT_ID=客戶端 ID
      - DRONE_GITEA_CLIENT_SECRET=客戶端密鑰
      # gitea drone 共用密碼
      - DRONE_RPC_SECRET=共用密碼
      # 設定 drone
      - DRONE_SERVER_HOST=drone位置
      - DRONE_SERVER_PROTO=http
      - DRONE_USER_CREATE=username:druser,admin:true
      # deubgu 時可以拿掉下面三個註解
      # - DRONE_LOGS_DEBUG=true
      # - DRONE_LOGS_PRETTY=true
      # - DRONE_LOGS_COLOR=true

  runner:
    image: drone/drone-runner-docker:1
    restart: always
    ports:
      - 3000:3000
    depends_on:
      - server
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
    # 設定與 Drone Server 連結
      - DRONE_RPC_PROTO=https
      - DRONE_RPC_HOST=drone位置
      - DRONE_RPC_SECRET=共用密碼
      - DRONE_RUNNER_CAPACITY=2
      - DRONE_RUNNER_NAME=runner-docker
  • 在用 docker 指令啟用
docker-compose -f ./docker-drone.yml up -d

備註





參考相關網頁