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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章