(三) 輕量化自建 Drone CI For Gitea —— 打造自己的CI/CD工作流
寫在前邊
這一篇文章是基於 Gitea+Drone CI+Vault 打造屬於自己的CI/CD工作流系列文章第三篇,讓我們一起來完成 drone
與 gitea
的搭配使用,這篇內容比較簡單和容易,也是最終篇。
在第一篇文章中(一) Drone CI For Github —— 打造自己的CI/CD工作流,我們一起了解了Drone For Github
的部署和使用,一起感受了 Drone
的簡單強大的功能帶來的方便和快捷。
在第二篇文章中(二) Drone CI使用Vault作為憑據儲存 —— 打造自己的CI/CD工作流,我們一起了解了Vault
的部署和使用,並瞭解和學習了怎麼為 Drone
指定 Secret
的儲存為 Vault
,解決了在實際的應用中,不同專案的敏感資料重複使用以及許可權控制問題。
在更早的一篇文章中基於Gitea打造一個屬於你自己的程式碼託管平臺,我們一起了解了 Gitea
的部署和使用,感受 Gitea
作為一個輕量化的程式碼託管平臺,依然擁有豐富的功能和美觀的介面。
我們分別瞭解了 Drone
、Vault
和 Gitea
的部署和使用,那麼我們為什麼不把它們結合起來,打造一個專屬於自己的CI/CD工作流呢?
廢話少說,說幹就幹,開始搞事。
組合Drone
、Vault
和 Gitea
接來下,我們開始將
Drone
、Vault
和Gitea
組合到一起,構建一個專屬於自己的CI/CD工作流如果你對它們還不瞭解,請參考我之前的文章。
編寫 docker-compose.yml
這裡我們結合之前三篇文章的docker-compose.yml
加入
gitea
之後,只需要修改drone-server
的environment
刪除
DRONE_GITHUB_SERVER
DRONE_GITHUB_CLIENT_ID
DRONE_GITHUB_CLIENT_SECRET
加入
DRONE_GITEA_SKIP_VERIFY
DRONE_GITEA_SERVER
version: "3.7"
services:
nginx:
image: nginx:alpine
container_name: dronetest_nginx
ports:
- "80:80"
restart: always
networks:
- dronenet
mysql:
image: mysql:5.7
restart: always
container_name: dronetest_mysql
environment:
- MYSQL_ROOT_PASSWORD=root_password
- MYSQL_DATABASE=drone
- MYSQL_USER=drone
- MYSQL_PASSWORD=drone_password
networks:
- dronenet
volumes:
- /path/to/conf/my.cnf:/etc/mysql/my.cnf:rw
- /path/to/data:/var/lib/mysql/:rw
- /path/to/logs:/var/log/mysql/:rw
vault:
image: vault:latest
container_name: vault
restart: always
networks:
- dronenet
volumes:
- ./vault/file:/vault/file
- ./vault/config:/vault/config
- ./vault/logs:/vault/logs
cap_add:
- IPC_LOCK
environment:
- VAULT_ADDR=http://127.0.0.1:8200
command: vault server -config=/vault/config/local.json #這句非常重要,一定要替換原有的Dockerfile中的CMD,不然會自動初始化,生成的資料都在docker logs中,不說你肯定找不到。dog.jpg,所以我選擇手動初始化
memcache:
image: memcached:alpine
container_name: test_memcache
restart: always
networks:
- dronenet
gitea:
image: gitea/gitea:latest
restart: always
container_name: test_gitea
networks:
- dronenet
ports:
- "22:22" #git服務對外使用22埠會更加方便
volumes:
- /var/lib/gitea:/data:rw #gitea的data資料應該做持久化,對映到宿主機磁碟上
drone-server:
image: drone/drone:1.0.0-rc.5 #不要用latest,latest並非穩定版本
container_name: dronetest_server
networks:
- dronenet
volumes:
- ${DRONE_DATA}:/var/lib/drone/:rw
- /var/run/docker.sock:/var/run/docker.sock:rw
restart: always
environment:
- DRONE_DEBUG=true
- DRONE_DATABASE_DATASOURCE=drone:drone_password@tcp(dronetest_mysql:3306)/drone?parseTime=true #mysql配置,要與上邊mysql容器中的配置一致
- DRONE_DATABASE_DRIVER=mysql
- DRONE_GITEA_SKIP_VERIFY=false
- DRONE_GITEA_SERVER=http://test_gitea:3000
- DRONE_GIT_ALWAYS_AUTH=false
- DRONE_RUNNER_CAPACITY=2
- DRONE_RPC_SECRET=YOU_KEY_ALQU2M0KdptXUdTPKcEw #RPC祕鑰
- DRONE_SERVER_PROTO=http #這個配置決定了你啟用時倉庫中的webhook地址的proto
- DRONE_SERVER_HOST=dronetest.yiranzai.top
- DRONE_USER_CREATE=username:yiranzai,admin:true #管理員賬號,是你想要作為管理員的Gitea使用者名稱
drone-vault:
image: drone/vault
container_name: dronetest_vault
restart: always
networks:
- dronenet
environment:
- SECRET_KEY=7890bcce69bb685a9a424767fe9d1be1 #和drone-agent通訊的加密
- DEBUG=true
- VAULT_ADDR=http://vault:8200
- VAULT_TOKEN_RENEWAL=84h
- VAULT_TOKEN_TTL=168h
- VAULT_TOKEN=s.mx4KQycrFAfiaHIuPnNLhFCy #這裡不要用root token,用上邊生成的只讀token
drone-agent:
image: drone/agent:1.0.0-rc.5
container_name: dronetest_agent
restart: always
networks:
- dronenet
depends_on:
- drone-server
volumes:
- /var/run/docker.sock:/var/run/docker.sock:rw
environment:
- DRONE_SECRET_SECRET=7890bcce69bb685a9a424767fe9d1be1
- DRONE_SECRET_ENDPOINT=http://dronetest_vault:3000
- DRONE_RPC_SERVER=http://dronetest_server
- DRONE_RPC_SECRET=YOU_KEY_ALQU2M0KdptXUdTPKcEw
- DRONE_DEBUG=true
- DRONE_LOGS_DEBUG=true
- DRONE_LOGS_PRETTY=true
- DRONE_LOGS_NOCOLOR=false
networks:
dronenet:
複製程式碼
結束了?
是的結束了,如果你仔細看了前兩篇文章的話,會明白,這一點都不奇怪,從
github
切換到gitea
只需要簡單改動配置即可。本系列前兩篇文章是重中之重,請著重閱讀。
總結
本篇文章簡單歸簡單,但是整體的配合還是有一些需要注意的點需要說明一下
gitea
的賬號就是用來登陸drone
的賬號,在drone-server
中的environment
:DRONE_USER_CREATE
指明管理員的使用者名稱- 所有的url都要寫上協議
Vault
初始化生成的五個unseal key
和root token
一定要記住並且不能洩露drone-agent
可以有多個,做分散式。vault
也是可以分散式的
系列文章
- 基於 Gitea+Drone CI+Vault 打造屬於自己的CI/CD工作流
- (一) Drone CI For Github —— 打造自己的CI/CD工作流
- (二) Drone CI使用Vault作為憑據儲存 —— 打造自己的CI/CD工作流
- (三) 輕量化自建 Drone CI For Gitea —— 打造自己的CI/CD工作流
- 番外:基於Gitea打造一個屬於你自己的程式碼託管平臺
有什麼問題,歡迎評論或郵件。 好了,繼續划水去了。