首页 > 其他分享 >GitlabCI学习笔记之二:GitLabRunner pipeline语法

GitlabCI学习笔记之二:GitLabRunner pipeline语法

时间:2023-05-23 23:56:06浏览次数:44  
标签:pipeline GitLabRunner script deploy 作业 GitlabCI echo before

1.pipeline语法之语法校验

进入项目中,点击CI/CD下pipeline页面中CI int

 输入pipeline内容,点击Validate

2.pipeline语法之job

在每个项目中,我们使用名为.gitlab-ci.yml的YAML文件配置GitLab CI / CD 管道。

这里在pipeline中定义了两个作业,每个作业运行不同的命令。命令可以是shell或脚本。


可以定义一个或多个作业(job)。
每个作业必须具有唯一的名称(不能使用关键字)。
每个作业是独立执行的。
每个作业至少要包含一个script。

示例

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

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

3.pipeline语法之script

执行的命令或者脚本

示例

job:
  script:
    - uname -a
    - bundle exec rspec


**注意:**有时, script命令将需要用单引号或双引号引起来. 例如,包含冒号命令( : )需要加引号,以便被包裹的YAML解析器知道来解释整个事情作为一个字符串,而不是一个"键:值"对. 使用特殊字符时要小心: : , { , } , [ , ] , , , & , * , # , ? , | , - , < , > , = ! , % , @ .

4.pipeline语法之before_script

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

示例

before_script:
  - echo "before-script!!"

5.pipeline语法之before_script

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

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

before_script:
  - echo "before-script!!"

variables:
  DOMAIN: example.com

stages:
  - build
  - deploy
 

build:
  before_script:
    - echo "before-script in job"
  stage: build
  script:
    - echo "mvn clean "
    - echo "mvn install"
  after_script:
    - echo "after script in job"


deploy:
  stage: deploy
  script:
    - echo "hello deploy"
    
after_script:
  - echo "after-script"

注意

after_script失败不会影响作业失败。
before_script失败导致整个作业失败,其他作业将不再执行。作业失败不会影响after_script运行。

6.pipeline语法之stages

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

stages:
  - build
  - test
  - deploy

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

7.pipeline语法之.pre & .post

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

8.pipeline语法之stage

是按JOB定义的,并且依赖于全局定义的stages 。 它允许将作业分为不同的阶段,并且同一stage作业可以并行执行(取决于特定条件 )

unittest:
  stage: test
  script:
    - echo "run test"
    
interfacetest:
  stage: test
  script:
    - echo "run test"

可能遇到的问题: 阶段并没有并行运行。需要修改runner每次运行的作业数量。默认是1,改为10.

vim /etc/gitlab-runner/config.toml 更改后自动加载无需重启。
concurrent = 10

9.pipeline语法之variables

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

综合实例

before_script:                 #指定每个作业运行之前运行的任务,如果作业中有则使用作业中的
  - echo "before-script!!"

variables:                     #定义了环境变量
  DOMAIN: example.com
  
stages:        #job执行的顺序
  - build
  - test
  - codescan
  - deploy

build:
  before_script:          #作业运行前执行,如果执行失败则作业终止,但不影响after_script的执行
    - echo "before-script in job"
  stage: build  #根据stages中的定义会被最先执行
  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 "hello deploy"
    - sleep 2;
  
codescan:
  stage: codescan
  script:
    - echo "codescan"
    - sleep 5;
 
after_script:  #每个作业运行之后运行的任务,如果作业中有则使用作业中的
- echo "after-script"

 

 

 

标签:pipeline,GitLabRunner,script,deploy,作业,GitlabCI,echo,before
From: https://www.cnblogs.com/panwenbin-logs/p/17426641.html

相关文章

  • GitlabCI学习笔记之一:安装Gitlab和GitLabRunner
    1.安装GitLab#下载地址https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/wgethttps://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.9.0-ce.0.el7.x86_64.rpmrpm-ivhgitlab-ce-12.9.0-ce.0.el7.x86_64.rpmvim/etc/gitlab/gitlab.rbexterna......
  • 一文搞定Jenkins Pipeline语法
    作者ZHDYA,曾运营“云原生个锤子”达3000+人,专注免费分享一些DEVOPS/运维/自动化/K8S生态方面的实战技巧,我们一起前行学习!最近更新主要围绕:Kubernetes、持久化存储、Helm、CICD、Ingress-nginx、监控告警、应用可观察性等相关文章。JenkinsPipeline语法作为一种流行的持续集......
  • Netty实战(06)-ChannelPipeline 接口
    1概述把ChannelPipeline看成拦截流经Channel的入、出站事件的ChannelHandler的实例链,就易看出这些ChannelHandler之间的交互如何组成一个应用程序数据和事件处理逻辑的核心。每个新建的Channel都会被分配一个新的ChannelPipeline。这项关联是永久性的;Channel既不能附加另外......
  • Azure DevOps(三)Azure Pipeline 自动化将程序包上传到 Azure Bolb Storage
    一,引言结合前几篇文章,我们了解到AzurePipeline完美的解决了持续集成,自动编译。同时也兼顾了Sonarqube作为代码扫描工具。接下来另外一个问题出现了,AzureDevOps由于有人员限制,项目上不能给非开发人员或者外包成员开权限,这个时候就需要将编译好的程序包上传到公共网盘或......
  • pipeline 多个代码库到不同目录
    pipeline{agentanystages{stage('CloneRepository1'){steps{dir('repo1'){gitbranch:'main',url:'https://github.com/example/repo1.git'......
  • pipeline 解析
    shell参数set-e(脚本出现异常时马上退出)set-e选项可以让你的脚本在出现异常时马上退出,后续命令不再执行。默认情况下Shell脚本不会因为错误而结束执行,但大多数情况是,我们希望出现异常时就不要再往下走了。假如你的if判断条件里会出现异常,这时脚本也会直接退出,但可能这并不是......
  • python+playwright 学习-58 Jenkins上使用 Pipeline 运行 playwright 自动化脚本
    前言Dockerfile.focal可用于在Docker环境中运行Playwright脚本。这些镜像包括在Docker容器中运行浏览器所需的所有依赖项,还包括浏览器本身。playwright在linux系统上目前只支持Ubuntu系统的部分版本,centos和debian系统上是没法运行的。jenkins环境准备需安装2个跟docke......
  • Azure DevOps(二)Azure Pipeline 集成 SonarQube 维护代码质量和安全性
    一,引言对于今天所分析的SonarQube,首先我们得了解什么是SonarQube?SonarQube又能帮我们做什么?我们是否在项目开发的过程中遇到人为Review代码审核规范?带着以上问题,开始今天的分析内容吧!!!1)什么是SonarQube?SonarQube是一种自动代码审查工具,用于检测代码中的错误......
  • python+playwright 学习-58 Jenkins上使用 Pipeline 运行 playwright 自动化脚本
    前言Dockerfile.focal可用于在Docker环境中运行Playwright脚本。这些镜像包括在Docker容器中运行浏览器所需的所有依赖项,还包括浏览器本身。playwright在linux系统上目前只支持Ubuntu系统的部分版本,centos和debian系统上是没法运行的。jenkins环境准备需安装2个跟d......
  • Release Pipeline
    RequirementsWhencodePRmergedintoenvbranch,canbuildthecodeandpushimageintoimageregistryautomaticallyandefficientlyWhennewimagebeenpushedintoimageregistry,candetectthechangeandupdatetheimageofservicerunningink8s......