在2个GitLab项目之间共享数据文件(yml)



我有两个GitLab项目(静态站点(,它们需要共享同一个yaml文件。目前yaml文件存在于项目A中,项目B每周左右手动克隆一次。我希望能够有一个不需要手动同步的自动化解决方案。我需要在本地开发和生产中都可以访问这些数据。

一些想法:

  1. 将文件从A托管在GitLab页面上,并将其卷曲到B中
  2. 设置一个访问令牌并使用gitlab api,将其卷曲为B
  3. 说去死吧,建立一个合适的API,为两个转发提供信息

有没有一个我没有考虑的更好的解决方案?你会怎么做?我倾向于选择2。

GitLab中的自动化是管道的同义词。

在项目B的根文件夹中添加一个.gitlab-ci.yml文件,内容如下:

stages:
- synchronize
include:
- local: /.ci/synchronize.yml

在项目根文件夹中创建./。ci/synchronize.yml,包含以下内容:

synchronize-job:
stage: synchronize
image: ubuntu:jammy-20220428 
rules:
- if: $CI_PIPELINE_SOURCE == "schedule" # run job only for a scheduled pipeline
script:
- |
apt-get update # update repo
apt-get install --yes curl git # install tools
- git clone -b main https://gitlab-ci-token:${CI_JOB_TOKEN}@<your_server_domain>/<project A>.git
- cp <project A name>/<your yml file>.yml .
- git remote rm origin && git remote add origin git@<your_server_domain>:<project B path>.git
- git push -u origin main

然后从GitLab GUI创建一个计划管道。根据需要指定一周的间隔时间。

在这个解决方案中,您有:

  • 自动化
  • 无需手动创建auth令牌:GITLAB_CI_token随作业自动创建和销毁
  • 同步

注意:如果在管道中包含其他作业,则由于同步作业的最终推入,它们可能会在无限循环中被触发。只需将这些作业的规则配置为在主分支上有推送时不运行即可。

最新更新