參考網站:https://docs.gitlab.com/runner/install/linux-repository.html
https://docs.gitlab.com/runner/register/index.html
1、添加官方gitlab官方倉庫???這一步操作不明白什麼意思,反正安裝官網來先。
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
2、安裝最新版本的gitlab runner,當然,也可以安裝特定版本,參照官方連接
yum install gitlab-runner
3、然後就可以註冊信息到gitlab了。
gitlab-runner register
輸入後會讓你輸入gitlab ci 協調者的url,這個是需要在安裝的gitlab上面找的,步驟:設置=>Overview=>Runners然後就可以看到了,參考下圖
4、然後讓你輸入token,這裏也看的到。
5、再然後讓你輸入gitlab-ci runner的描述信息,自己看着填吧,以後也可以在gitlab頁面上進行修改
6、然後添加一個tag,以後也可以在頁面修改,也可以不輸入調過去
7、選擇executor運行方式,官網使用的docker,其他教程都選擇shell,選擇docker需要選擇一個鏡像什麼的,我使用shell
這樣就算是完成了,然後你可以在gitlab上面看到這個runner,設置=>Overview=>Runners,runner有公有還私有的區別。
然後我寫一個.gitlab-ci.yml文件在項目跟目錄提交測試下情況。
stages: - deploy deploy: stage: deploy script: - cat /etc/redhat-release only: - master tags: - testtag1
可以在倉庫中看CI job執行的情況,進入你項目的倉庫,按照左側菜單展開,即可看到執行的任務,紅框圈的按鈕點擊可以校驗你的.gitlab-ci.yml文件的正確性。
選擇其中一個pipeline點擊進去,可以看到執行的效果,如下圖所示。
關鍵字 | 是否必須 | 描述 |
---|---|---|
script | 必須 | 定義Runner需要執行的腳本或命令 |
image | 非必須 | 需要使用的docker鏡像,請查閱該文檔 |
services | 非必須 | 定義了所需的docker服務,請查閱該文檔 |
stage | 非必須 | 定義了工作的場景階段,默認是test |
type | 非必須 | stage的別名,不贊成使用 |
variables | 非必須 | 在job級別上定義的變量 |
only | 非必須 | 定義哪些git引用(分支)適用該job |
except | 非必須 | 定義了哪些git引用(分支)不適用該job |
tags | 非必須 | 定義了哪些runner適用該job(runner在創建時會要求用戶輸入標籤名來代表該runner) |
allow_failure | 非必須 | 允許任務失敗,但是如果失敗,將不會改變提交狀態 |
when | 非必須 | 定義job什麼時候能被執行,可以是on_success,on_failure,always或者manual |
dependencies | 非必須 | 定義了該job依賴哪一個job,如果設置該項,你可以通過artifacts設置 |
artifacts | 非必須 | 所謂工件。。就是在依賴項之間傳遞的東西,類似cache,但原理與cache不同 |
cache | 非必須 | 定義需要被緩存的文件、文件夾列表 |
before_script | 非必須 | 覆蓋在根元素上定義的before_script |
after_script | 非必須 | 覆蓋在根元素上定義的after_script |
environment | 非必須 | 定義讓job完成部署的環境名稱 |
retry | 非必須 | 定義job失敗後的自動重試次數 |
其中有些配置加入我自己的理解:
下面這個artifacts配置項意思就是,將生成的jar包上傳到gitlab上面,可以用gitlab ui上面顯示,並下載。
artifacts: paths: - target/aa.jar
踩坑:
1、注意編寫.gitlab-ci.yml文件“-”符號後面一定得加個空格,不然命令會報錯,雖然輸出控制檯顯示正確命令,但是執行是不成功的。
2、代碼推送到gitlab上之後,一直是pending狀態,要等很久才pick到一個runner來執行,這個現象一般是隻在gitlab上刪除的runner,但是沒有在runner的配置文件中刪除對應的配置信息,手動刪除即可。/etc/gitlab-runner.config.toml,刪除只剩下你需要的即可,然後重新啓動下runner:gitlab-ruuner restart
3、我在.gitlab-ci.yml文件中寫了一段執行docker打包鏡像的腳本,執行的時候總是出問題說是沒有權限執行。
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.26/build?buildargs=%7B%7D&buildbinds=null&cachefrom=%5B%5D&cgroupparent=&cpuperiod=0&cpuquota=0&cpusetcpus=&cpusetmems=&cpushares=0&dockerfile=Dockerfile&labels=%7B%7D&memory=0&memswap=0&networkmode=default&rm=1&shmsize=0&t=overduestatic&ulimits=null: dial unix /var/run/docker.sock: connect: permission denied
然後我在前面步驟寫了一個腳本,拿到runner的用戶是那個命令(whoami),然後賦予該用戶權限。
sudo groupadd docker
sudo gpasswd -a gitlab-runner docker
sudo service docker restart(或者systemctl start docker)
據說這樣就可以了,但是我這裏還是不行,繼續找資料,說給docker軟件賦權限那麼試一試吧:chmod a+rw /var/run/docker.sock
雖然還報錯,但是不再是權限問題了。
container_linux.go:247: starting container process caused "chdir to cwd (\"/dockerdir\") set in config.json failed: not a directory"
這個問題,是我自己寫的腳本問題。我自己研究,正常到這裏都可以執行了。
最後貼一下我的Dockerfile和.gitlab-ci.yml文件內容,第一個是Dockerfile,第二個是.gitlab-ci.yml
FROM openjdk ADD target/overduestatic.jar /dockerdir/overduestatic.jar WORKDIR /dockerdir CMD ["java","-jar","/dockerdir/overduestatic.jar"]
stages: - test - build - docker test1: stage: test script: - cat /etc/redhat-release - whoami only: - master tags: - testtag1 build2: stage: build tags: - testtag1 only: - master script: - mvn package artifacts: paths: - target/overduestatic.jar docker3: stage: docker tags: - testtag1 only: - master script: - docker build -t overduestatic .
.gitlab-ci.yml參考地址:
https://docs.gitlab.com/ce/ci/yaml/README.html
https://segmentfault.com/a/1190000011890710
https://blog.csdn.net/ujm097/article/details/80794740