docker-compoe二进制版本下载地址,https://github.com/docker/compose/releases/tag/1.14.0-rc2
jenkins页面配置分支及仓库地址,配置build triggers 获取到gitlab hook url,粘贴到gitlab settings integrations中增加一个web hook即可,高级用法可以配置token
配置独立到runner,gitlab settings integrations ci/cd runner 增加runner,install gitlab runner, https://docs.gitlab.com/runner/install/有具体资料
机器上gitlab-runner配置文件/etc/gitlab-runner/config.toml,配置volumes = ["/usr/bin/docker:/usr/bin/docker", "/usr/bin/docker-compose:/usr/bin/docker-compose", "/usr/lib/x86_64-linux-gnu/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7"],可以将宿主机的命令共享给docker虚拟机
.gitlab-ci.yml文件中stage配置tags属性可以绑定自定义的ci_runner
awk 'BEGIN { cmd="cp -ri /home/usr/* /usr"; print "n" |cmd; }' >/dev/null 2>&1
递归拷贝文件,不覆盖命令
docker container清空
docker ps -a | grep -vi container| grep -v grep | awk '{print $1}' | xargs docker rm -f
docker 运行容器命令
docker run -v /usr/bin/:/usr/bin -v /usr/local/bin/:/usr/local/bin -it debian:latest
docker run -v /usr:/usr -v /var/run/docker.sock:/var/run/docker.sock -it debian:latest
docker run -v /etc/gitlab-runner:/home/kk-it --name gitlab_runner gitlab/gitlab-runner-helper:x86_64-ac8e767a sleep 1000000
runner安装资料
https://docs.gitlab.com/runner/register/index.html
https://docs.gitlab.com/runner/install/linux-manually.html#using-binary-file
https://github.com/docker/compose/releases/tag/1.14.0-rc2
默认使用gitlab-runner用户
# 物理机上安装docker docker-compose命令
# 给gitlab-runner用户添加root用户权限
/etc/sudoers
# User privilege specification
root ALL=(ALL:ALL) ALL
gitlab-runner ALL=(ALL:ALL) ALL
# 给gitlab-runner用户添加docker命令权限或者添加root组权限
gpasswd -a gitlab-runner docker
# ci_runner配置文件中配置ci执行者为shell,如果配置为docker的话,虽然可以共享宿主机的docker资源,但是ci运行时无法gitlab runner以docker启动后,里面再启动docker运行测试程序时,目录映射会有问题,必须将宿主物理机的目录先映射到gitlab runner的docker,然后再映射到测试程序的docker
文件 /etc/gitlab-runner/config.toml配置多个仓库的多个runner,也可以在gitlab runner安装的时候选择group runner而不是special runner
concurrent = 1
check_interval = 0
[session_server]
session_timeout = 1800
[[runners]]
name = "c runner 1"
url = "https://xxx.xxx/"
token = "xxxx"
executor = "shell"
[runners.custom_build_dir]
[runners.cache]
[runners.cache.s3]
[runners.cache.gcs]
[[runners]]
name = "a runner 2"
url = "https://xxx.xxx.xxx/"
token = "xxx"
executor = "shell"
[runners.custom_build_dir]
[runners.cache]
[runners.cache.s3]
[runners.cache.gcs]
# gitlab环境变量配置,开启保护状态后,则只有master等保护分支可见,调试时应关闭
# docker 容器清除,网络清除
# .gitlab-ci.yml的执行用户为gitlab-runner用户,ci.sh的执行用户为root,root用户执行生成的文件目录需要删除掉,否则下次启动会失败
# sudo gitlab-runner register命令可以添加注册仓库到/etc/gitlab-runner/config.toml配置中
gitlab-runner启动停止添加仓库
sudo gitlab-runner start
sudo gitlab-runner stop
sudo gitlab-runner register
gitlab-runner用户启动会有权限问题,直接使用root用户启动
nohup /usr/local/bin/gitlab-runner run --working-directory /home/gitlab-runner --config /etc/gitlab-runner/config.toml --service gitlab-runner --syslog --user root &
.gitlab-ci.yml文件内容配置variables添加配置
variables: GIT_STRATEGY: "clone" GIT_CHECKOUT: "true"
报错修改
将 /root/.profile
文件中的 mesg n || true
改为如下内容。
1 |
tty -s && mesg n || true |
这就能让 mesg
在没有 tty 时,不发送消息,而在有 tty 时继续调用。现在你可以不用再看到 ttyname failed: Inappropriate ioctl for device
了。
docker容器资源及网络资源清除,避免重复及冲突
docker ps -a | grep -vi container| grep -v grep | awk '{print $1}' | xargs docker rm -f
docker network rm $(docker network ls|grep perf|awk '{print $1}')
问题
1 ci运行后提示文件删除失败,然后终止运行
用户权限及身份问题,gitlab-runner是使用gitlab-runner用户执行的,下载的代码仓库及目录都是该用户权限下的,里面自动docker运行ci生成的覆盖率数据文件则是使用root用户身份产生的,第一次运行后,下次运行的时候提示删除错误
2 OCI runtime错误
gitlab-runner用户没有docker命令权限或者目录权限,等等
3 前面执行成功,后面的提交提示docker内部网络相关错误
执行ci测试程序,使用docker-compose,内部搭建网络连接,使用完毕后没有清除资源,下次启动时冲突
https://docs.gitlab.com/runner/register/index.html
https://docs.gitlab.com/runner/install/linux-manually.html#using-binary-file