温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何使用Gitlab Template增强GitLab CICD的扩展性和兼容性

发布时间:2021-09-04 18:34:44 来源:亿速云 阅读:229 作者:chen 栏目:云计算

这篇文章主要讲解了“如何使用Gitlab Template增强GitLab CICD的扩展性和兼容性”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用Gitlab Template增强GitLab CICD的扩展性和兼容性”吧!

 

Include指令

Func: 用于引入.yml.yaml结尾的YAML文件,其他类型的文件不能引入。我们可以利用include.gitlab-ci.yml文件的结构更清晰,同时也可以把一些需要集中管理维护的job写在一个YAML文件中,放在一个公共仓库,让其他项目的CI来引入该文件。

举个例子,假如每个团队都需要执行一个report的job,用于报告版本发布的相关信息,那么我们可以把这个job写在report.yml文件,放在一个公共的仓库,然后每个团队的.gitlab-ci.yml文件引入report.yml。假如以后需要在report中添加一些需要上报的内容,只需要修改公共项目的report.yml即可。当然,由于report.yml会被多个项目引用,所以必须通用且拥有较好的扩展性与兼容性,如果改一点东西都需要每个团队去配合你改,那就比较糟糕了。

include注意要点假设模板文件 example.yml 内容如下:

variables:
  POSTGRES_USER: user
  POSTGRES_PASSWORD: testing_password
  POSTGRES_DB: $CI_ENVIRONMENT_SLUG

production:
  stage: production
  script:
    - install_dependencies
    - deploy
  environment:
    name: production
    url: https://$CI_PROJECT_PATH_SLUG.$KUBE_INGRESS_BASE_DOMAIN
  only:
    - master
 

.gitlab-ci.yml 内容如下:

include: 'example.yml'

image: alpine:latest

variables:
  POSTGRES_USER: root
  POSTGRES_PASSWORD: secure_password

stages:
  - build
  - test
  - production

production:
  environment:
    url: https://domain.com
 
  • 被     include的文件和     .gitlab-ci.yml在     variable中定义了同一个     变量,则该变量被     .gitlab-ci.yml中定义的变量覆盖。如上例,最终     example.yml中变量的取值为:
POSTGRES_USER:root
POSTGRES_PASSWORD:secure_password
POSTGRES_DB: $CI_ENVIRONMENT_SLUG
 
  • 被     include的文件和     .gitlab-ci.yml都定义了同一个     job,则会将两个job进行合并。上例中     example.yml中production job的     enviroment url取值为     https://domain.com

此外,include还可以使用关键字template去引入.gitlab-ci.yml模板,更为详细的信息可以阅读官方文档。

 

Extends指令

Func:extends替代了?YAML Anchors,可读性好,而且更加灵活。它定义一个可以让job去继承的模板,这样可以让我们把一些共同的key进行抽象,方便以后的维护与扩展。

Example:

.tests:
  script: rake test
  stage: test
  only:
    refs:
      - branches

rspec:
  extends: .tests
  script: rake rspec
  only:
    variables:
      - $RSPEC
 

Result:

rspec:
  script: rake rspec
  stage: test
  only:
    refs:
      - branches
    variables:
      - $RSPEC
 

以上是官方给的例子:tests作为模板,rspec去继承它,如果二者都有相同的key,则使用子类的value覆盖父类。

extend相关详细的信息请阅读:?gitlab-ci extends

 

include and extends结合使用

includeextends支持一起使用。如果只有include,仅能让某个项目引用某个YAML文件,然后根据调解触发对应的job,而加入extend后,我们可以把一些公共属性或者方法(主要是Script)也进行统一管理。这让我们可以更好地去抽象与统一维护。

Example:

  • B.yml
variables:
  TEST_VAR: B
  
.template:
  stage: test
  only: 
    - master
  script:
    - echo_hello
    - echo "VAR1 = ${VAR1}"
    - echo "VAR2 = ${VAR2}"
    - echo "TEST_VAR =  ${TEST_VAR}"
 
  • .gitlab-ci.yml
variables:
  TEST_VAR: A
  
include:
  - B.yml

job_a:
  before_script:
    - |
      function echo_hello(){
          echo "hello world!"
      }
    - VAR1="hello"
    - VAR2="world"
  extends: .template
  only:
    variables:
     - $A
 

master分支更新或定义了A变量时,触发CI,执行结果:

hello world!
VAR1 = hello
VAR2 = world
TEST_VAR = A
 

以上结果表明:

  1. 在     .gitlab-ci.yml中执行的job,使用的环境变量是     .gitlab-ci.yml文件定义的变量,故输出     TEST_VAR = A
  2. extends的动作早于     before_script
 

感谢各位的阅读,以上就是“如何使用Gitlab Template增强GitLab CICD的扩展性和兼容性”的内容了,经过本文的学习后,相信大家对如何使用Gitlab Template增强GitLab CICD的扩展性和兼容性这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI