本文介绍: 引入16.0,16.6正式使用CI/CD 组件是可重用的单管道配置单元使用它们来组成整个管道配置或较大管道的一小部分;CI/CD组件可以选择接受输入参数;CI/CD 组件使用 include 关键字添加的其他类型配置类似,但具有以下几个优点:组件可以以特定版本发布使用多个组件可以组合在同一个项目中并使用单个标签发布组件可以在 CI/CD 目录中找到。

参考文档https://docs.gitlab.com/ee/ci/components/

1. 介绍

引入16.0,16.6正式使用

2. 组件存储

3. 创建组件存储

创建一个组件仓库,你必须:

  1. 创建一个项目并且有RADME.md文件

  2. 每个组件添加yaml配置文件,并按照如下目录结构
    ​ 如:

    ```
    spec:
      inputs:
        stage:
          default: test
    ---
    component-job:
      script: echo job 1
      stage: $[[ inputs.stage ]]
    
    ```
    

3.1 目录结构

示例1: 如果项目包含单个组件和用于测试该组件的管道,则文件结构应类似于:

├── templates/
│   └── secret-detection.yml
├── README.md
└── .gitlab-ci.yml

示例组件可以通过类似于以下的路径引用: gitlab.com/my-namespace/my-project/secret-detection@<version&gt;,其中:

引用路径中应排除模板目录配置文件后缀
示例2: 如果项目包含多个组件,则文件结构应类似于:

├── README.md
├── .gitlab-ci.yml
└── templates/
    ├── all-scans.yml
    └── secret-detection.yml

示例组件将通过以下路径引用

示例3: 如果您想将多个相关文件捆绑在一起,您还可以将组件定义为目录。在这种情况下,GitLab 期望存在 template.yml 文件:

├── README.md
├── .gitlab-ci.yml
└── templates/
    └── dast
        ├── docs.md
        ├── Dockerfile
        └── template.yml

在此示例中,可以使用 gitlab.com/my-namespace/my-project/dast@<version> 引用该组件。

4. 发布组件

要为 CI/CD 组件创建版本,请在 CI/CD 管道中使用 release 关键字

例如

create-release:
  stage: deploy
  image: registry.gitlab.com/gitlab-org/release-cli:latest
  rules:
    - if: $CI_COMMIT_TAG =~ /^vd+/
  script: echo "Creating release $CI_COMMIT_TAG"
  release:
    tag_name: $CI_COMMIT_TAG
    description: "Release $CI_COMMIT_TAG of components repository $CI_PROJECT_PATH"

在此示例中,作业针对格式v + 版本号的标签运行。如果之前的所有作业均成功,则将创建版本

与组件测试示例一样,您可以将组件设置为在新标签的所有测试通过管道后自动发布。

组件存储库的所有已发布版本显示在 CI/CD 目录中,为用户提供有关正式版本信息

通过使用提交 SHA 或引用,组件可以在不被释放的情况下使用。但是,~latest version 关键字只能与已发布的标签一起使用。

~latest 关键字始终返回最新版本,而不是具有最新语义版本的版本。例如,如果您首先发布 v2.0.0,然后发布 v1.5.1 等补丁修复,则 ~latest 将返回 v1.5.1 版本。

5. 在 CI/CD 配置中使用组件

你可以使用 include: component 关键字将组件添加到 CI/CD 配置中。例如

include:
  - component: gitlab.example.com/my-namespace/my-project@1.0
    inputs:
      stage: build

该组件由唯一地址标识格式为 /@,其中:

例如,对于位于 gitlab.com 上的 gitlaborg/dast 的组件存储库,路径

5.1 避免使用全局关键字

避免在组件中使用全局关键字。在组件中使用这些关键字会影响管道中的所有作业,包括直接在主 .gitlab-ci.yml 或其他包含的组件中定义的作业

作为全局关键字的替代方案,可以:

例如,不建议使用default关键字:

# Not recommended
default:
  image: ruby:3.0

rspec-1:
  script: bundle exec rspec dir1/

rspec-2:
  script: bundle exec rspec dir2/

相反,你可以:

rspec-1:
  image: ruby:3.0
  script: bundle exec rspec dir1/

rspec-2:
  image: ruby:3.0
  script: bundle exec rspec dir2/

  • 使用extend来重用配置:
.rspec-image:
  image: ruby:3.0

rspec-1:
  extends:
    - .rspec-image
  script: bundle exec rspec dir1/

rspec-2:
  extends:
    - .rspec-image
  script: bundle exec rspec dir2/

5.2 用输入替换编码

避免在 CI/CD 组件中硬编码值。硬编码值可能会迫使组件用户需要检查组件的内部细节并调整其管道以与组件配合使用。

stage 是具有有问题的硬编码值的常见关键字。如果组件作业阶段设置为特定值,则使用该组件的管道必须定义完全相同的阶段。此外,如果组件用户想要使用不同的阶段,他们必须覆盖配置。

首选方法是使用输入关键字。组件用户可以指定他们需要的确切值。

例如:

  • 在组件配置中:
spec:
  inputs:
    stage:
      default: test
---
unit-test:
  stage: $[[ inputs.stage ]]
  script: echo unit tests

integration-test:
  stage: $[[ inputs.stage ]]
  script: echo integration tests

  • 在项目中使用该组件:
include:
  - component: gitlab.com/gitlab-org/ruby-test@1.0
    inputs:
      stage: verify

stages: [verify, deploy]

5.3 用输入替换自定义 CI/CD 变量

在组件中使用 CI/CD 变量时,请评估是否应改用 input 关键字。避免要求用户定义自定义变量更改组件的行为。您应该尝试使用输入进行任何组件自定义.

输入在组件的规范中明确定义,并且比变量得到更好验证。例如,如果所需的输入未传递给组件,GitLab 将返回管道错误。相反,如果变量未定义,则其值为空,并且不会出现错误

例如,使用输入而不是变量来让用户更改扫描仪的输出格式

  • 在组件配置中:
spec:
  inputs:
    scanner-output:
      default: json
---
my-scanner:
  script: my-scan --output $[[ inputs.scanner-output ]]
  • 在项目中使用该组件:
include:
  - component: gitlab.example.com/my-scanner@1.0
    inputs:
      scanner-output: yaml

在其他情况下,CI/CD 变量仍然是首选,包括:

6. 将 CI/CD 模板转换为组件

通过使用 include: 语法在项目中使用的任何现有 CI/CD 模板都可以转换为 CI/CD 组件:

  1. 决定是否希望该组件成为现有组件存储库的一部分并与其他组件分组,或者创建并设置新的组件存储库。
  2. 根据预期的目录结构在组件存储库中创建 YAML 文件。
  3. 将原始模板 YAML 文件的内容复制到新组件 YAML 文件中。
  4. 将新组件的配置重构为:
    • 遵循组件的最佳实践。
    • 改进配置,例如启用合并请求管道或提高其效率。
  5. 利用组件存储库中的 .gitlab-ci.yml 来测试对组件的更改
  6. 标记并释放组件。

原文地址:https://blog.csdn.net/weixin_44729138/article/details/134739654

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_24104.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注