从 Jenkins Ci 服务迁移到 gitlab-ci.yml

Posted

技术标签:

【中文标题】从 Jenkins Ci 服务迁移到 gitlab-ci.yml【英文标题】:Migrating from Jenkins Ci Service to gitlab-ci.yml 【发布时间】:2020-09-30 03:45:08 【问题描述】:

到目前为止,我们一直在使用 Jenkins 在任何基于 Jenkins CI service 的功能分支上运行我们的构建。我们目前正在试验基于 gitlab-ci.yml 的管道。 作为起点,我想将此限制为仅由少数开发人员创建的特定分支作为 beta 测试。

我试图避免将 .gitlab-ci.yml 从功能分支合并到基于 .gitattributes 和合并策略的发布分支(请参阅here),但这迫使我在发布分支。结果 gitlab 强迫我有一些有效的 yml 内容(我希望我至少可以保持它为空)否则我会得到无效的 yml 失败。

关于将 .gitlab-ci.yml 仅保留在功能分支上并避免手动步骤以避免合并 .gitlab-ci.yml 文件的任何建议,直到我们将其用于所有分支?

类似问题:https://forum.gitlab.com/t/how-to-ignore-gitlab-ci-yml-file-when-merging-the-branches/17948GitLab merge behavior - keep file from branch

【问题讨论】:

你可以合并它,但使用except: - branch-name排除发布分支 这是一个简单的解决方案,可能会奏效,按照你的引导,我正在阅读规则 docs.gitlab.com/ee/ci/yaml/#rules(我使用的是 12.3 版)也许这会更好 【参考方案1】:

在Bertrand 响应之后,只要管道仅在选定的合并请求上执行,我实际上并不关心在发布分支中有.gitlab-ci.yml。我更改了我的.gitlab-ci.yml 以包含一条规则。 根据下面的逻辑,管道将仅在合并请求时执行,分支名称格式为 FTR-ddddd-g

image: maven-mta:latest
variables:
  GIT_DEPTH: 0
Unit tests and Sonar Check:
 script:
    - mvn clean verify sonar:sonar
  artifacts:
    reports:
      junit:
        - "*/target/surefire-reports/TEST-*.xml"
  allow_failure: false
  rules:
    - if: '$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME =~ /^FTR-\d+-gl/ && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "master"'
      when: always
  tags:
  - sonarqube
  - docker

在满足上述标准的合并请求上,我得到了一个意想不到的副作用(我实际上很喜欢 Jenkins CI 服务未运行)。 不幸的是,我没有找到任何支持这种行为的文档,以下page 建议在使用 gitlab ci 时禁用 Jenkins CI。

【讨论】:

【参考方案2】:

“作为一个起点,我想只针对特定的 分支”

你可以使用唯一的标签。

  only:
    - feature-*

【讨论】:

以上是关于从 Jenkins Ci 服务迁移到 gitlab-ci.yml的主要内容,如果未能解决你的问题,请参考以下文章

[ci] 构建触发器,实现当gitlab有push动作时候,jenkins自动拉代码.

gitlab CI + jenkins 实践

devops学习笔记-jenkins实现基础CI/CD操作

Jenkins + Gitlab + harbor + Kubernetes实现CI/CD

Jenkins + Gitlab + harbor + Kubernetes实现CI/CD

Linux云计算 --中国三大电商大厂都在使用的《 GitLab与Jenkins结合构建持续集成(CI)环境》是如何排列