gpt4 book ai didi

jenkins - 在项目之间共享 gitlab-ci.yml

转载 作者:行者123 更新时间:2023-12-04 13:06:49 25 4
gpt4 key购买 nike

我们正在考虑将我们的 ci 从 jenkins 转移到 gitlab。我们有几个具有相同构建工作流程的项目。现在我们使用一个定义了管道的共享库,项目中的 jenkinsfile 只调用定义实际管道的共享库中定义的方法。因此,只需在影响多个项目的单个点上进行更改。

我想知道 gitlab ci 是否也可以这样做?据我所知,不可能在存储库之外定义 gitlab-ci.yml。是否有另一种方法来定义管道并与多个项目共享此配置以简化维护?

最佳答案

首先让我先说:谢谢你提出这个问题!在我自己经常想知道这是否可行之后,它促使我(再次)寻找解决方案。我们也有 20 - 30 个完全相同的项目,并且有 .gitlab-ci.yml大约 400 - 500 loc 的文件,如果一件事发生变化,每个文件都必须更改。

所以我找到了一个可行的解决方案:

灵感来自 Auto DevOps .gitlab-ci.yml template Gitlab 本身创建,并且他们使用一个模板作业到 define all functions usedcallbefore_script为了加载它们,我想出了以下设置。

  • 多个项目存储库( project-1project-2 )需要一组共享的 CI 作业/功能
  • Functions script在单独的 repo 中包含所有共享函数

  • 文件

    所以使用 shared 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 :
    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多个项目)应用上述构建之后,我想分享一些经验教训,这样您就不必费力地找出方法:
  • 版本(标记/发布)您共享的 ci 函数脚本。改变一件事现在可以使所有管道失败。
  • 使用不同的 Docker 镜像可能会导致 bash 加载函数的要求出现问题(例如,我将一些基于 Alpine 的镜像用于基于 CLI 工具的作业,默认情况下具有 sh)
  • 使用基于项目的 CI/CD secret 变量来个性化项目的构建作业。如环境 URL 等
  • 关于jenkins - 在项目之间共享 gitlab-ci.yml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47790403/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com