.gitlab-ci.yml 语法

木木2年前技术文章911

介绍

管道配置从作业(job)开始, 作业是 .gitlab-ci.yml 文件的最基本元素。

job是:

  • 定义了约束,指出应在什么条件下执行

  • 具有任意名称的顶级元素,并且必须至少包含 script 子句

  • 不限制,可以定义多个

示例

job1:
  script: "echo job1"

job2:
  script: "echo job2"

上面是两个简单的job,其中每个 job 都执行不同的命令,在 script 中,可以直接执行命令(/.configure;make;make install)或运行脚本(test.sh)。

验证.gitlab-ci.yml

GitLab CI 的每个实例都有一个称为 Lint 的嵌入式调试工具,该工具可以验证 .gitlab-ci.yml 文件的内容。您可以在 ci/lint 项目名称空间下找到它。

项目 -> CI/CD -> 编辑器

不可用的作业名称

  • image

  • services

  • stages

  • types

  • before_script

  • after_script

  • variables

  • cache

  • include

job配置参数

下表列出 job 了可用的参数

关键字描述
script由 Runner 执行的 Shell 脚本
image使用的 docker 映像。也可用: image:nameimage:entrypoint
services使用的 docker 服务映像。也可用:services:nameservices:aliasservices:entrypoint,和services:command
before_script重写作业之前执行的一组命令。
after_script重写作业后执行的一组命令。
stages定义管道中的阶段。
stage定义作业阶段(默认:test)。
only限制 job 的创建。也可用:only:refs, only:kubernetes, only:variables, and only:changes
except限制什么时候不创建 job。也可用:except:refs, except:kubernetes, except:variables, except:changes
rules用于评估和确定作业的选定属性以及是否创建该作业的条件列表。不可与only/except一起使用。
tags用于选择 Runner 的 tags 列表。
allow_failure允许作业失败。失败的工作不会影响提交状态。
when什么时候开始工作。也可用:when:manualwhen:delayed
environment作业部署到环境的名称。 也可用:environment:nameenvironment:urlenvironment:on_stopenvironment:auto_stop_inenvironment:action
cache在后续运行之间应缓存的文件列表。也可用:cache:pathscache:keycache:untracked,和cache:policy
artifacts成功时附加到作业的文件和目录列表。也可用:artifacts:pathsartifacts:expose_asartifacts:nameartifacts:untrackedartifacts:whenartifacts:expire_inartifacts:reportsartifacts:reports:junit,和artifacts:reports:cobertura。在GitLab 企业版,这些都是可供选择:artifacts:reports:codequalityartifacts:reports:sastartifacts:reports:dependency_scanningartifacts:reports:container_scanningartifacts:reports:dastartifacts:reports:license_managementartifacts:reports:performanceartifacts:reports:metrics
dependencies通过提供要从中获取工件的作业列表,限制将哪些工件传递给特定作业。
coverage给定作业的代码覆盖率设置。
retry发生故障时可以自动重试作业的时间和次数。
timeout定义自定义作业级别的超时,该超时优先于项目范围的设置。
parallel多少个作业实例应并行运行。
trigger定义下游管道触发器。
include允许此作业包括外部YAML文件。也可用:include:localinclude:fileinclude:template,和include:remote
extends该作业将要继承的配置条目。
pages上载作业结果以用于GitLab页面。
variables在作业级别上定义作业变量。
interruptible定义在通过新的运行使其冗余时是否可以取消作业。
resource_group限制作业并发。

构建

为了组织我们的构建、测试和部署配置,我们需要知道如何将作业放入各个阶段。

  • 查看默认的构建阶段

  • 声明自定义构建阶段和顺序

  • 指定使用特定的 Runner

默认的构建阶段

默认的构建阶段有三个阶段:

  • build

  • test

  • deploy

阶段的执行顺序按照上面的排序执行。所有未指定的阶段默认为 test 阶段

job1:
  stage: test
  script: echo "test"

job2:
  stage: build
  script: echo "build"

job3:
  stage: deploy
  script: echo "deploy"

job4:
  script: echo "job4"

声明自定义阶段和顺序

  • 每个阶段(stage)包含一个或多个 Jobs

  • 阶段按其声明的顺序运行

  • 任何作业失败都将阶段标记为失败

stages:
  - build
  - test
  - review
  - deploy

job1:
  stage: test
  script: echo "test"

job2:
  stage: build
  script: echo "build"

job3:
  stage: deploy
  script: echo "deploy"

job4:
  script: echo "job4"

job5:
  stage: review
  script: echo "review"

使用特定的runner

如果Runner 有多个可用,会使用轮询的方式。如果需要使用指定的 Runner 运行,可以使用 tag 标签。

stages:
  - build
  - test
  - review
  - deploy

job1:
  stage: test
  script: echo "test"
  tags:
    - aishangwei-group
    - docker

job2:
  stage: build
  script: echo "build"
...


相关文章

Pod 的 init Containers

Pod 的 init Containers

Pod 我们可以分为两类,一种属于自主式 Pod ,还有一种属于控制器管理的 Pod 。一、Pod 的 initContainers基本概念:Pod能够具有多个容器,应用运行在容器里面,但是它也可能有...

触发kube-apiserver流控导致ACK集群中节点状态异常

触发kube-apiserver流控导致ACK集群中节点状态异常

问题现象ack集群中一个节点状态为notready,但是排查节点上的核心组件:kubelet、kube-proxy、flannel、etcd等状态均为正常。排查步骤1、查日志分别排查核心组件以及系统日...

MySQL 复制-无数据环境搭建异步复制

MySQL 复制-无数据环境搭建异步复制

全新初始化(新环境,无数据)搭建 MySQL 异步复制 & GTID 复制标准文档。一、前言环境说明:操作系统 CentOS 7  & 数据库版本 5.7.32参数要求:主库必须开启...

MySQL运维实战(2.4) SSL认证在MySQL中的应用

MySQL支持使用tls进行通信。tls主要有几个作用对客户端、服务端之间的通信数据进行加密。包括客户端发往服务端的SQL,服务端返回给客户端的数据。客户端可以验证服务端的身份。服务端也可以验证客户端...

Redis 持久化机制 AOF

Redis 持久化机制 AOF

前言Redis 有两种持久化机制,分别是 RDB 与 AOF 本篇文章将介绍 AOF 的执行过程与应用。1. AOF 简介AOF (Append only file) 持久化是以独立日志的方式记录每次...

sqlserver收缩事务日志失败

sqlserver收缩事务日志失败

一、背景2022.01.12 日晚上,sqlserver实例空间使用率达到85%开始告警。查看发现目前日志空间有较大增长,如下图所示:与客户方进行反馈,在1月13日中午进行事务日志的收缩操作,发现日志...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。