我正在使用以下两个gitlab存储库
我使用以下步骤调用管道/子项目gitlab-ci.yml文件格式父程序
父Gitlab repo - gitlab-ci.yml文件
include:
- project: 'my-group/child-project'
ref: master
file: '/templates/.gitlab-ci-template.yml'子项目- gitlab-ci.yml文件
stages:
- test
- build
before_script:
- export PARENT_PROJECT_NAME = ?
- export PARENT_PROJECT_PIPELINE_ID = ?
- export PARENT_PROJECT_BRANCH_NAME = ?
job 1:
stage: test
script:
- echo "Runnig test for project ${PARENT_PROJECT_NAME}"
- node_modules/.bin/ng test
release_job:
stage: build
script: node_modules/.bin/ng build --prod
artifacts:
name: "project-$CI_COMMIT_REF_NAME"
paths:
- dist/
only:
- tags如何获得运行管道的子项目中的父项目名称、管道id和分支名称等父-回购的详细信息?
一种方法是在父项目中定义变量并在子项目中使用,但是有其他方法可以直接访问子项目中的父项目细节吗?
发布于 2021-06-28 18:48:05
在您的示例中,include与trigger不一样。Include只是将所有文件合并到一个巨大的管道中,这样只要变量的作用域是正确的,您就应该能够从包含的文件中访问任何您想要的变量。
如果您实际上希望从父管道将详细信息传递给子管道,您可以添加一个作业,将您想要的变量和详细信息导出到dotenv,然后让子管道访问dotenv。这将允许代码在变量的硬编码内部是动态的,并直接将它们传递给子管道。
export-parent-details:
script:
- echo "PARENT_PROJECT_NAME=?" >> build.env
- echo "PARENT_PROJECT_PIPELINE_ID=?" >> build.env
- echo "PARENT_PROJECT_BRANCH_NAME=?" >> build.env
artifacts:
reports:
dotenv: build.env
trigger-child:
stage: docker_hub
trigger:
include:
- project: 'my-group/child-project'
ref: master
file: '/templates/.gitlab-ci-template.yml'
# use this variable in child pipeline to download artifacts from parent pipeline
variables:
PARENT_PIPELINE_ID: $CI_PIPELINE_ID然后,在子作业中,您应该能够从父作业访问父工件。
child-job:
needs:
- pipeline: $PARENT_PIPELINE_ID
job: export-parent-details
script:
- echo $PARENT_PROJECT_NAME 看见
另一种选择可能是对获取父项目的详细信息进行API调用,因为运行程序在$CI_JOB_TOKEN下具有只读令牌,此方法依赖于回购访问权限和所需的详细信息。
curl -H "JOB_TOKEN: $CI_JOB_TOKEN" "https://gitlab.com/api/v4/{whatever the api call is}"发布于 2021-03-10 04:42:22
由于您是including子项目的配置,而不是triggering它,因此两个管道定义文件在管道启动之前被合并并成为一个,所以这个方法和父项目的子项目定义的内容没有实际区别。
因此,如果管道在那里运行,那么所有的预定义变量都将基于父项目。例如,像$CI_COMMIT_REF_NAME、$CI_PROJECT_NAME这样的变量将指向父项目和父项目的分支。
https://stackoverflow.com/questions/64265805
复制相似问题