GitLab 在 2 个项目之间触发

问题描述 投票:0回答:1

我有一个非常具体的方式来让我的项目发挥作用。我将 .bat 文件提交给项目 A,其中包含需要由项目 B 上的 Python 脚本执行操作的参数集合。

我需要在提交新文件时触发项目 A,然后触发项目 B 使用 .bat 文件中的变量运行脚本 (sys.argv[1] - [4]

一旦项目 B 被触发,我希望删除项目 A 中的文件,以便当下一个文件提交到项目 A 时,不会有任何冲突的文件,因为一天内最多可能提交 100 个.bat 文件

我尝试过在 .bat 文件准备好后简单地使用自动电源来触发管道,但由于组织人员的原因,我无法这样做。我尝试过浏览 GitLab wiki,这似乎是可能的,但目前尚不清楚我的 .gitlab-ci.yml 是如何在每个项目上构建以满足我的特定需求的

gitlab gitlab-ci pipeline cicd multi-project
1个回答
0
投票

对我来说,并不完全清楚 bat 和 python 脚本应该如何交互以及变量应该如何定义。

但通常您可以使用下游管道,在其中从父管道的工件中检索 .bat 文件,作业完成后,您可以从存储库中删除 bat 文件。

1。将bat保存为project-a中的管道工件:

build_artifacts:
  stage: build
  artifacts:
    paths:
      - bat1.bat
      - bat2.bat
      - bat2.bat

在项目-b 管道中,您可以像这样检索工件:

test:
  stage: test
  script:
    - python myscript.py -input bat1.bat
  needs:
    - pipeline: $PARENT_PIPELINE_ID
      job: build_artifacts

现在您的 python 脚本可以使用 bat 文件,因为它们是在您的管道工作目录中下载的

2。您可以从项目 a 触发项目 b 管道,如下所示:

trigger_job:
  trigger:
    project: project-group/project-b
  strategy: depend

如果您想要的话,

strategy: depend
会让作业等待子管道的结果。

最后,您可以定义一个作业来删除 *bat 文件,但您需要创建一个令牌才能使用 Gitlab API,因为“CI_JOB_TOKEN”无权修改存储库。

通过使用

stages
needs
关键字,您必须确保作业以正确的顺序运行

© www.soinside.com 2019 - 2024. All rights reserved.