使用云服务器中转部署一个本地jenkins流水线
...About 2 min
使用云服务器中转部署一个本地jenkins流水线
概述
本地机器部署jenkins的性能比云服务器一般都要强很多,而且如果生产测试环境依赖于一些硬件设备,云服务器就无法完成jenkins相关内容了。 但本地机器无公网IP,通过如Gitee的WebHook功能无法直接请求到本地机器,但如果有一个云服务器,就可以通过它进行数据中转,需要实现的内容有:
- 云服务器部署一个HTTP服务器,用于监听WebHook请求,同时作为消息中间件的生产者,过滤鉴权请求后向消息中间件发布消息;
- 云服务器部署一个消息中间件,用于转发请求到本地机器;
- 本地机器部署一个消费者,订阅生产者的消息,并用该消息触发本地jenkins流水线;
- 本地机器部署一个jenkins,设置远程触发url,由生产者请求该url后触发自动工作流。
本地jenkins部署
docker rm -f jenkins
docker run -itd --network jenkins --restart=always --name jenkins \
--group-add 998 -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker -v /etc/docker:/etc/docker \
-v $HOME/docker_volumes/jenkins:/var/jenkins_home -v $HOME/docker_volumes/jenkins_workspace:/workspace \
-p 8000:8080 -p 50000:50000 jenkins/jenkins:lts
其中--group-add 998
这个参数是通过cat /etc/group | grep docker
查看的,是docker
用户组的id
,--group-add
让jenkins
内的用户以给定用户组的权限运行,这样才能访问宿主机的docker
,否则:
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.45/containers/json": dial unix /var/run/docker.sock: connect: permission denied
在jenkins
的脚本中,我们还要注意docker exec -i
而不要-it
,如果使用了-t
则又会失败:
the input device is not a TTY
Build step 'Execute shell' marked build as failure
docker exec -i -w /workspace some-develop-container some-command-or-script
若遇到以下问题,则使用rm ~/.ssh/known_hosts
解决:
git clone ssh://git@60.205.140.76:2222/copper/xianwei-blog.git
正克隆到 'xianwei-blog'...
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:qfzPpyXVOKroyHvjGNhUWXVZEVH2unVhqafOJP1jo3M.
Please contact your system administrator.
Add correct host key in /home/copper/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /home/copper/.ssh/known_hosts:6
remove with:
ssh-keygen -f "/home/copper/.ssh/known_hosts" -R "[60.205.140.76]:2222"
ECDSA host key for [60.205.140.76]:2222 has changed and you have requested strict checking.
Host key verification failed.
fatal: 无法读取远程仓库。
请确认您有正确的访问权限并且仓库存在。