gitlab runner安装说明

安装gitlab-runner

主要介绍两种安装方式:docker方式和rpm方式

docker安装方式

在包市场里面找到对应的gitlab-runner:
https://hub.docker.com/r/gitlab/gitlab-runner/tags

1  查看gitlab版本
docker exec -it gitlab cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
#查出版本11.1.14

2 安装 runner
docker run -itd -v /data/devops/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner:v11.1.0

3 进入容器里面
docker exec -it d35956ecdd17 bash

4 运行gitlab-runner -h

rpm安装方式

curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash

yum list gitlab-runner --showduplicates | sort -r

yum install gitlab-runner-11.1.0-1

img

img

gitlab-runner注册

注册步骤:

· 获取runner token ->进行注册

GitLabRunner类型

. shared :运行整个平台项目的作业(gitlab)
. group:运行特定group下的所有项目的作业(group)
. specific:运行指定的项目作业(project)
. locked:无法运行项目作业
. paused:不会运行作业

shared类型token获取
img

项目类型token获取
img

注册交互式

//runner注册

gitlab-runner register

//指定以下 URL
http://192.168.200.80:8090/

//输入描述
Please enter the gitlab-ci description for this runner

//输入标签
Please enter the gitlab-ci tags for this runner (comma separated)

//设置执行器
常用的执行器有shell,docker,kubernetes

注册完成,默认是锁定状态。
img

注册非交互式

docker run -itd --rm -v  /data/devops/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner:v11.1.0 register -n \
--non-interactive \
    --url "http://192.168.200.80:8090/" \
    --registration-token "ssQnNL2poyrajsTcsJys" \
    --executor "shell" \
    --description "devops-runner" \
    --tag-list "build,deploy" \
    --run-untagged="true" \
    --locked="false" \
    --access-level="not_protected"

//进入到 runner 容器里面
docker exec -it gitlab-runner bash
gitlab-runner register \
    --non-interactive \
    --url "http://192.168.200.80:8090/" \
    --registration-token "ssQnNL2poyrajsTcsJys" \
    --executor "shell" \
    --description "devops-runner3" \
    --tag-list "build" \
    --run-untagged="true" \
    --locked="false" \
    --access-level="not_protected"

note:有问题待排查

常用命令:

gitlab-runner register #默认交互模式下使用,非交互模式添加--non-interactive
gitlab-runner list #此命令列出了保存在配置文件中的所有运行程序
gitlab-runner verify #此命令检查注册的runner是否可以连接,但不验证GitLab服务是否正在使用runner。--delete删除
gitlab-runner unregister#该命令使用GitLab取消已注册的runner.

#使用令牌注销
gitlab-runner unregister --url http://gitlab.example.com/ --token tok3n 

#使用名称注销(同名删除第一个)
gitlab-runner unregister --name test-runner

#注销所有
gitlab-runner unregister --all-runners

gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner

#--user指定将用于执行构建的用户
#--working-directory 指定将使用**Shell** executor运行构建时所有数据将存储在其中的根目录

gitlab-runner uninstall #该命令停止运行并从服务中卸载GitLab Runner.
gitlab-runner start #该命令启动GitLab Runner服务。
gitlab-runner stop #该命令停止GitLab Runner服务。
gitlab-runner restart #该命令将停止,然后启动GitLab Runner服务。
gitlab-runner status #此命令显示GitLab Runner服务的状态。当服务正在运行时,退出代码为零;而当服务未运行时,退出代码为非零。


编写gitlab-ci.yml Pipeline 语法

CI配置检查,验证语法正确性
img
img

job(作业)

在每个项目中,使用名为.gitlab-ci.yml的YAML文件配置GitLab CI / CD管道。在文件中可以定义一个或多个作业(job)。每个作业必须具有唯一的名称(不能使用关键字),每个作业是独立执行的。作业定义了在约束条件下进行相关操作,每个作业至少要包含一个script。

job1:
    script: "execute-script-for-job1"

job2:
    script: "execute-script-for-jcb2"

img

script

每个作业至少要包含一个script
img

before_script

用于定义一个命令,该命令在每个作业之前运行。必须是一个数组。指定的script与主脚本中指定的任何脚本串联在一起,并在单个shell中一起执行。
before_script失败导致整个作业失败,其他作业将不再执行。作业失败不会影响after_script运行。
img

after_script

用于定义将在每个作业(包括失败的作业)之后运行的命令。这必须是一个数组。
指定的脚本在新的she11中执行,与任何before_script或script脚本分开。

stages

用于定义作业可以使用的阶段,并且是全局定义的。
同一阶段的作业并行运行,不同阶段按顺序执行。
img
img

.pre&.post

.pre始终是整个管道的第一个运行阶段,.post始终是整个管道的最后一个运行阶段。
用户定义的阶段都在两者之间运行。.pre和.post的顺序无法更改。如果管道仅包含.pre或.post阶段的作业,则不会创建管道。
img

variables

定义变量,pipeline变量、job变量。job变量优先级最大。
img

完整例子

before_script:
  - echo "before_script!"
  
variables:
   DOMAIN: example.com
   
stages:
   - build
   - test
   - codescan
   - deploy
   
build:
  before_script:
  - echo "before_script in job"
  stage: build
  script:
    - echo "mvn clean"
    - echo "mvn install"
    - echo "$DOMAIN"
  after_script:
    - echo "after script in buildjob"
    
unittest:
    stage: test
    script:
      - echo "run test"
      
deploy:
  stage: deploy
  script:
    - echo "codescan"
    - sleep 2;
    
codescan:
  stage: codescan
  script:
    - echo "codescan"
    - sleep 5;
    
after_script:
  - echo "after_script!!!!"
  - echo "end"

img

tags 指定runner

用于从允许运行该项目的所有Runner列表中选择特定的Runner,在Runner注册期间,您可以指定Runner的标签。
img

allow_failure 允许失败

allow_failure允许作业失败,默认值为false。启用后,如果作业失败,该作业将在用户界面中显示橙色警告。但是,管道的逻辑流程将认为作业成功/通过,并且不会被阻塞。假设所有其他作业均成功,则该作业的阶段及其管遒将显示相同的橙色警告。但是,关联的提交将被标记为"通过",而不会发出警告。
img

when 控制作业运行

on_success 前面阶段中的所有作业都成功时才执行作业,默认值
on_failure 当前面阶段出现失败时执行。
always 总是执行作业。
manual 手动执行作业。
delayed 延迟执行作业。
img

retry 重试

·配置在失败的情况下重试作业的次数。
·当作业失败并配置了retry ,将再次处理该作业,直到达到retry关键字指定的次数。
如果retry设置为2,并且作业在第二次运行成功(第一次重试),则不会再次重试.
retry值必须是一个正整数,l等于或大于0,但小于或等于2(最多两次重试,总共运行3次)。

精准匹配错误:
默认情况下,在失败情况下重试作业。max :最大重试次数when :重试失败的错误类型
img
img

timeout

作业级别的超时可以超过项目级别超时,但不能超过Runner特定的超时。
img

parallel 并行作业

配置要并行运行的作业实例数,此值必须大于或等于2并且小于或等于50。
这将创建N个并行运行的同一作业实例.它们从job name 1/N到,job name N/N依次命名。
img

only except 限制分支标签

only和except用分支策略来限制jobs构建:
only定义哪些分支和标签的git项目将会被job执行。
except定义哪些分支和标签的git项目将不会被job执行。

only:master
except:dev

img

rules

rules允许按顺序评估单个规则,直到匹配并为作业动态提供属性。
rules不能only/except与only/except组合使用。
可用的规则:
if(如果条件匹配)
img

changes(指定文件发生变化)
img

exists(指定文件存在>
img

失败
img

workflow-rules-管道创建

顶级workflow关键字适用于整个管道,并将确定是否创建管道。
when:可以设置为always或never,如果未提供,则默认值always。

img

cache-缓存

存储编译项目所需的运行时依赖项,指定项目工作空间中需要在job之间缓存的文件或目录。
全局cache定义在job之外,针对所有job生效。job中cache优先于全局。

cache:paths

在job build中定义缓存,将会缓存target目录下的所有. jar文件。
当在全局定义了cache: paths会被job中覆盖。以下实例将缓存target目录。

由于缓存是在job之间共享的,如果不同的job使用不同的路径就出现了缓存覆盖的问题。
如何让不同的job缓存不间的cache呢 ? 设置不同的cache:key。

为缓存做个标记,可以配置job、分支为key来实现分支、作业特定的缓存。
为不同job 定义了不同的 cache:key 时,会为每个job 分配一个独立的 cache。
cache:key变量可以使用任何预定义变量,默认default 。
从GitLab 9.0开始,默认情况下所有内容都在管道和作业之间共享。

build:
  stage: build
  script:
    - echo "test"
  key:build
  cache:
    paths:
      - target/*.jar

cache:
key:${CI_COMMIT_REF_SLUG}

cache : key : files 文件变化自动创建

files:文件发生变化自动重新生成缓存(files最多指定两个文件),提交的时候检查指定的文件。
根据指定的文件生成密钥计算SHA校验和,如果文件未改变值为default。

cache:
  key:
    files:
      -Gemfile.lock
      -package.json
    paths:
      - target/*.jar

cache : key : prefic 组合生成SHA校验

prefix:允许给定prefix的值与指定文件生成的秘钥组合。
在这里定义了全局的cache,如果文件发生变化则值为rspec-xxx111111111222222 ,未发生变化为rspec-default。

cache:policy 缓存策略

默认:在执行开始时下载文件,并在结束时重新上传文件。
policy: pull 跳过下载步骤,policy: push 跳过上传步骤。

images

默认在注册runner的时候需要填写一个基础的镜像,请记住一点只要使用执行器为docker类型的runner所有的操作运行都会在容器中运行。
如果全局指定了images则所有作业使用此image创建容器并在其中运行。
全局未指定image,再次查看job中是否有指定,如果有此job按照指定镜像创建容器并运行,没有则使用注册runner时指定的默认镜像。

 
docker exec -it gitlab-runner bash
gitlab-runner register \
    --non-interactive \
    --executor "docker" \
    --docker-image alpine:latest \
    --url "http://192.168.200.80:8090/" \
    --registration-token "ssQnNL2poyrajsTcsJys" \
    --description "devops-runner" \
    --tag-list "build,deploy" \
    --run-untagged="true" \
    --locked="false" \
    --access-level="not_protected"
vim /etc/gitlab-runner/config.toml

//不会每次下镜像
[[runners]]
pull_policy="if-not-present" 

ssh-keygen -t ed25519 -C "GitLab SSH key"

variables:
  RELEASE_FOLDER: '/var/ReleaseFolder/Baiyi.Energy/' #文件夹要有权限
  TARGET_FOLDER: '/home/strategyenergy_job5107'
  CSPROJ: '/src/Baiyi.Energy.Web/Baiyi.Energy.Web.csproj'
  
  
stages:  
    - build
    - deploy
   
build_job:  
    before_script: 
        - echo $CI_COMMIT_REF_NAME
        - echo $CI_BUILDS_DIR
        - echo $CI_CONFIG_PATH
        - echo $CI_RELEASE_DESCRIPTION
        - echo $CI_JOB_NAME
        - echo $CI_JOB_URL
        - echo $CI_PIPELINE_URL
        - echo $CI_PROJECT_DIR
        - echo $CI_PROJECT_ID
        - echo $CI_PROJECT_NAME
        - echo $CI_PROJECT_NAMESPACE
        - echo $CI_PROJECT_PATH_SLUG
        - echo $CI_PROJECT_PATH
        - echo $CI_PROJECT_ROOT_NAMESPACE
    stage: build
    tags:
        - build  
    only:
        - master 
    retry: 1
    script:      
        - dotnet publish $CI_PROJECT_DIR$CSPROJ -c release  -o $RELEASE_FOLDER  
        - cd $RELEASE_FOLDER
        - rm appsettings*.json
        - rm *.config
        - rm quartz_jobs.xml
        
        
deploy_job:
    before_script: 
        - echo $CI_COMMIT_REF_NAME
       
    stage: deploy
    tags:
        - build  
    only:
        - master 
    
    script:   
        -  cd $RELEASE_FOLDER
        -  cp -ru  ./*  $TARGET_FOLDER
        -  sshpass -p $PASSWORD ssh  $USER@$HOST  supervisorctl restart BaiyiEnergy_job5107
       
       
posted @ 2023-04-23 16:34  誓鼎  阅读(685)  评论(0编辑  收藏  举报