• CICD(1)——pipeline语法(1)


    目录

    一、简介

    二、关键字

    1. job

    2. script

    3. before script

    4. after script

    5. stages

    ① 未定义stages

    ② 定义stages

    6. .pre & .post

    7. stage

    8.variables

    三、综合实例


    一、简介

    本篇文章用于记录学习CICD时的yaml配置文件语法规则

    二、关键字

    job/script/before_script/after_script/stages/stage/variables 

    1. job

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

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

    1. job1:
    2. script: "execute-script-for-job1"
    3. job2:
    4. script: "execute-script-for-job2"
    • 可以定义一个或多个作业(job)。
    • 每个作业必须具有唯一的名称(不能使用关键字)。
    • 每个作业是独立执行的。
    • 每个作业至少要包含一个script

    2. script

    1. job:
    2. script:
    3. - uname -a
    4. - bundle exec rspec

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

    : , { , } , [ , ] , , , & , * , # , ? , | , - , < , > , = ! , % , @ .

    3. before script

    1. job:
    2. script:
    3. - uname -a
    4. - bundle exec rspec

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

    4. after script

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

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

    1. build:
    2. before_script:
    3. - echo "before-script in job"
    4. stage: build
    5. script:
    6. - echo "mvn clean "
    7. - echo "mvn install"
    8. after_script:
    9. - echo "after script in job"

    after_script失败不会影响作业失败

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

    5. stages

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

    1. stages:
    2. - build
    3. - test
    4. - deploy

    ① 未定义stages

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

    此时如果没有定义stages,而job中的stage又定义了除build,test,deploy这三个默认的stage,那么CICD会报错

    ② 定义stages

    为了避免上述情况的发生,一个标准的yaml文件必须定义stages

    1. stages:
    2. - build
    3. - test
    4. - codescan
    5. - deploy

    此时当某个job的stage为codescan时,CICD可以明确知道该job的运行顺序,从而能够正常运行

    6. .pre & .post

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

    7. stage

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

    1. unittest:
    2. stage: test
    3. script:
    4. - echo "run test"
    5. interfacetest:
    6. stage: test
    7. script:
    8. - echo "run test"

     unittest和interfacetest同属一个stage,按理来说他们应该会并行运行,但是在gitlab-runner中默认一个runner每次运行的job数量为1,因此我们需要修改默认值

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

    concurrent = 10

    8.variables

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

    三、综合实例

    综合实例:

    1. before_script:
    2. - echo "before-script!!"
    3. variables:
    4. DOMAIN: example.com
    5. stages:
    6. - build
    7. - test
    8. - codescan
    9. - deploy
    10. build:
    11. before_script:
    12. - echo "before-script in job"
    13. stage: build
    14. script:
    15. - echo "mvn clean "
    16. - echo "mvn install"
    17. - echo "$DOMAIN"
    18. after_script:
    19. - echo "after script in buildjob"
    20. unittest:
    21. stage: test
    22. script:
    23. - echo "run test"
    24. deploy:
    25. stage: deploy
    26. script:
    27. - echo "hello deploy"
    28. - sleep 2;
    29. codescan:
    30. stage: codescan
    31. script:
    32. - echo "codescan"
    33. - sleep 5;
    34. after_script:
    35. - echo "after-script"
    36. - ech

    参考文章链接:

    pipeline syntax 1 (idevops.site)

  • 相关阅读:
    如何使用adb command来设置cpu频率和核数
    antd的upload上传组件,上传成功后清除表单校验——基础积累
    JVM第七讲:JVM 基础 - Java 内存模型详解
    数据结构与算法-第五章 树与二叉树
    Java回顾-String/StringBuilder/StringBuffer
    会编程的少年有多厉害?8岁女儿写代码哄程序员爸爸开心,网友直呼:破防了
    千兆以太网协议简介
    数据安全治理咨询V3.0全新版本发布!
    API接口随心搭,自由定制你的数据流
    UDP网络通信的发包/收包过程/代理服务器的使用
  • 原文地址:https://blog.csdn.net/Hemameba/article/details/134012148