centos安裝Gitlab Runner

參考網站: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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章