• 前端gitlab-ci.yml 入门


    说起来使用gitlab也有大半年了,每天都在跑pipeline,但是却没有好好研究过这个叫gitlab-ci.yml的文件。这次借着发布流程升级的机会,好好入门了一下。
    主要分以下内容:

    • stages
    • cache
    • only
    • when
    • before_script,script, after_script
    • artifacts
    • hidden_job && extends
    • reserved keywords - include

    stages:

    stages是用来定义一个pipeline的,一个pipeline就像一个流水线,由一系列job来构成。比如在发布(publish)之前要做lint,test,build,那么这四个job就构成一个pipeline,写成下面的样子:

    stages
      - lint
      - test
      - build
      - publish
    

    然后你在gitlab的pipeline下面就能看到下面的图:

    上面我们虽然定义了一个pipeline,和4个job名称,但是具体每个job做什么还是不清楚的,接下来我们学习怎么定义一个job。

    job

    以上面的lint为例,我们需要执行npm run lint命令来查看有没有lint错误,那么这个job可以写成:

    job-lint:
      stage: lint
      script: npm run lint
    

    这里job-lint是任务名称,script是要在终端执行的命令,stage表示这个job属于哪个stage(pipeline的某个节点)。job名称这里要注意一点是,不能使用保留字,比如:不能把一个job的名字称为stages或者image,就像变量名不能用if一样。相关文档可以看这里

    有时候,我们希望一些任务是在某些场景下执行的,比如:打tag的时候再build,这时候可以使用only/except。

    variables

    在跑一个job的过程中,我们可能会需要环境变量,比如development,production,一个url,又或者是一个不希望显示在控制台的token,都可以作为一个环境变量,设置一个环境变量通常有3种方式:在项目设置中,在yml文件中,或者通过api。

    通过项目设置界面来配置环境变量的入口如下:

    在variables下可以配置变量名和值,通常是需要保密的变量

    当然我们也可以设置在yml中:

    variables:
      TEST: "HELLO WORLD"
    

    然后就可以在脚本中引用:

      script:
        - echo $TEST 
    

    only/except

    以上面的场景为例,我们可以这样写job-build:

    job-build:
      stage: build
      script: npm run build
      only:
        - tags
    

    这样,上面的job就只有在我们push tags时才会触发。如果我们希望一个job只在某一类分支有提交的时候触发,可以这样:

    job-bugfix-build:
      stage: build
      script: npm run build
      only:
        - /^bugfix-.+$/
    

    上面这个例子只有在bugfix为前缀的分支产生提交的时候,才会触发job-bugfix-build。

    然而,这样并不足以让这个任务跑起来,因为CI是跑在docker里面的,在执行run lint之前,我们需要把node环境搭起来,这就需要image保留字了:

    image: node:12.18
    

    添加了image之后,在任务开始之前,还要安装依赖,我们使用before_script来完成这件事:

    # 使用node镜像
    image: node:12.18
    
    # 安装依赖
    before_script:
     - npm install
    

    有时候我们希望在某些场景下不执行某项任务,这时可以使用expect,比如不对hotfix进行lint:

    job-lint-except-hotfix:
      script: 
        - npm run lint
      except: /^hotfix-.+$/
        
    

    when

    说了only,再说说when,when 是用来决定当前置任务失败时,当前job是否执行,以及如何执行的问题。比如我们希望lint成功了再执行build:

    build_job:
      when: on_success
      stage: build
      needs: lint_job
    

    再比如我们在执行发布的时候,希望手动点击发布按钮来执行发布:

    publish_job:
      when: manual
      stage: publish
      script: npm run deploy
    

    artifacts

    在前面提到的build job中,我们会使用webpack生成压缩,混淆后的代码,此时我们需要把它保存或者下载下来,这时就要用到artifacts了。用法如下:

    build_job:
      script: npm run build
      artifacts:
        name: "$CI_COMMIT_REF_NAME"
        paths: dist/
    

    artifacts最终会被打包成一个压缩文件,这里的path表示要添加到压缩文件的文件或文件夹,name表示生成的压缩文件的名字。然后在对应的任务详情特面就可以下载:

    include和extends

    正如通过程序通过模块来实现代码复用一样,CI的yml配置可以通过include实现配置复用:

    include:
      - remote: 'https://gitlab.com/awesome-project/raw/master/.before-script-template.yml'
      - local: '/templates/.after-script-template.yml'
      - template: Auto-DevOps.gitlab-ci.yml
    

    这样,我们可以把一些公用的环境变量或者job放到一个公共repo中,然后在其他项目中通过remote来引用。

    参考:
    https://gitlab.com/help/ci/yaml/README

  • 相关阅读:
    ffmpeg filter过滤器 基础实例及全面解析
    gcc的memcpy性能测试
    repo基本操作
    repo或者git diff -uno差异文件全路径备份
    cmake视频教程
    Rust Macro assert!
    Rust迭代器测试
    钟南山每天喝牛奶
    查网页的最后修改时间
    王勃学习车辆超速监测管理系统
  • 原文地址:https://www.cnblogs.com/imgss/p/13746878.html
Copyright © 2020-2023  润新知