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
- 到個人帳號裡面有個設定
- 選擇應用程式
- 新增 OAuth2 url 填入
https://您的 Drone 位置/login
按下建立應用程式
- 系統會自動產生出客戶端 ID 及客戶端密鑰
- 產生共用密碼
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 方式進行連線。
-
可以參考內站安裝方式Nginx 模組擴充 - Debian \ Ubuntu
-
Drone 設定檔
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
- 系統會自動跳轉到 Gitea 服務要久登入剛剛所使用的帳號進行登入
- 會要寫填入您的電子郵件、姓名及團體名稱。
- 登入成功後系統會自動同步該帳號上所有在使用專案。
補充說明
使用 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