• GitLab CI/CD关键词(四):指定runner tags,镜像image,运行条件when


    转载自:https://cloud.tencent.com/developer/article/1978774

    简介

    本篇文章介绍三个关键词,用于指定runner的tags,使用镜像来构建运行作业,以及规定合适触发作业的when关键词。这些都是非常使用的基础关键词。对于我们编写流水线非常有帮助。

    指定runner tags

    tags是用于指定作业运行的runner,开发者在注册runner时,会指定runner的tag,这是一个逗号分割的列表,在注册后开发者也可以在gitlab上进行修改。

    假如一个runner的tag为[Sona, Galio],那么如果作业要使用该runner运行脚本的话可以这样写

    GarenJob:
      script: echo 'The only limit to our realization of tomorrow will be our doubts of today.'
      tags:
        - Sona
        - Galio
    

    如果runner有二个tag,你可以指定一个tag,也可以指定2个。如果指定一个,并且该tag在多个runner中都存在,那么作业会在二个runner随机调度到其中一个。为了确保指定到固定的runner,建议在注册runner时使用不同的tag,并且在作业下指定tag时,列出runner的所有tag。

    在作业上tags并不是必填项,如果一个作业没有配置tags那么该作业会去寻找该项目下所有可以使用的runner,并且runner配置为不必指定tag也可以调用。

    镜像image

    如果你的流水线要使用Docker镜像来运行,或提供基础服务,那么使用关键词image将变的很简单。

    以下是一个使用image的例子

    InstallJob:
      image: node:latest
      script: npm install
    

    上面的例子就是使用nodejs的官方镜像node来进行项目构建的。注意image在shell执行器下是不生效的。即使主机上已经安装了Docker。

    image的值可以是一个完整的镜像地址,如registry.example.com/my/image:latest。image除了指定镜像名外,还可以重置镜像的入口即 entrypoint,重置镜像入口该配置对于一些二进制文件镜像非常有用,比如 bitnami/kubectl 可以参考一下我的这篇文章: 使用GitLab CI/CD部署应用到Kubernetes集群的方案

    deploy_k8s:
      image:
        name: bitnami/kubectl
        entrypoint: [""]
      script:
        - kubectl version
    

    一般情况下使用的镜像都是公开的,但也并不排除有需要使用私有镜像的情况。这里介绍一下如何使用私有镜像。

    使用下面命令生成秘钥

    echo -n "my_username:my_password" | base64
    

    my_username 与my_password都是登录私有镜像库的账号和密码。

    执行后会生成一个base64的字符串。然后创建一个变量DOCKER_AUTH_CONFIG, DOCKER_AUTH_CONFIG变量的值为

    {
        "auths": {
            "<私有镜像的域名>": {
                "auth": "上面生成的base64的字符串"
            }
        }
    }
    

    然后就可以放心大胆地使用私有镜像了。

    还有一种方式是直接在GitLab Runner的配置文件里这样写

      environment = ["DOCKER_AUTH_CONFIG={\"auths\":{\"registry.example.com:5000\":{\"auth\":\"bXlfdXNlcm5hbWU6bXlfcGFzc3dvcmQ=\"}}}"]
    

    更多方式可以查看这个文档

    运行条件when

    关键词when是用于配置满足何种条件下作业才会运行。一共有6个值:

    • on_success (默认): 当前一阶段的所有作业运行成功后,才会运行该作业
    • manual: 手动触发作业
    • always: 不管前面作业的状态如何,都会运行
    • on_failure: 当前面有一个作业运行失败才会运行该作业
    • delayed:延迟运行该作业
    • never: 绝不运行该作业

    使用案例

    stages:
      - build
      - cleanup_build
      - test
      - deploy
      - cleanup
    
    build_job:
      stage: build
      script:
        - make build
    
    cleanup_build_job:
      stage: cleanup_build
      script:
        - cleanup build when failed
      when: on_failure
    
    test_job:
      stage: test
      script:
        - make test
    
    deploy_job:
      stage: deploy
      script:
        - make deploy
      when: manual
    
    cleanup_job:
      stage: cleanup
      script:
        - cleanup after jobs
      when: always
    

    当build_job 失败后,cleanup_build_job 作业将会运行. 在流水线结束时总是执行cleanup_job 作业,无论前面的作业是成功或失败.要想执行deploy_job 作业,必须在GitLab UI上点击运行才可以,因为它是一个手动运行作业。

  • 相关阅读:
    (译).NET4.X并行任务Task需要释放吗?
    微软面向高并发应用而推出的新程序库——TPL Dataflow
    C# 5.0 Async函数的提示和技巧
    内存泄露——文章
    AJAX POST请求中参数以form data和request payload形式在php中的获取方式
    NodeJS中间层搭建
    HTML5上传预览
    laravel 图片上传 ajax 方式
    抽奖程序
    IText 生成页脚页码
  • 原文地址:https://www.cnblogs.com/sanduzxcvbnm/p/16377355.html
Copyright © 2020-2023  润新知