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