我有两个GitLab项目(静态站点(,它们需要共享同一个yaml文件。目前yaml文件存在于项目A中,项目B每周左右手动克隆一次。我希望能够有一个不需要手动同步的自动化解决方案。我需要在本地开发和生产中都可以访问这些数据。
一些想法:
- 将文件从A托管在GitLab页面上,并将其卷曲到B中
- 设置一个访问令牌并使用gitlab api,将其卷曲为B
- 说去死吧,建立一个合适的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随作业自动创建和销毁
- 同步
注意:如果在管道中包含其他作业,则由于同步作业的最终推入,它们可能会在无限循环中被触发。只需将这些作业的规则配置为在主分支上有推送时不运行即可。