DevOps系列GitLab-CICD(二)之安裝git-runner-rpm安裝方式



背景

本節是繼DevOps實例演示的第三篇文章, 在上一篇文章中, 我們已經成功安裝部署了GitLab可以方便的對我們的Git倉庫進行管理了,但是要實現我們的需求,僅僅安裝GitLab還不行, 還需要安裝一個插件Git-Runner,來進行我們真正的pipeline工作

聲明: 在本文以及本系列文中, 不會涉及公司內部相關內容,旨在能幫助到和我一樣摸着光亮前進的人。
備註: 在閱讀本章節前, 若您掌握有一定的git命令以及Linux知識那將更容易理解。

介紹

在上篇文章, 我們說了GitLab對於Cicd有着天然的優勢, 那麼他體現在哪呢, 看下面的一張圖.
在這裏插入圖片描述
這張圖裏面都幹了什麼:

  • 首先我們本地的代碼開發完成之後, 我們要將本地的Local分支Merge到Develop分支(有的也可能叫Master分支)
  • 第二步, 我們將合併之後的代碼Push提交到我們的Git版本庫
  • 第三步, 因爲我們的git倉庫通過GitLab管理, 在GitLab管理控制檯裏面有一個選項叫CiCd Configration當你點擊這一項的配置的時候, 便會在你的當前git項目的根目錄下生成一個 .gitlab-ci.yml的配置文件(具體怎麼編寫這個配置文件, 後續有介紹),在這個配置文件裏面我們可以指定我們的pipeline(流水線, 這個名詞其實指的是, 當你的代碼提交上來之後, 要觸發哪些工作), 當我們編寫好了配置文件.那現在ta就好比一個菜譜, 規定了怎麼做一道菜, 那麼問題來了, 具體誰來照着菜譜做這道菜呢? 就是我們第四步中的Git-Runner(顧名思義, 就是運行Git任務的組件)
  • 第四步, 我們在配置文件指定了, 需要讓哪臺Runner來執行我們的任務, 那麼ta就會按照菜譜去炒菜

安裝

系統

CentOS Linux release 7.5.1804 (Core) 

下載gitlab-runner rpm包

[root@gitlab-runner-64 ~]# curl -s https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
Detected operating system as centos/7.
Checking for curl...
Detected curl...
Downloading repository file: https://packages.gitlab.com/install/repositories/runner/gitlab-runner/config_file.repo?os=centos&dist=7&source=script
done.
Installing pygpgme to verify GPG signatures...
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.nwsuaf.edu.cn
 * extras: mirrors.nwsuaf.edu.cn
 * updates: mirrors.nwsuaf.edu.cn
runner_gitlab-runner-source/signature                                                                                                  |  836 B  00:00:00     
Retrieving key from https://packages.gitlab.com/runner/gitlab-runner/gpgkey
Importing GPG key 0xE15E78F4:
 Userid     : "GitLab B.V. (package repository signing key) <[email protected]>"
 Fingerprint: 1a4c 919d b987 d435 9396 38b9 1421 9a96 e15e 78f4
 From       : https://packages.gitlab.com/runner/gitlab-runner/gpgkey
runner_gitlab-runner-source/signature                                                                                                  |  951 B  00:00:00 !!! 
runner_gitlab-runner-source/primary                                                                                                    |  175 B  00:00:02     
Package pygpgme-0.3-9.el7.x86_64 already installed and latest version
Nothing to do
Installing yum-utils...
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.nwsuaf.edu.cn
 * extras: mirrors.nwsuaf.edu.cn
 * updates: mirrors.nwsuaf.edu.cn
Package yum-utils-1.1.31-46.el7_5.noarch already installed and latest version
Nothing to do
Generating yum cache for runner_gitlab-runner...
Importing GPG key 0xE15E78F4:
 Userid     : "GitLab B.V. (package repository signing key) <[email protected]>"
 Fingerprint: 1a4c 919d b987 d435 9396 38b9 1421 9a96 e15e 78f4
 From       : https://packages.gitlab.com/runner/gitlab-runner/gpgkey

The repository is setup! You can now install packages.

安裝gitlab-runner

root@gitlab-runner-64 ~]# yum install gitlab-runner -y

啓動gitlab-runner

[root@gitlab-runner-64 ~]# systemctl start gitlab-runner
[root@gitlab-runner-64 ~]# systemctl status  gitlab-runner
● gitlab-runner.service - GitLab Runner
   Loaded: loaded (/etc/systemd/system/gitlab-runner.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2018-11-20 15:33:55 CST; 1min 15s ago
 Main PID: 27906 (gitlab-runner)
   Memory: 4.9M
   CGroup: /system.slice/gitlab-runner.service
           └─27906 /usr/lib/gitlab-runner/gitlab-runner run --working-directory /home/gitlab-runner --config /etc/gitlab-runner/config.toml --service gitla...

Nov 20 15:33:55 gitlab-runner-64 gitlab-runner[27906]: Running in system-mode.                           
Nov 20 15:33:55 gitlab-runner-64 gitlab-runner[27906]: Running in system-mode.                           
Nov 20 15:33:55 gitlab-runner-64 gitlab-runner[27906]:                                                   
Nov 20 15:33:55 gitlab-runner-64 gitlab-runner[27906]: 
Nov 20 15:33:55 gitlab-runner-64 gitlab-runner[27906]: Configuration loaded                                builds=0
Nov 20 15:33:55 gitlab-runner-64 gitlab-runner[27906]: Configuration loaded                                builds=0
Nov 20 15:33:55 gitlab-runner-64 gitlab-runner[27906]: Listen address not defined, metrics server disabled  builds=0
Nov 20 15:33:55 gitlab-runner-64 gitlab-runner[27906]: Listen address not defined, metrics server disabled  builds=0
Nov 20 15:33:55 gitlab-runner-64 gitlab-runner[27906]: Listen address not defined, session server disabled  builds=0
Nov 20 15:33:55 gitlab-runner-64 gitlab-runner[27906]: Listen address not defined, session server disabled  builds=0

註冊gitlab

這一步很關鍵

[root@gitlab-runner-64 ~]# gitlab-runner register
Runtime platform                                    arch=amd64 os=linux pid=28891 revision=cf91d5e1 version=11.4.2
Running in system-mode.                            
                                                   
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
# ------------------------------------------------------------這一步填寫項目的地址
http://xxxxxxxxxx
Please enter the gitlab-ci token for this runner:
# ------------------------------------------------------------這一步項目的Token
xxxxxxxxxxxxxxxxx
Please enter the gitlab-ci description for this runner:
# ------------------------------------------------------------這一步添加runner的描述. 例如runner java
[gitlab-runner-64]: gitlab-runner-test
Please enter the gitlab-ci tags for this runner (comma separated):
# -----------------------------------------這一步添加runner的別名, 在gitlab-ci.yml通過這個選擇運行的runner
my-tag,another-tag
Registering runner... succeeded                     runner=xiwkMztd
Please enter the executor: docker+machine, kubernetes, docker, parallels, shell, ssh, virtualbox, docker-ssh+machine, docker-ssh:
# ------------------------------------------------------------這一步選擇runner運行的方式
# ------------------------------------------------------------筆者這裏選擇的shell(意味直接在部署runner本機進行運行)
# -----------------------------------------------若選用docker(意味, runner將在容器中運行,並且需要提前安裝docker環境)
# --------------------------------常用的就這兩種, 您也可自己學習一下其他, 關於shell,以及docker區別, 下一篇會做對比介紹
shell
Please enter the default Docker image (e.g. ruby:2.1):
maven:3-jdk-8 (針對於java環境)
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded! 
#註冊完成之後,gitlab-runner的配置文件會改變
[root@gitlab-runner-64 ~]# cat /etc/gitlab-runner/config.toml 
concurrent = 1
check_interval = 0

[session_server]
  session_timeout = 1800

[[runners]]
  name = "gitlab-runner-test"
  url = "http://10.39.47.63"
  token = "477e1b6bba858703fd609e7ff991e4"
  executor = "docker"
  [runners.docker]
    tls_verify = false
    image = "golang:latest"
    privileged = false
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache"]
    shm_size = 0
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]

通過上面的操作, 我們便部署好了Git-runner, 上一步操作我們叫註冊, 這個是什麼意思呢, 舉個例子好比滴滴平臺滴滴車主的關係, 車主需要自己主動向平臺註冊, 那麼平臺有任務了, 會給分配給車主去執行.

在這裏, 也一樣, 在gitlab中一個項目好比一個平臺, 當runner主動註冊之後, 在執行pipeline的時候, 纔會指定runner去執行.
那麼我們看一下註冊完成之後的gitlab界面, 可以看到在Runners菜單中多了一個runner
在這裏插入圖片描述

簡單使用

我們在git倉庫的根目錄下, 編輯.gitlab-ci.yml文件輸入下面的內容,並保存

# 這個配置文件編寫的格式, 是`yml`格式, 靠縮進來區分,還算比較友好
stages:
  - test-job  #調度test-job任務


# test-job
test-job:
  stage: test-job #(一個stage便是一個任務,可以起一個別名, 在最外層統一調度任務)
  script:
    - echo "========== hello gitlab-runner"

模擬測試

我們模擬提交一次代碼, 之後查看執行結果, 可以看到當我們代碼提交之後, 成功觸發了,我們的任務
在這裏插入圖片描述

真實案例

下面看一下筆者真實項目中的gitlab-ci.yml配置文件

stages:
  - get_git_log
  - git_clone_di
  - build_java
  - get_clone_doc
  - ansible_deploy


# get_git_log(格式化獲取最近一次提交的記錄, 並記錄到文本中)
get_git_log:
  stage: get_git_log
  script:
    - echo `git log --pretty=format:\"%an-%h-%s-%H\" -2` > /usr/local/ansible-playbook/email/gitLog.txt



# 克隆後端代碼(這一塊涉及內部鏈接, 用xxxxxxxxxxxxxxxxxxx代替)
git_clone_di:
  stage: git_clone_di
  script:
    - cd /usr/dixDevops/dixDi
    - rm -rf *
    - git clone -b develop 'https://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
    


# 編譯構建後端代碼(因爲我使用的runner是shell,所以需要提前在runner 的服務器安裝jdk 以及maven)
build_java:
  stage: build_java
  script:
    - cd /usr/dixDevops/dixDi/DI
    - mvn clean package -Dmaven.test.skip=true
    
    
# 克隆文檔(產品使用的操作文檔,涉密部分用xxxxx替代)
git_clone_doc:
  stage: get_clone_doc
  script:
    - cd /usr/dixDevops/dixDoc
    - rm -rf *
    - git clone --depth 1 https://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    - python -c "import os;import json; print json.dumps(os.listdir('./docs'))" > ./docs/list.json
    
    

# ansible自動部署(觸發ansible的自動部署模塊, 這一塊後續會詳細闡述)
ansible_deploy:
  stage: ansible_deploy
  script:
    - tower-cli job launch --job-template=7 -v

執行結果
在這裏插入圖片描述
可以看到, 根據我們的配置runner總共用時10分39秒

到這裏, 我們通過安裝GitLab以及安裝GitLab-Runner以及一系列的配置, 已經完成了我們的第一步操作, 如下圖
在這裏插入圖片描述

問題總結

背景

#安裝按照好gitlab-runner之後,gitlab-ci的runner默認使用gitlab-runner用戶執行操作;這樣就導致了 有時候我們#想要執行一個命令或者一個腳本, 總有頻繁的權限限制問題.

#通過指令ps aux|grep gitlab-runner可以看到:
/usr/bin/gitlab-ci-multi-runner run --working-directory /home/gitlab-runner --config /etc/gitlab-runner/config.toml --service gitlab-runner --syslog --user gitlab-runner

其中:

  • working-directory:設置工作目錄, 默認是/home/{執行user}
  • config:設置配置文件目錄,默認是/etc/gitlab-runner/config.toml
  • user:設置執行用戶名,默認是gitlab-runner

因此想要更改userroot只需要重新設置–user屬性即可,

步驟如下

#刪除gitlab-runner
sudo gitlab-runner uninstall
# 安裝並設置--user(例如我想設置爲root)
gitlab-runner install --working-directory /home/gitlab-runner --user root
#重啓gitlab-runner
sudo service gitlab-runner restart

驗證

再次執行ps aux|grep gitlab-runner會發現–user的用戶名已經更換成root了

/usr/bin/gitlab-ci-multi-runner run --working-directory /home/gitlab-runner --config /etc/gitlab-runner/config.toml --service gitlab-runner --syslog --user root

至此gitlab-runner執行.gitlab-cli.yaml時候便是以root用戶去執行操作,再也沒有繁瑣的權限問題了

來自root的溫馨提示:能力越大責任越大!


關於另一種安裝方式docker以及,兩者之間的不同點, 以及如何選擇, 請查看本系列下一篇文章
DevOps系列GitLab-CICD(三)之安裝git-runner-docker安裝方式

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