GitLab CI/CD

GitLab

一个基于Git的在线代码仓库托管软件。

1.YAML

YAML("YAML Ain`t a Markup Language"),YAML不是一种标记语言。在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言)。这种语言以数据做为中心.

1.1 基本语法

  • <font color=red>大小写敏感</font>
  • 使用缩进表示层级关系(类似python)
  • <font color=red>缩进不允许使用tab,只允许空格</font>
  • 缩进的空格数不重要,只要相同的层级元素左对齐即可
  • '#'表示注释

1.2 数据类型

  • 对象:键值对(类比JSON)
    • 简单对象
      key: 
        child-key: value
        child-key2: value2
    
    • 复杂对象:使用问号加一个空格代表一个复杂的 key,配合一个冒号加一个空格代表一个 value
      ?  
        - complexkey1
        - complexkey2
      :
        - complexvalue1
        - complexvalue2
    

<font color=red>注:</font>上述复杂对象的定义说明,对象是一个数组,value也是一个数组。

  • 数组
    • YAML数组:以 - 开头的行表示构成一个数组。
  • 纯量(scalar)
    • 纯量是最基本的,不可再分的值,包括:字符串、布尔值、整数、浮点数、NULL、时间、日期。

1.3 引用(Anchor)

& 锚点和 * 别名,可以用来引用。

 defaults: &defaults
 adapter:  postgres
 host:     localhost

 development:
 database: myapp_development
 <<: *defaults

 test:
 database: myapp_test
 <<: *defaults

相当于:

 defaults:
    adapter:  postgres
    host:     localhost

    development:
    database: myapp_development
    adapter:  postgres
    host:     localhost

    test:
    database: myapp_test
    adapter:  postgres
    host:     localhost  

<font color=red>& 用来建立锚点(defaults),<< 表示合并到当前数据,* 用来引用锚点。</font>

2.GitLab CI/CD

GitLab CI/CD is a tool built into GitLab for software development through the continuous methodologies(持续的方法):

  • Continuous Integration (CI,持续集成)
  • Continuous Delivery (CD,持续交付)
  • Continuous Deployment (CD,持续部署)

这些方法可以帮助在早期开发发现bugs和errors。GitLab CI/CD 由一个名为 .gitlab-ci.yml 的文件进行配置,该文件位于仓库的根目录下。文件中指定的脚本由GitLab Runner执行。

GitLab CI/CD 工作流

gitlab_workflow_example.png

GitLab中的预定义变量

Variable GitLab Runner Description
GITLAB_USER_LOGIN 10.0 all The username of the user who started the job.
CI_SERVER_HOST 12.1 all The host of the GitLab instance URL, without protocol or port. For example gitlab.example.com.
... ... ... ...

GitLab中的一些 Concepts

Concept Description
Pipelines Structure your CI/CD process through pipelines.
CI/CD variables Reuse values based on a variable/value key pair.
Job artifacts Output, use, and reuse job artifacts.
Environments Deploy your application to different environments (e.g., staging, production).
Cache dependencies Cache your dependencies for a faster execution.
GitLab Runner Configure your own runners to execute your scripts.
Pipeline efficiency Configure your pipelines to run quickly and efficiently.
Test cases Configure your pipelines to run quickly and efficiently.

2.1 CI/CD pipelines

Piplines由两部分组成:

  • Jobs 定义做什么,由runners执行。
  • Stages 什么时候跑jobs

注:在同一Stages中的多个Jobs之间并行执行。 jobs在执行成功之后进入下一阶段,若失败则pipeline停止在当前阶段。

2.2 jobs 执行条件

通过设置限制条件限定jobs执行:

  • rules
    rules定义的规则:
    • if
    • changes
    • exists
    • allow_failure
    • variables
    • when
      合法的value见下
      • on_success
      • on_failure
      • always
      • manual
      • delayed
      • never
job:
script: echo "Hello, Rules!"
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
    when: manual
    allow_failure: true
- if: '$CI_PIPELINE_SOURCE == "schedule"'
  • only
  • except
job:
only:
    - branches@gitlab-org/gitlab
except:
    - main@gitlab-org/gitlab
    - /^release/.*$/@gitlab-org/gitlab

有时不想执行job,既可以注释掉同时也可以在job名前加'.',见下。

  1. 注释
# hidden_job:
#   script:
#     - run test
  1. 添加'.'
.hidden_job:
  script:
    - run test

<font color=red>注:job不被添加到pipeline的情况见下</font>

  • rules不匹配
  • rules匹配但是有"when never"条件

2.3 job常用的关键字

<font color = red>Note</font> (important):

Keyword Description
script 被runner执行的shell脚本
image Use Docker images.
after_script Override a set of commands that are executed after job.
before_script Override a set of commands that are executed before job.
include 包含一个外部YAML文件
only Control when jobs are created.
rules List of conditions to evaluate and determine selected attributes of a job, and whether or not it’s created.
... ...
job_structure.png

2.3.1 stages

  • 如果job没有被声明在某一个stage,则job默认在test阶段
  • 如果stage被声明但是并没有job,则该stage则不会出现在pipeline中
  • 在pipeline中有5个默认stage
    • .pre
    • build
    • test
    • deploy
    • .post

2.3.2 extends

extends可以用来复用配置,相当于YAML语法中的引用,该关键字也可以复用include的配置文件。

2.3.3 tags

可以使用tags来选择特定的runner来执行。例如,

job:
  tags:
    - ruby
    - postgres

2.3.4 environment

使用environment关键字定义一个job部署需要的环境。例如,

deploy to production:
  stage: deploy
  script: git push production HEAD:main
  environment: production

2.3.5 after_script

Job执行完成后,执行对应的脚本指令。

2.3.6 allow_failure

2.3.7

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

推荐阅读更多精彩内容