当前位置: 首页 > news >正文

Gitlab 之 YAML 相关关键字与概念解析

概念

  1. Job

    YAML 文件使用一系列约束叙述定义了 Job 启动时所要做的事情。Job 被定义为具名的顶级元素,并且至少包括一条脚本语句。Job 被 Runner 拿到并在 Runner 的环境下执行。重要的是,每个 Job 都会与其他 Job 分离开来,独立进行。如:

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

    上面的例子是两个在ci中能起作用的最简单的,分离的任务,每一个任务执行一条不同的命令。每条命令都会被Runners拿到并在Runner的环境下被执行。重要的是,每个任务将会独立进行,与其他任务分离开来。

关键字

  1. 不可以被用于 Job名 的保留字

    关键字是否必须描述
    imageno使用的docker镜像。详见
    servicesno使用的docker服务。详见
    stagesno定义构建场景
    typesnostages的别名(不赞成使用)
    before_scriptno定义每个任务的脚本启动前所需执行的命令
    after_scriptno定义每个任务的脚本执行结束后所需执行的命令
    variablesno定义构建变量
    cacheno定义哪些文件需要缓存,让后续执行可用
  2. Job 的保留字

    关键字是否必须描述
    scriptyesRunner执行的命令或脚本。可以包含多条命令
    imageno使用的docker镜像。详见
    servicesno使用的docker服务。详见
    stageno定义job stage(默认:test)
    typenostage的别名(已弃用)
    variablesno定义job级别的变量
    onlyno定义一列git分支,并为其创建job
    exceptno定义一列git分支,不创建job
    tagsno定义一列tags,用来指定选择哪个Runner(同时Runner也要设置tags)
    allow_failureno允许job失败。失败的job不影响commit状态
    whenno定义何时开始job。可以是on_success,on_failure,always或者manual
    dependenciesno定义job依赖关系,这样他们就可以互相传递artifacts
    cacheno定义应在后续运行之间缓存的文件列表
    before_scriptno重写一组在作业前执行的命令
    after_scriptno重写一组在作业后执行的命令
    environmentno定义此作业完成部署的环境名称
    coverageno定义给定作业的代码覆盖率设置
  3. only and except 保留字

    关键字描述
    branches当一个分支被push上来
    tags当一个打了tag的分支被push上来
    api当一个pipline被piplines api所触发调起,详见piplines api
    external当使用了GitLab以外的CI服务
    pipelines针对多项目触发器而言,当使用CI_JOB_TOKEN并使用gitlab所提供的api创建多个pipelines的时候
    pushes当pipeline被用户的git push操作所触发的时候
    schedules针对预定好的pipline而言(每日构建一类)
    triggers用token创建piplines的时候
    web在GitLab页面上Pipelines标签页下,你按了run pipline的时候

重要的关键字解析

  1. after_script

    before_scriptscript 在一个上下文中是串行执行的,after_script 是独立执行的。所以根据执行器(在runner注册的时候,可以选择执行器,docker,shell 等)的不同,工作树之外的变化可能不可见,例如,在before_script中执行软件的安装。

    你可以在任务中定义 before_scriptafter_script,也可以将其定义为顶级元素,定义为顶级元素将为每一个任务都执行相应阶段的脚本或命令。

  2. stages

    stages的允许定义多个,灵活的场景阶段的pipline。定义的元素的顺序决定了任务执行的顺序。例如:

        stages:
          - build
          - test
          - deploy
    
    1. build场景的任务将被并行执行。test、deploy 同理
    2. build 任务成功后,test 执行。test 成功后,deploy 执行
    3. 所有的都成功了,提交将会标记为成功
    4. 任何一步任务失败了,提交标记为失败并之后的场景,任务都不回执行。
  3. variables

    GitLab CI允许你为.gitlab-ci.yml增加变量,该变量将会被设置入任务环境。这些变量是你存储在git仓库里,并且非敏感的项目配置,例如:

    variables:
        DATABASE_URL: "postgres://postgres@postgres/my_database"
    # 注意:整数和字符串一样,对于设置变量名和变量值来说都是合法的。但浮点数是非法的。
    

    详见此处

  4. script
    script是一段由Runner执行的shell脚本,例如:

    job:
        script: "bundle exec rspec"
    

    这个参数也可以使用数组包涵好几条命令:

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

    注意:有些时候,script命令需要被单引号或者双引号所包裹。例如:当命令中包涵冒号的时候,该命令需要被引号所包裹。这样YAML解析器才知道该命令语句不是“key: value”语法的一部分。当命令中包涵以下字符时需要注意打引号:`: { } [ ] , & * # ? | - < > = ! % @ ``

  5. only and except

    only和except两个参数说明了job什么时候将会被创建:

    1. only定义了job需要执行的所在分支或者标签
    2. except定义了job不会执行的所在分支或者标签

    以下是这两个参数的几条用法规则:

    1. only和except如果都存在在一个job声明中,则所需引用将会被only和except所定义的分支过滤.
    2. only和except允许使用正则
    3. only和except允许使用指定仓库地址,但是不forks仓库

    例子解析:

    1. job将会只在issue-开头的refs下执行,反之则其他所有分支被跳过:

      job:
          # use regexp
          only:
              - /^issue-.*$/
          # use special keyword
          except:
              - branches
      
    2. job只会在打了tag的分支,或者被api所触发,或者每日构建任务上运行,

      job:
          # use special keywords
          only:
              - tags      # tag 分支 commit 之后触发
              - triggers  # API 触发
              - schedules # 每日构建触发
      
    3. job将会在父仓库gitlab-org/gitlab-ce的非master分支有提交时运行。

      job:
          only:
              - branches@gitlab-org/gitlab-ce
          except:
              - master@gitlab-org/gitlab-ce
      
    4. 在计划被触发时或者master分支被push时触发,并且先决条件是kubernetes服务是活跃的(你启用了kubernetes服务作为执行器,相关请看gitlab ci runner的文档,ce用户一般用求不到)

      job:
          only:
              refs:
                  - master
                  - schedules
              kubernetes: active
      
  1. artifacts

    artifacts 被用于在 job 作业成功后将制定列表里的文件或文件夹附加到 job 上,传递给下一个 job ,如果要在两个 job 之间传递 artifacts,你必须设置dependencies,下面有几个例子

    1. 传递所有binaries和.config:

      artifacts:
          paths:
              - binaries/
              - .config
      
    2. 传递所有git没有追踪的文件

      artifacts:
          untracked: true
      
    3. 传递binaries文件夹里所有内容和git没有追踪的文件

      artifacts:
          untracked: true
          paths:
              - binaries/
      
    4. 禁止传递来的artifact:

      job:
          stage: build
          script: make build
          dependencies: []
      
    5. 只为打tags的行为创建artifacts。artifacts将会在job执行完毕后送到GitLab ui前台来,你可以直接下载它(tag、details、pipeline 的下载按钮上都会出现)。

      default-job:
          script:
              - mvn test -U
          except:
              - tags
      
      release-job:
          script:
              - mvn package -U
          artifacts:
              paths:
                  - target/*.war
              only:
                  - tags
      

    artifacts:name

    name指令允许你对artifacts压缩包重命名,你可以为每个artifect压缩包都指定一个特别的名字,这样对你在gitlab上下载artifect的压缩包有用

    job:
        artifacts:
            name: "$CI_JOB_NAME"
    

    artifacts:when
    用于job失败或者未失败时使用。artifacts:when能设置以下值:

    1. on_success 这个值是默认的,当job成功时上传artifacts
    2. on_failure 当job执行失败时,上床artifacts
    3. always 不管失败与否,都上传
    job:
        artifacts:
            when: on_failure    #当失败时上传artifacts
    

    artifacts:expire_in
    artifacts:expire_in 用于设置 artifacts 上传包的失效时间. 如果不设置,artifacts 的打包是永远存在于 gitlab上 的。当指定 artifacts 过期时间的时候, 在该期间内,artifacts 包将储存在 gitLab 上。并且你可以在 job 页面找到一个 keep 按钮,按了以后可以覆盖过期时间,让 artifacts 永远存在。过期之后,用户将无法访问到 artifacts 包。时间的例子如下:

    • '3 mins 4 sec'
    • '2 hrs 20 min'
    • '2h20min'
    • '6 mos 1 day'
    • '47 yrs 6 mos and 4d'
    • '3 weeks and 2 days'
    job:
        artifacts:
            expire_in: 1 week # 一周后过期
    
  2. Triggers

    Triggers被用于重建特定分支,tag或者commit,他是api触发的。详见

其他关键字我没有用到因此也就没有继续研究了。

根据自己的需求进行 build 的设置

首先,设置 triggers。

 

 

编写 YAML,这是为 triggers 触发:

 

使用以下代码触发 build 。

curl -X POST -F token=你的token -F ref=你的Branch名称 https://your.gitlab.address/api/v4/



转载:https://www.jianshu.com/p/3c0cbb6c2936

相关文章:

  • linux常见的安装包安装
  • xml文件小于号大于号的处理
  • Vue新手学习笔记:基础知识点整理及示例
  • IDEA搭建SpringBoot项目,以及结合 Restful 风格进行编码
  • docker 命令
  • Dockerfile 简单例子
  • RESTful接口开发规范以及注意事项
  • docker 部署springBoot项目
  • kubernetes yaml文件解析
  • 代码重构规划
  • Vue新手学习笔记:vue-cli框架
  • Windows7+Windows10原版镜像集合
  • linux 安装 maven
  • Gitlab external_url 路径问题及解决方案
  • Gitlab 之 结合 Docker 持续集成
  • [case10]使用RSQL实现端到端的动态查询
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • canvas 五子棋游戏
  • Javascript设计模式学习之Observer(观察者)模式
  • Java面向对象及其三大特征
  • mysql_config not found
  • React as a UI Runtime(五、列表)
  • Vim 折腾记
  • 高程读书笔记 第六章 面向对象程序设计
  • 好的网址,关于.net 4.0 ,vs 2010
  • 记录一下第一次使用npm
  • 技术胖1-4季视频复习— (看视频笔记)
  • 力扣(LeetCode)357
  • 如何解决微信端直接跳WAP端
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (十八)SpringBoot之发送QQ邮件
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)http-server应用
  • (转)程序员技术练级攻略
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • ./和../以及/和~之间的区别
  • .Net 6.0 处理跨域的方式
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .NET Reactor简单使用教程
  • .NET 反射的使用
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • .NET多线程执行函数
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • /bin/bash^M: bad interpreter: No such file or directory
  • @Autowired多个相同类型bean装配问题
  • @SuppressWarnings(unchecked)代码的作用
  • [ vulhub漏洞复现篇 ] Apache APISIX 默认密钥漏洞 CVE-2020-13945
  • [ 云计算 | AWS ] 对比分析:Amazon SNS 与 SQS 消息服务的异同与选择
  • [BUUCTF 2018]Online Tool(特详解)