GitLab CI/CD学习笔记

GitLab CI/CD

一、Gitlab CI/CD基本介绍

1.三大组件

  • GitLab CI/CD: 一个web应用程序,管理项目/构建

  • GitLab Runner:处理构建的应用程序,可以单独部署,并通过API与GitLab CI/CD一起使用

  • .gitlab-ci.yml

2.Gitlab CI/CD特点

  • 多平台:unix,windows,macOS和任何支持Go的平台上执行构建

  • 多语言:构建脚本是命令行驱动,可以与java,php,等任何语言使用

  • 并行构建:在多台机器拆分构建

  • 稳定构建:与GitLab在不同机器上运行

  • 实时日志:

  • 灵活管道:每个阶段定义多个并行作业,并且可以触发其他构建

  • 版本管道:

  • Docker支持

  • Kubernetes上运行

  • 容器注册表

  • 受保护的变量

  • 定义多个环境

3.GitLabCI/CD工作原理

  1. 代码托管到Git存储库。

  2. 项目根目录创建ci文件.gitlab-ci.yml,在文件中指定构建,测试和部署脚本。

  3. GitLab将检测到它并使用Runner工具运行脚本。

  4. 脚本被分组为作业,共同组成一个管道。

二、GitLabRunner

1. GitLab Runner简介

简介
  • runner是一个开源项目,和gitlab是分开的,用于运行作业并将结果返回gitlab

  • 可以用docker部署,要求docker>1.13

  • Runner版本应与GitLab版本同步

  • 可根据需要配置任意数量Runner

特点:
  • 同时执行多个作业

  • 作业运行环境:

    • 本地、docker、docker+ssh执行作业

    • ssh连接到服务器

  • 支持bash,windows bash,windows powershell

  • 运行自定义作业运行环境

  • 自动重新加载,无需重启

  • 易于安装,可作为linux,macOS和windows的服务

GitLab Runner类型与状态
  • 类型

    • shared 共享类型,运行整个平台项目的作业(gitlab)

    • group 项目组类型,运行特定group下的所有项目的作业(group)

    • specific项目类型,运行指定的项目作业(project)

  • 状态

    • locked:锁定状态,无法运行项目作业

    • paused:暂停状态,暂时不会接受新的作业

2. GitlabRunner安装

yum install gitlab-runner或者rpm安装

3. GitlabRunner注册

获取runner token ——> 进行注册

  1. 获取token:

    1. shared--管理员-->管理中心-->CI/CD,新建示例runner

    2. group--群组所有者-->某个项目-->CI/CD,新建群组runner

    3. project--项目所有者-->项目-->CI/CD,新建项目runner

  2. 注册:

    1. gitlab_runner register

    2. 分配url

    3. 分配token

    4. 分配执行器:shell,docker,kubernetes

    5. 注册相关命令

4. GitlabRunner执行器

支持shell,docker等

5. 运行流水线任务

流水线语法检测

6.pipeline语法

pipeline,job,script

  • job(作业):.gtilab-ci.ym文件配置gitlab CI/CD管道,在文件中可以定义一个或多个作业,每个作业有唯一名称,每个作业独立执行,作业定义了在约束条件下进行相关操作,每个作业至少包含一个script。每个流水线由多个job组成。

  • scipt:定义一个或多个脚本,每个作业至少要有一个script

  • before_script:script之前要做的,每个job都可以定义,有定义则会覆盖全局的,无定义则走全局的。若before_script失败则导致整个作业失败,其他作业不再执行。作业失败不影响after_script运行。

  • after_script:script之后要做的,每个job都可以定义,未定义则走全局的,有定义则会覆盖全局的,无定义则走全局的。

  • stages:用于控制不同stage顺序。

  • stage:标志作业执行顺序的属性,同stage的job并行运行,不同stage按stages定义的顺序运行。

  • variables:通过key: value的形式定义变量。

  • .pre:始终是整个管道第一个运行阶段。

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

  • tags: 从允许运行该项目的所有runner列表中选择特定的runner

  • allow_failure: 允许作业失败,默认是false。启用后如果作业失败,在用户界面橙色警告,但不影响流水线后续执行。

  • when:

    • on_success: 前面阶段所有作业都成功才执行作业,默认值。

    • on_failure: 前面阶段出现失败时才执行。

    • always:总是执行

    • manual:手动执行

    • delayed + start_in ‘xxx’:延迟xxx秒执行

  • retry:

    • max: 代码失败重试次数。

    • when: 重试失败的错误类型,针对某类错误才重复运行几次。

  • timeout: 作业级别的超时可以超过项目级别超时,但是不能超过runner的超时。runner可以通过设置最大超时时间防止runner被某个项目占用。

  • parallel: 创建N个并行的实例一同执行此文件。

  • only:定义哪些分支和标签的git项目会被job执行,支持正则表达式

    <span style="background-color:#f8f8f8"><span style="color:#221199">job</span><span style="color:#555555">:</span>
    <span style="color:#221199">only</span><span style="color:#555555">:</span>
    -/^issue-.*$/
    <span style="color:#221199">except</span><span style="color:#555555">:</span>
    <span style="color:#555555">- </span>branches</span>
  • except:定义哪些分支和标签项目不被job执行。

  • rules:

    • 相当于switch,match,逐个评估直至匹配,不能与only/except组合使用

    • 可用规则:

      • if :可以定义多个if,只要匹配一次就可执行

        <span style="background-color:#f8f8f8"><span style="color:#221199">job</span><span style="color:#555555">:</span>
        <span style="color:#221199">  script</span><span style="color:#555555">:</span>
        <span style="color:#555555">    - </span>echo <span style="color:#aa1111">"This job will run based on rules"</span>
        <span style="color:#221199">  rules</span><span style="color:#555555">:</span>
        <span style="color:#555555">    - </span><span style="color:#221199">if</span><span style="color:#555555">: </span><span style="color:#aa1111">'$CI_COMMIT_BRANCH == "master"'</span>
        <span style="color:#555555">    - </span><span style="color:#221199">if</span><span style="color:#555555">: </span><span style="color:#aa1111">'$CI_COMMIT_TAG == "v1.0"'</span>
        <span style="color:#555555">    - </span><span style="color:#221199">when</span><span style="color:#555555">: </span>manual</span>
      • changes:

        <span style="background-color:#f8f8f8"><span style="color:#221199">job</span><span style="color:#555555">:</span>
        <span style="color:#221199">  script</span><span style="color:#555555">:</span>
        <span style="color:#555555">    - </span>echo <span style="color:#aa1111">"This job will run only when files under src/ directory change"</span>
        <span style="color:#221199">  rules</span><span style="color:#555555">:</span>
        <span style="color:#555555">    - </span><span style="color:#221199">changes</span><span style="color:#555555">:</span>
        <span style="color:#555555">        - </span>src/*</span>
      • exists:

        <span style="background-color:#f8f8f8"><span style="color:#221199">job</span><span style="color:#555555">:</span>
        <span style="color:#221199">  script</span><span style="color:#555555">:</span>
        <span style="color:#555555">    - </span>echo <span style="color:#aa1111">"This job will run only when a specific file exists"</span>
        <span style="color:#221199">  rules</span><span style="color:#555555">:</span>
        <span style="color:#555555">    - </span><span style="color:#221199">exists</span><span style="color:#555555">:</span>
        <span style="color:#555555">        - </span>file.txt
        ​</span>

  • workflow:顶级workflow关键字适用于整个管道,用于确定是否创建管道。

7.cache-缓存

  • 作用:将路径缓存起来,后续作业执行时,如果路径未变,不需要重新下载生成。

  • 全局cache定义在job之外,对所有job生效。job中的cache优先于全局。

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#221199">job</span><span style="color:#555555">:</span>
<span style="color:#221199">  script</span><span style="color:#555555">:</span>
<span style="color:#555555">    - </span>echo <span style="color:#aa1111">"This job will use cached dependencies"</span>
<span style="color:#221199">  cache</span><span style="color:#555555">:</span>
<span style="color:#221199">    paths</span><span style="color:#555555">:</span>
<span style="color:#555555">      - </span>node_modules/
<span style="color:#555555">      - </span>vendor/</span></span>

key:给缓存做一个标记,可以配置job、分支为key来实现,防止缓存覆盖。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值