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安装方式

发布了106 篇原创文章 · 获赞 10 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_32060101/article/details/103179033
今日推荐