最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • .gitlab-ci.yml关键词完整解析(一)

    正文概述 掘金(TopFE)   2021-02-26   638

    .gitlab-ci.yml关键词完整解析(一)

    使用GitLab自带的流水线,必须要定义流水线的内容,而定义内容的文件默认叫做.gitlab-ci.yml,使用yml的语法进行编写。 目前任务关键词有28个,全局的关键词有10个,两者重叠的有很多。今天我给大家先讲解一下常用的关键词,掌握了这些关键词的用法,你可以编写逻辑严谨,易于扩展的流水线。

    任务的28个关键词分别是, script, after_script, allow_failure, artifacts, before_script, cache, coverage, dependencies, environment, except, extends, image, include, interruptible, only, pages, parallel, release, resource_group, retry, rules, services, stage, tags, timeout, trigger, variables, when

    全局的关键词 image,services,before_script,after_script,tags,cache,artifacts,retry,timeout,interruptible

    最常任务中最常用的是这七个scriptartifactsstagewhentagsimagecache, 下面我先来详细介绍一下这七个关键词,知道了这个七个关键词,一般的流水线随随便便拿下,

    script

    任务要执行的shell脚本内容,内容会被runner执行,在这里,你不需要使用git clone ....克隆当前的项目,来进行操作,因为在流水线中,每一个的job的执行都会将项目下载,恢复缓存这些流程,不需要你再使用脚本恢复。你只需要在这里写你的项目安装,编译执行,如 npm install 另外值得一提的是,脚本的工作目录就是当前项目的根目录,所有可以就像在本地开发一样。此外script可以是单行或者多行

    单行脚本

    job:
      script: npm install
    

    多行脚本

    job:
      script:
        - npm config set sass_binary_site https://npm.taobao.org/mirrors/node-sass/
        - npm install --registry=http://registry.npm.taobao.org
    

    script是一个job的必填内容,不可或缺。一个job最少有二个属性,一个是job name, 任务名称, 一个就是script。

    image

    指定一个基础Docker镜像作为基础运行环境,经常用到的镜像有node nginx docker

    job:
      image: node:latest
      script: npm install
    

    在上面这个任务中,如果不指定image: node:latest 执行下面的npm install时会报错,找不到npm的命令。 image的作用就是给当前任务或者当前流水线设置一个基础环境,有可能是nodejs,也有可能是java, go, php, 可以设置当前流水线的,也可以设置当前任务的。

    artifacts

    翻译出来这个单词就是制品,一个成品,作用是将流水线过程中的一些文件,文件夹,打包压缩,提供一个外链供人下载,另外还能在后续的job中缓存。 比如我们构建一个前端项目后将dist目录做成一个压缩包,

    build:
      script:
        - npm run build
      artifacts:
        paths:
          - dist/
    

    在这个任务后面运行的任务会自动恢复这个制品,意味着你不用再执行npm run build来获取编译后的dist文件了, 在安卓,ios打包的时候,非常有用,因为流水线最终输出的就是一个可下载,可安装的应用。 paths 是用来指定将那些文件,目录放入制品中, 也可以使用exclude关键词,将那些目录,文件排除,支持正则表达式。 此外还有以下几个属性

    • paths 文件路径
    • exclude 排除的文件
    • name 制品名称
    • expose_as 在UI页面导出的名称
    • untracked 布尔类型,是否将git忽略的文件加到制品中
    • when on_success;on_failure;always 何时上传制品
    • expire_in 过期时间默认30天
    • reports 收集测试报告
    build:
      script:
        - npm run build
      artifacts:
        paths:
          - dist/
        exclude:
          - binaries/**/*.o
        expose_as: 'artifact 1'
        name: "$CI_COMMIT_REF_NAME"
        untracked: false
        expire_in: 2 hrs 20 min
        when: on_failure
    

    tags

    tags 关键词是用于指定Runner,tags的取值范围是在该项目可见的runner tags中,可以在Setting =>CI/CD => Runner 中查看的到。 要知道,改属性可以设置全局,不设置则默认使用公有Runner去执行流水线。每个任务可以指定一个Runner,可以指定多个标签,但runner却只能一个。以一个为准。tags是在我们注册Runner是配置的,后续也可以更改。

    install:
      tags:
        - hello-vue
        - docker
      script:
        - npm config set sass_binary_site https://npm.taobao.org/mirrors/node-sass/
        - npm install --registry=http://registry.npm.taobao.org
    

    cache

    缓存是将当前工作环境目录中的一些文件,一些文件夹存储起来,用于在各个任务初始化的时候恢复。避免多个下载同样的包,能够大大优化流水线效率。在前端项目中,我们经常把node_modules缓存起来,这样一条流水线都可以使用这些下载好的包。在java项目中经常把maven下载的包缓存起来。以备后用 cache下的参数有

    • paths 当前工作环境下的目录
    • key 存储的key,key不变不会重新生成缓存,
    • :key:prefix 使用一些文件制作成文件hash值,当做key的一部分,
    • untracked 是否缓存git忽略的文件
    • when 定义何时存储缓存 on_success;on_failure;always
    • policy 缓存是否要在job完成后重新上传

    缓存可以设置流水线全局,也可以在job中设置

    cache:
      key: hello-vue-cache
      paths:
        - node_modules
    
    cache:
      key:
        files:
          - Gemfile.lock
          - package.json
      paths:
        - vendor/ruby
        - node_modules
    

    stage

    stage 是阶段的意思,用于归档一部分的job,按照定义的stage顺序来执行。 默认的stage有build,test,deploy, 此外还有两个特殊的.pre 和 .post job执行的顺序不是按照编写的顺序,大体上是按照stage定义的顺序来执行的,注意是大体,也有例外的情况。

    stages:
      - build
      - test
      - deploy
    
    job 0:
      stage: test
      script: echo 'tets'
    
    job 1:
      stage: build
      script: echo 'build'
    

    由于buildtest之前所有会指向job1这个任务,后指向job0任务

    when

    when关键字是实现在发生故障或尽管发生故障时仍能运行的作业。比如你要在任务失败后需要触发一个job, 或者你需要手动执行任务,或者当你一个任务执行成功后,执行另一个任务.

    • on_success 所有任务执行成功后
    • on_failure 当至少一个任务失败后
    • always 执行作业,而不考虑作业在早期阶段的状态。
    • manual 手动执行任务
    • delayed 延迟执行任务
    • never

    rules中不排除执行的任务 在workflow:rules不允许的流水线

    only/except

    only/except 是规定当前job的可见状态,一个项目有很多分支,tag,我们的流水线,为了对特定的分支,特定的tag执行不同的job,这里就要使用only和except 在任务上加上这一段代码,就表明当前任务只有在master分支可以运行

    only:
      - master
    

    也可以根据当前的代码变动是合并,还是推送,还是使用API来触发的。 如果一个任务没有only属性,那默认就是 only: ['branches', 'tags'] 操作分支或者tags都会触发流水线。

    写在最后

    懂了以上这些关键词,那就不难写出一条好的流水线。 遇到流水线问题,可以私聊我。demon_0212

    关注我,后续还有更多优质精讲文章。

    首发地址 www.ebaina.com/articles/14…


    起源地下载网 » .gitlab-ci.yml关键词完整解析(一)

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元