我们正在考虑将ci从jenkins迁移到gitlab。我们有几个项目具有相同的构建工作流程。现在,我们使用一个定义了管道的共享库,而项目内部的jenkinsfile仅调用在共享库中定义的定义实际管道的方法。因此,仅需在单个点上进行更改即可影响多个项目。
我想知道gitlab ci是否也可以做到?据我发现,无法在存储库外部定义gitlab- ci.yml。还有另一种定义管道并与几个项目共享此配置以简化维护的方法吗?
首先让我开始说:谢谢您提出这个问题!在经常想知道自己是否有可能之后,它再次激发了我寻找解决方案的机会。我们也有20-30个项目,它们完全相同,并且包含.gitlab- ci.yml大约400-500个loc文件,如果一件事情发生变化,则每个文件都必须更改。
.gitlab- ci.yml
所以我找到了一个可行的解决方案:
受Gitlab自身创建的Auto DevOps .gitlab-ci.yml模板的启发,它们在其中使用一个模板作业来定义所使用的所有函数并调用每个函数before_script来加载它们,我提出了以下设置。
before_script
档案
因此,使用共享的ci jobs scipt:
#!/bin/bash function list_files { ls -lah } function current_job_info { echo "Running job $CI_JOB_ID on runner $CI_RUNNER_ID ($CI_RUNNER_DESCRIPTION) for pipeline $CI_PIPELINE_ID" }
通用和通用.gitlab-ci.yml:
.gitlab-ci.yml
image: ubuntu:latest before_script: # Install curl - apt-get update -qqq && apt-get install -qqqy curl # Get shared functions script - curl -s -o functions.sh https://gitlab.com/giix/demo-shared-ci-functions/raw/master/functions.sh # Set permissions - chmod +x functions.sh # Run script and load functions - . ./functions.sh job1: script: - current_job_info - list_files
您可以将文件从project-1复制粘贴到project-2,并且使用相同的共享Gitlab CI函数。
这些示例出于示例目的而非常冗长,可以按照自己喜欢的任何方式对其进行优化。
得到教训
因此,在将上述构造大规模应用(超过40个项目)之后,我想分享一些经验教训,因此您不必找出困难的方法:
sh