centos 7 配置 gitlab runner

centos 安装 gitlab runner

  • 安装方法 1 :centos yum 安装方式 版本为 9.5.1
# 添加yum源
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bash
# 安装
yum install gitlab-runner
# 查看版本
gitlab-runner -v

# 我当前centos 7 为  Linux x86-64
sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64

# 设置安装目录可执行
sudo chmod +x /usr/local/bin/gitlab-runner

# 直接使用 root 用户权限运行 gitlab-runner (或者其他用户,看需求)
sudo gitlab-runner install --user=root --working-directory=/home/gitlab-runner
#启动
sudo gitlab-runner start

# 如果提示命令  command not found  需要配置环境
# 添加软链接
ln -s -f /usr/local/bin/gitlab-runner /usr/bin/gitlab-runner

# 查看版本
gitlab-runner -v

注册 gitlab-runner

通过管理员登录 gitlab ---- 管理中心---- 概况 ---- Runner 查看需要注册的 URL与 Token(令牌)


image.png
  • 配置注册信息 gitlab-runner register
[root@localhost ~]#  gitlab-runner register
Running in system-mode.                            
# 引导会让你输入gitlab的url,输入自己的url,例如http://gitlab.example.com/                           
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://xxx.xxx.xxx:xxx/
# 引导会让你输入token,去相应的项目下找到token,例如xrjc3tWcdQpLcEwoYzkU
Please enter the gitlab-ci token for this runner:
xrjc3tWcdQpLcEwoYzkU
# 输入描述
Please enter the gitlab-ci description for this runner:
[localhost.localdomain]: develop
# 引导会让你输入tag,一个项目可能有多个runner,是根据tag来区别runner的,输入若干个就好了,比如web,hook,deploy,develop
Please enter the gitlab-ci tags for this runner (comma separated):
develop
# 是否运行未标记的版本
Whether to run untagged builds [true/false]:
[false]: false
# 是否将运行程序锁定到当前项目
Whether to lock Runner to current project [true/false]:
[false]: true
Registering runner... succeeded                     runner=xrjc3tWc
#  引导会让你输入executor,这个是要用什么方式来执行脚本,图方便输入shell就好了
Please enter the executor: shell, ssh, docker+machine, docker, docker-ssh, parallels, virtualbox, docker-ssh+machine, kubernetes:
shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded! 

注册好后,在gitlab中相应的位置就可以看到你注册好的runner信息。

image.png

自定义构建目录

对应的配置文件在 /etc/gitlab-runner/config.toml
修改配置文件,允许自定义git clone 的目录
此功能要求GIT_CLONE_PATH在其中定义的路径内runners.builds_dir。为了便于使用的builds_dir所述 $CI_BUILDS_DIR变量可被使用。

 #配置构建的根目录
  builds_dir = "/www/wwwroot"

#允许用户自定义构建目录 gitbab-ci.yml 变量  GIT_CLONE_PATH
  [runners.custom_build_dir]
    enabled = true
image.png

gitlab-runner 配置说明:https://docs.gitlab.com/runner/configuration/advanced-configuration.html#the-global-section

对应执行命令

# 运行
gitlab-runner run
# 启动
gitlab-runner start
# 重启
gitlab-runner restart
# 通过name 取消注册
gitlab-runner unregister --name develop
# 删除所有注册runner
gitlab-runner unregister --all-runners

Runner 状态说明

每个Runner可以处于以下状态中的其中一种:

  • shared - Runner将运行所有未指定的项目的作业
  • group - Runner将运行群组中所有未指定项目的作业
  • specific - Runner将运行指定项目的作业
  • locked - 无法将Runner分配给其他项目
  • paused - Runner不会接受新的作业

什么情况下需要注册Shared Runner?
比如,GitLab上面所有的工程都有可能需要在公司的服务器上进行编译、测试、部署等工作,这个时候注册一个Shared Runner供所有工程使用就很合适。

什么情况下需要注册Specific Runner?

比如,我可能需要在我个人的电脑或者服务器上自动构建我参与的某个工程,这个时候注册一个Specific Runner就很合适。

什么情况下需要在同一台机器上注册多个Runner?

比如,我是GitLab的普通用户,没有管理员权限,我同时参与多个项目,那我就需要为我的所有项目都注册一个Specific Runner,这个时候就需要在同一台机器上注册多个Runner。

项目应用 gitlab-ci.yml

更多的 .gitlab-ci.yml 配置规则 详见
参考:
//www.greatytc.com/p/0ab8bbe05d27
https://blog.51cto.com/vnimos/2122951?source=dra

gitlab-ci.yml 文件编写主要内容

cache 定义需要被缓存的文件、文件夹列表,只适用于项目目录中的文件和文件夹。
stages 定义流水线阶段(pipeline),如果没有stages被定义.gitlab-ci.yml,那么build, test和deploy允许被用作默认作业的阶段。
stage 申明当前的阶段,在 stages 中使用。如果作业未指定阶段,则默认作业test
variables 用于定义变量
before_script 覆盖在作业之前执行的脚本或命令
after_script 覆盖在作业之后执行的脚本或命令
script 定义由Runner执行的shell脚本或命令
changes 指定 stage 触发条件
refs 指定 stage 触发的分支
tags 指定执行作业的runner

执行流程

  1. 首先,所有工作build都是并行执行的。
  2. 如果所有作业都build成功,则test作业将并行执行。
  3. 如果所有作业都test成功,则deploy作业将并行执行。
  4. 如果所有作业都deploy成功,则提交标记为passed。
  5. 如果任何先前的作业失败,则将提交标记为,failed并且不执行其他阶段的作业。

gitlab-ci.yml 示例
实现需求如下:

  • 在服务器上 拉去指定git项目到指定目录中
  • 在开发服务器上每次推送都自动更新develop分支的代码
  • 在正式服务器上,每次master分支更新时都会自动更新代码
  • 如果服务器上的git代码发生改变,先本地储藏修改的内容。

由于当前暂时没有解决gitlab runner 保留服务器上生成的文件,所以使用了 GIT_STRATEGY:none 的方式,就是不直接用runner 本身的拉去方式。而用shell的方式 clone 代码。所以要先配置服务器上ssh拉去代码的方式。
git ssh 拉去代码配置方式如下:
//www.greatytc.com/p/9c8c5a7ea634

执行流程:
1、在开发服务器与正式环境服务器上安装 gitlab runner,并指定项目执行。
2、在对应服务器上配置 git ssh秘钥拉去方式。详情
3、在gitlab 项目根目录下创建 gitlab-ci.yml 文件。请根据各自修改更改内如。
4、提交代码到gitlab,查看执行效果。运行状态通过则配置成功。

gitlab-ci.yml 内如如下:


#定义变量
variables:
  #定义克隆的路径  $CI_BUILDS_DIR 为 runners.builds_dir 设置的路径
  GIT_CLONE_PATH: $CI_BUILDS_DIR/server/link

  #git ssh 地址
  GITLAB_SSH: ssh://git@192.168.10.10:50022/server/link.git

  # 指定git获取代码的方式(clone,fetch,none)
  GIT_STRATEGY: none

 #在作业之前执行的脚本或命令
before_script:
  - echo "环境部署操作"
  # 创建对应目录
  - mkdir -p $GIT_CLONE_PATH
  - cd $GIT_CLONE_PATH

#在作业之后执行的脚本或命令
after_script:
  #配置目录的用户权限
  - chown -R www:www $GIT_CLONE_PATH

# 全局定义流水线阶段(pipeline)
stages:
  - build
develop_build:
  stage: build
  #需要执行的shell脚本
  script:
    - echo "开发服务器环境配置"
    - if [ ! -d ".git" ]; then
    - git clone -b develop $GITLAB_SSH $GIT_CLONE_PATH --depth 1
    - else
    - git stash
    - fi
    - git pull
  only:
    # 指定分支
    - develop
  tags:
    # 指定执行作业的runner
    - developRunner

master_build:
  stage: build
  script:
    - echo "正式服务器环境配置"
    - if [ ! -d ".git" ]; then
    - git clone -b master $GITLAB_SSH $GIT_CLONE_PATH --depth 1
    - else
    - git stash
    - fi
    - git pull
  only:
    - master
  tags:
    - masterRunner

** 常见问题 **
验证 gitlab-ci.yml 文件格式是否正确,在gitlab CI/CD的流水线或作业中有CI配置检查 (CI Lint)。复制写好的 gitlab-ci.yml 文件内如到 CI Lint 验证。

image.png
image.png

提交代码后查看运行状态


image.png
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,188评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,464评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,562评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,893评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,917评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,708评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,430评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,342评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,801评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,976评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,115评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,804评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,458评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,008评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,135评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,365评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,055评论 2 355

推荐阅读更多精彩内容