您好,登錄后才能下訂單哦!
基于 Docker 的 CI/CD 工具 Drone 所有編譯、測試的流程都在 Docker 容器中進行。
開發者只需在項目中包含 .drone.yml 文件,將代碼推送到 git 倉庫,Drone 就能夠自動化的進行編譯、測試、發布。
本小節以 GitLab+ Drone 來演示 Drone 的工作流程。
環境:CentOS Linux release 7.6.1810
gitlab服務地址:192.168.25.135
drone服務地址:192.168.25.132
在192.168.25.135部署gitlab服務:
1、安裝依賴
sudo yum install -y curl policycoreutils-python openssh-server
sudo systemctl enable sshd
sudo systemctl start sshd
2、打開防火墻訪問控制(關閉防火墻,可忽略)
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo systemctl reload firewalld
3、安裝郵件服務(按需配置)
sudo yum install postfix
sudo systemctl enable postfix
sudo systemctl start postfix
4、配置gitlab的yum倉庫
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash
5、yum安裝gitlab服務
安裝時要將EXTERNAL_URL的內容填寫為自己gitlab準備配置的地址(因為此時用虛擬機,未配置域名,所以使用http://192.168.25.135)
sudo EXTERNAL_URL="http://192.168.25.135" yum install -y gitlab-ee
6、gitlab配置文件:/etc/gitlab/gitlab.rb(可以修改EXTERNAL_URL等配置)
修改配置文件后執行進行更新:gitlab-ctl reconfigure
gitlab項目目錄:/var/opt/gitlab
gitlab服務名稱:gitlab-runsvdir
啟動、停止、重啟服務:
systemctl (start|stop|restart|status) gitlab-runsvdir
gitlab-ctl (start|stop|restart|status)
7、修改管理員默認密碼
#gitlab-rails console production //進入gitlab管理控制臺
irb(main):001:0>u=User.where(id:1).first //查找賬號(User.all 可以查看所有用戶)
irb(main):002:0>u.password='12345678' //設置密碼為12345678
irb(main):003:0>u.password_confirmation='12345678' //再次確認密碼
irb(main):004:0>u.save! //保存
irb(main):005:0>exit //退出當前設置流程
參考:https://about.gitlab.com/install/ (所有系統的安裝方式)
在192.168.25.132部署drone服務:
1、在gitlab上創建認證。user-setting-Applications
填寫名稱(name),回調地址(Redirect URI),勾選api、read_user權限
2、創建完成,復制Application ID 和Secret
3、生成drone server和agent之間使用的驗證secret
$ openssl rand -hex 16
4f3b7f51e3dd678c08cf2d0675c66760
4、下載drone server鏡像
docker pull drone/drone:1
5、啟動服務
docker run \
--volume=/var/lib/drone:/data \
--env=DRONE_AGENTS_ENABLED=true \ //是否允許agent
--env=DRONE_GITLAB_SERVER=http://192.168.25.135 \ //gitlab地址
--env=DRONE_GITLAB_CLIENT_ID=${DRONE_GITLAB_CLIENT_ID} \ //gitlab上創建的application ID
--env=DRONE_GITLAB_CLIENT_SECRET=${DRONE_GITLAB_CLIENT_SECRET} \ //gitlab上創建的application ID對應的secret
--env=DRONE_RPC_SECRET=${DRONE_RPC_SECRET} \ //與drone agent驗證使用,即在3中命令生成的secret
--env=DRONE_SERVER_HOST=${DRONE_SERVER_HOST} \ //drone-server地址
--env=DRONE_SERVER_PROTO=${DRONE_SERVER_PROTO} \ //drone-server訪問協議,如果配置了ssl或acme,此字段默認為https
--publish=80:80 \
--publish=443:443 \
--restart=always \
--detach=true \
--name=drone \
drone/drone:1
例:
docker run \
--volume=/var/lib/drone:/data \
--env=DRONE_AGENTS_ENABLED=true \
--env=DRONE_GITLAB_SERVER=http://192.168.25.135 \
--env=DRONE_GITLAB_CLIENT_ID=fc7611e90bcdb7d3dc19bd0ad5338bffadfe48c1a3a13af6912863745e2894d7 \
--env=DRONE_GITLAB_CLIENT_SECRET=8d3ab2adeb18bdd09cd8b9987955e282db0ab35e2efd2f30b7a71f320e5f2ac7 \
--env=DRONE_RPC_SECRET=4f3b7f51e3dd678c08cf2d0675c66760 \
--env=DRONE_SERVER_HOST=192.168.25.132 \
--env=DRONE_SERVER_PROTO=http \
--env=DRONE_TLS_AUTOCERT=false \
--env=DRONE_LOGS_DEBUG=true \ //打開了debug日志,便于調試
--publish=80:80 \
--publish=443:443 \
--restart=always \
--detach=true \
--name=drone \
drone/drone:1
6、訪問http://192.168.25.132,自動跳轉到gitlab授權。
同步倉庫
激活
參考:https://docs.drone.io/installation/overview/
在192.168.25.132上部署docker runner服務
docker pull drone/drone-runner-docker:1
$ docker run -d \
-v /var/run/docker.sock:/var/run/docker.sock \
-e DRONE_RPC_PROTO=https \ //drone server通信協議
-e DRONE_RPC_HOST=drone.company.com \ //drone server地址
-e DRONE_RPC_SECRET=super-duper-secret \ //drone server啟動時配置的secret
-e DRONE_RUNNER_CAPACITY=2 \ //設置并發數量,默認為2
-e DRONE_RUNNER_NAME=${HOSTNAME} \
-p 3000:3000 \
--restart always \
--name runner \
drone/drone-runner-docker:1
例如:
docker run -d \
-v /var/run/docker.sock:/var/run/docker.sock \
-e DRONE_RPC_PROTO=http \
-e DRONE_RPC_HOST=192.168.25.132 \
-e DRONE_RPC_SECRET=4f3b7f51e3dd678c08cf2d0675c66760 \
-e DRONE_RUNNER_CAPACITY=2 \
-e DRONE_RUNNER_NAME=192.168.25.132 \
-p 3000:3000 \
--restart always \
--name runner drone/agent:1
遇到問題:
1、倉庫不能激活。
日志報錯
{"admin":false,"level":"debug","msg":"api: sync repository permissions","name":"456","namespace":"liyang","read":true,"request-id":"1UC2for9ub8hMZeIbmCtD2uKb7A","time":"2019-11-27T09:19:22Z","user.login":"liyang","write":false}
{"admin":false,"level":"debug","msg":"api: repository permissions synchronized","name":"456","namespace":"liyang","read":true,"request-id":"1UC2fuYsMFEy2USt6v0bOCpNC3o","time":"2019-11-27T09:19:22Z","user.login":"liyang","write":false}
查詢gitlab訪問日志
192.168.25.132 - - [27/Nov/2019:17:19:26 +0800] "POST /api/v4/projects/abcd%2F456/hooks?merge_requests_events=true&push_events=true&tag_push_events=true&token=V3zqKtE9ZWaoeTxAlbqnW55FHp9NY79H&url=http%3A%2F%2F192.168.25.132%2Fhook HTTP/1.1" 422 29 "" "Go-http-client
193
經過查找,此問題為gitlab局域網訪問配置問題,
解決方案:使用管理員賬號登錄setting-network-Outbound requests
Expand-勾選Allow requests to the local network from web hooks and services
參考:https://discourse.drone.io/t/error-activating-gitlab-repository/3153
https://gitlab.com/gitlab-org/gitlab-foss/issues/55605
https://discourse.drone.io/c/general-discussion
https://gitlab.com/gitlab-org/gitlab-foss/issues?state=all
問題2:Project settings沒有Trusted選項
Protected - If Enabled, blocks pipeline if the yaml signature cannot be verified.
Trusted - Enables privileged capabilities: an ability to start privileged containers and mount host machine volumes.
解決方案:在啟動時添加選項--env=DRONE_USER_CREATE=username:abcd,admin:true \
參考:https://discourse.drone.io/t/the-repositories-setting-does-not-have-trusted/6093
https://docs.drone.io/manage/user/
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。