gitlab--Stages、job、.pre 、.post 、before_script、after_script、variables 环境变量

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: gitlab--Stages、job、.pre 、.post 、before_script、after_script、variables 环境变量

Stages 和 job


在 pipeline 中,有几个名词需要知道,Stages、job、stage、before_script、after_script 等

Stages:一个流水线可以包含若干个阶段,一个阶段可以包含若干个作业

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

这里定义了三个阶段,首先 Build 阶段运行,然后 Deploy 阶段运行,最后 Test 阶段并行运行。Test 阶段运行成功后将提交状态标记为 passed 状态。如果任何一个阶段运行失败,最后提交状态为 failed

全局定义的 stages 是来自于每个job。如果 job 没有定义 stage 则默认是 test 阶段。如果全局未定义 stages, 则按 yaml 文件里的顺序运行


job:作业是具体要执行的任务,命令脚本语句的集合


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


.pre 和 .post


  • .pre:在流水线运行之前运行
  • .post:在流水线运行之后运行

.pre 和 .post 是 stage 的名称,不需要在 stages 里指定,就会运行

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

stages: # 指定运行的步骤,pre 和 post 不需要指定
  - build
  - test
  - deploy
ciinit: # job 的名称
  tags: 
    - k8s
  stage: .pre # pipeline 运行之前运行
  script:
    - echo "pipeline init first job"
ciend: # job 的名称
  tags: 
    - k8s
  stage: .post # pipeline 运行之后运行
  script:
    - echo "pipeline end job"
build1: # job 的名称
  tags: # 指定要运行的 runner,指定的是 runner 的 tag
    - k8s
  stage: build
  script:
    - echo "Do your build here"
test1:  # 没有指定要运行的 runner,就在可以运行的 runner 上选择一台运行
  stage: test
  script:
    - echo "Do a test here"
    - echo "For example run a test suite"
test2: # job 的名称
  stage: test
  script:
    - echo "Do another parallel test here"
    - echo "For example run a lint test"
deploy1: # job 的名称
  tags: # 指定要运行的 runner,指定的是 runner 的 tag
    - k8s
  stage: deploy
  script:
    - echo "Do your deploy here"

可以看到运行的步骤为

如果两个或者多个 job,指向同一个阶段名称,则该阶段下的所有 job  都并行运行。如果不能并行运行,需要检查 runner 的配置文件中的 concurrent 的值是不是大于 1。

例如上面的 Test 阶段,有两个 job,test1 和 test2。如果 runner 的配置文件中的 concurrent 为 2 ,则两个 job 会并行运行

before_script 和 after_script

before_script

用于定义一个命令,该命令在每个作业之前运行。必须是一个数组。指定的script与主脚本中指定的任何脚本串联在一起,并在单个 shell 中一起执行

after_script

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

可以在全局定义,也可以在 job 中定义。在 job 中定义会覆盖全局。

before_script 失败导致整个作业失败,其他作业将不再执行。作业失败不会影响 after_script 运行。哪怕 job 失败了,after-script 也会执行

before_script: # 在流水线之前运行
  - echo "我是在流水线运行之前运行"
variables: # 设置了一个全局的环境变量
  DOMAIN: example.com
stages: # 指定运行的顺序
  - test
  - build
  - deploy
build: # job 名称
  before_script: # 在 job 运行 script 之前运行
    - echo "job 中的 job 运行之前运行"
  stage: build
  script:
    - echo "mvn clean "
    - echo "mvn install"
  after_script: # 在 job 运行 script 之后运行
    - echo "job 中的 job 运行之后运行"
deploy:
  stage: deploy
  script:
    - echo "我是部署阶段"
test:
  stage: test
  script:
    - echo "我是测试阶段"
after_script: # 所有的 job 运行完成之后运行
  - echo "我是在流水线运行之后运行"

运行流水线,查看阶段

查看 test job 的信息

在来查看 build 的 job

在来查看 deploy 的 job


variables 环境变量


变量可以分为全局变量和局部变量,全局变量是整个流水线都可以使用的,局部变量是只在 job 中生效的

stages:
  - build
  - test
  - deploy
variables: # 全局变量
  VERSIONS: "1.32.1"
deploy2:
  tags: # 指定要运行的 runner,指定的是 runner 的 tag
    - k8s
  variables: # 局部变量
    VERSIONS: "6.78.9"
  stage: deploy
  script:
    - echo "${VERSIONS}" # 局部变量的优先级大于全局变量的
build1:
  tags: # 指定要运行的 runner,指定的是 runner 的 tag
    - k8s
  stage: build
  script:
    - echo "${VERSIONS}" # 打印的是全局变量
test1:  # 没有指定要运行的 runner,就在可以运行的 runner 上选择一台运行
  stage: test
  script:
    - echo "Do a test here"
    - echo "For example run a test suite"
test2:
  stage: test
  script:
    - echo "Do another parallel test here"
    - echo "For example run a lint test"
deploy1:
  tags: 
    - k8s
  stage: deploy
  script:
    - echo "Do your deploy here"

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
API 数据安全/隐私保护
gitlab--内置的环境变量、自定义环境变量
gitlab--内置的环境变量、自定义环境变量
|
Shell Linux
Gitlab----Pipline流水线语法job、script、stages、stage、before_script、after_script、variables、.pre、.post
Gitlab----Pipline流水线语法job、script、stages、stage、before_script、after_script、variables、.pre、.post
394 0
Gitlab----Pipline流水线语法job、script、stages、stage、before_script、after_script、variables、.pre、.post
|
5月前
|
Linux 应用服务中间件 网络安全
linux安装Gitlab
linux安装Gitlab
160 0
|
2月前
|
Shell Docker 容器
GitlabCI学习笔记之一:安装Gitlab和GitLabRunner
GitlabCI学习笔记之一:安装Gitlab和GitLabRunner
|
1月前
|
Docker 容器
Docker安装Gitlab和Gitlab-Runner并实现项目CICD
Docker安装Gitlab和Gitlab-Runner并实现项目CICD
|
3月前
|
Devops 持续交付 开发工具
入职必会-开发环境搭建54-GitLab下载和安装
GitLab 是一个基于 web 的 Git 仓库管理工具,提供了代码托管、版本控制、协作开发、持续集成等功能,是一个综合的 DevOps 平台。用户可以使用 GitLab 托管他们的代码仓库,并利用其丰富的功能来管理和协作开发项目。 以下是 GitLab 的一些主要特点和功能。
入职必会-开发环境搭建54-GitLab下载和安装
|
2月前
|
Ubuntu 安全 网络安全
在Ubuntu 16.04上安装和配置GitLab的方法
在Ubuntu 16.04上安装和配置GitLab的方法
64 0
|
2月前
|
存储 Ubuntu 安全
在Ubuntu 18.04上安装和配置GitLab的方法
在Ubuntu 18.04上安装和配置GitLab的方法
51 0
|
2月前
|
缓存 Kubernetes Shell
CI/CD:安装配置Gitlab Runner
CI/CD:安装配置Gitlab Runner
234 0
|
4月前
|
持续交付 开发工具 git
阿里云云效产品使用问题之在云效代码域中gitlab使用docker安装的,迁移时遇到“获取企业信息失败”,是什么原因
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。

相关实验场景

更多