gitlab连接jenkins ci以及gitlab ci及docker命令

 

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

发布了94 篇原创文章 · 获赞 28 · 访问量 30万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章