GitLab 在 2 个项目之间触发

GitLab triggers between 2 projects

提问人:Connor 提问时间:11/17/2023 更新时间:11/17/2023 访问量:29

问:

我有一个非常具体的方式,我需要我的项目来工作。我有 .bat 文件被提交到项目 A,其中包含一组参数,这些参数需要由项目 B 上的 Python 脚本操作。

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

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

一旦 .bat 文件准备就绪,我尝试简单地使用 power automate 来触发管道,但是由于组织家伙,我无法这样做。我尝试浏览 GitLab wiki,这似乎是可能的,但不清楚我的 .gitlab-ci.yml 是如何在每个项目上构建的,以满足我的特定需求

GitLab-CI 流水线 CICD 多项目

评论

0赞 Connor 11/17/2023
所以我的python脚本可能需要创建一个票证,.bat文件将包含该票证所需的信息。例如,它将包含序列号、时间戳、位置、用户名。它们将分别作为 sys.argv[] 传递到脚本中
0赞 Community 11/20/2023
请提供足够的代码,以便其他人可以更好地理解或重现问题。

答:

0赞 andy meissner 11/17/2023 #1

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

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

1. 将 bat 另存为 project-a 中的管道工件:

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

在 project-b 管道中,您可以检索工件,如下所示:

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

现在,您的 python 脚本可以使用 bat 文件,因为它们已下载到您的 pipelines workdir 中

2. 你可以像这样从 project-a 触发 project-b 管道:

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

如果需要,则使作业等待子管道的结果。strategy: depend

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

通过使用关键字,您必须确保作业以正确的顺序运行stagesneeds