前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >使用Gitlab Template增强GitLab CICD的扩展性和兼容性

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

作者头像
公众号: 云原生生态圈
发布于 2020-12-29 03:24:06
发布于 2020-12-29 03:24:06
2.4K00
代码可运行
举报
文章被收录于专栏:云原生生态圈云原生生态圈
运行总次数:0
代码可运行

前期导读:

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 内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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.ymlvariable中定义了同一个变量,则该变量被.gitlab-ci.yml中定义的变量覆盖。如上例,最终example.yml中变量的取值为:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.tests:
  script: rake test
  stage: test
  only:
    refs:
      - branches

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

Result:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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,执行结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
hello world!
VAR1 = hello
VAR2 = world
TEST_VAR = A

以上结果表明:

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

Summary

我们在做持续集成的时候应该仔细思考哪些东西可以用到includeextends,这样可以提高CI/CD的扩展性与可维护性。

原文地址: https://www.jianshu.com/u/bab0045ed734

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云原生生态圈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
复制的官方GitLab 文档
stage: Verify group: Continuous Integration info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments type: reference
拿我格子衫来
2022/01/24
2.4K0
用Gitlab CICD Pipeline Template部署应用
Gitlab的CI/CD[1]是通过Gitlab runner执行器实现的,它作为执行器运行我们在.gitlab-ci.yml中定义的一些逻辑行为。前面三篇讲述的是Gitlab的安装、通过一个flask web框架服务进行代码兼容性检查、编译、部署的整个pipeline.
公众号: 云原生生态圈
2020/06/15
2.4K0
用Gitlab CICD Pipeline Template部署应用
GitLab CI / CD管道配置参考 .gitlab-ci.yml文件定义字段
使用在每个项目中调用的YAML文件配置GitLab CI / CD 管道.gitlab-ci.yml。
拿我格子衫来
2022/01/24
22.3K0
.gitlab-ci.yml关键词完整解析(二)
上次我们介绍了 script, image, artifacts ,tags, cache ,stage ,when ,only/except。 学习了这几个关键词的用法,就不难配置一条简单的流水线。但如果要遇到更加复杂的业务场景,如微服务,流水线继承,多流水线,等复杂场景,那么只靠以上的几个用法是无法实现的。下面我就再给大家讲解其他几个更加复杂的关键词。 这次讲解的关键词有 before_script, after_script, dependencies, environment, extends, include, interruptible ,parallel, rules ,trigger, services
拿我格子衫来
2022/01/23
1.6K0
持续集成gitlab-ci.yml配置文档基础
[TOC] 0x00 简述 Q:什么是.gitlab-ci.yaml?它有什么作用? 答:gitlab-ci全称是gitlab continuous integration的意思就是持续集成;gitl
全栈工程师修炼指南
2020/10/23
15K1
持续集成gitlab-ci.yml配置文档基础
基于gitlab gitlab-runner的cicd部署
在本文中,我将介绍如何基于 GitLab 和 GitLab Runner 进行 CI/CD 部署。GitLab 是一个强大的 Git 仓库管理系统,提供了完整的 CI/CD 管理功能。GitLab Runner 是一个用于运行 CI/CD 作业的轻量级容器化工具。我们将使用 Docker 容器来运行 GitLab 和 GitLab Runner。
堕落飞鸟
2023/03/27
1.4K0
GitLab 冷知识:在 Gitlab CI Pipeline 中进行 Git Push 操作 🦊
在日常工作中,经常会遇到这样一种场景:需要在 GItLab CI Job 中进行 Git Push 操作,将修改或构建好的代码推送到远端 Git 代码仓库当中。这是一个十分常见操作,本篇文章将会提供一个最简单且实用的方法来实现这个场景,希望对您有所帮助。
郭旭东
2022/12/05
5.5K0
GitLab 冷知识:在 Gitlab CI Pipeline 中进行 Git Push 操作 🦊
通过 .gitlab-ci.yml配置任务
从7.12版本开始,GitLab CI使用YAML文件(.gitlab-ci.yml)来管理项目配置。该文件存放于项目仓库的根目录,它定义该项目如何构建。
leon公众号精选
2022/04/27
5.7K0
通过 .gitlab-ci.yml配置任务
Gitlab CI 配置文件 .gitlab-ci.yaml 详解(上)
本文档用于描述 .gitlab-ci.yml 语法,.gitlab-ci.yml 文件被用来管理项目的 runner 任务。如果想要快速的了解GitLab CI ,可查看快速引导。 从 7.12 版本开始,GitLab CI 使用YAML文件 (.gitlab-ci.yml) 来管理项目配置。该文件存放于项目仓库的根目录,它定义该项目如何构建。
Debian中国
2018/12/21
24.3K0
Gitlab-CICD最简单明了的入门教程
由于目前公司使用的gitlab,大部分项目使用的CICD是gitlab的CICD,少部分用的是jenkins,使用了gitlab-ci一段时间后感觉还不错,因此总结一下
全栈程序员站长
2022/09/07
6K0
Gitlab-CICD最简单明了的入门教程
gitlab实现CICD的实战过程
目前的现状,开发者在提交代码后还需要去构建镜像,上传镜像到镜像仓库,频繁的修改就需要频繁的构建。
用户10002156
2024/01/03
3730
gitlab实现CICD的实战过程
.gitlab-ci.yml语法完整解析(三)
关于如何编写GitLab流水线,.gitlab-ci.yaml文件的关键词,已经写过两期了,gitlab-ci.yaml的关键词一共有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 ,第一期 .gitlab-ci.yml关键词完整解析(一) 讲了最常用的9个关键词的用法, script, image,artifacts,tags,cache,stage,when,only/except, 第二期.gitlab-ci.yml关键词完整解析(二)讲了11个扩展性很强的关键词的用法 before_script, after_script, dependencies, environment, extends, include, interruptible ,parallel, rules ,trigger, services
拿我格子衫来
2022/01/23
1.7K0
GitLabCI系列之流水线语法第六部分
如果needs:设置为指向因only/except规则而未实例化的作业,或者不存在,则创建管道时会出现YAML错误。
DevOps云学堂
2020/05/22
3K0
GitLabCI系列之流水线语法第六部分
GitLab CICD与Kubernetes实践·部署Flask Web服务
上篇?Gitlab CICD 与Kubernetes实践·部署GitLab Runner文章内通过Kubernetes已经完成Gitlab Runner的部署的,现在我通过一个实际的案例来测试和使用G
公众号: 云原生生态圈
2020/11/02
2K0
GitLab CICD与Kubernetes实践·部署Flask Web服务
Gitlab-CICD实践篇(下)
该实践方案主要介绍微服务项目使用gitlab自带的GitLab Continuous Integration (CI) & Continuous Delivery (CD)功能,在gitlab提供的runner里面进行打包、测试、发布。
陈不成i
2021/06/07
8130
【GitLab CI/CD 实践】从 0 到 1 搭建高效自动化部署流程
GitLab CI/CD 是 GitLab 内置的持续集成和持续部署(CI/CD)工具,它可以帮助开发团队自动化代码测试、构建和部署。本指南将介绍如何使用 GitLab CI/CD 搭建完整的自动化部署流程,包括 .gitlab-ci.yml 配置文件的编写、Stages、Jobs、Artifacts 以及 Runner 的使用。
Swift社区
2025/02/07
4860
【GitLab CI/CD 实践】从 0 到 1 搭建高效自动化部署流程
gitlab .gitlab-ci.yml 文件赏析
前端 ci https://gitlab.com/gitlab-org/gitlab/-/blob/master/.gitlab/ci/frontend.gitlab-ci.yml
拿我格子衫来
2022/01/24
7080
Gitlab CI 配置文件 .gitlab-ci.yaml 详解(下)
本文档是描述 .gitlab-ci.yml 详细用法的下半部分,上半部分的内容请参考这里。.gitlab-ci.yml 文件被用来管理项目的 runner 任务。如果想要快速的了解GitLab CI ,可查看快速引导。 该文件存放于项目仓库的根目录,它定义该项目如何构建。
Debian中国
2018/12/21
7.5K0
Git——Docker搭建GitLab&简单的Runner配置
GitLab是一个开源的用于仓库管理的项目,和GitHub一样是使用Git作为代码管理工具。
不愿意做鱼的小鲸鱼
2022/09/26
2.1K0
Git——Docker搭建GitLab&简单的Runner配置
1.基于GitLab代码仓库的持续集成基础配置和使用
[TOC] 0x00 前言简述 CI/CD介绍 Q:我们常说的CI/CD是什么? CI 为 Continuous Integration 的缩写持续集成,可以理解为代码变动提交后,自动执行代码编译、代
全栈工程师修炼指南
2022/09/29
3.7K0
1.基于GitLab代码仓库的持续集成基础配置和使用
相关推荐
复制的官方GitLab 文档
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文