首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取子项目中的gitlab父项目详细信息

获取子项目中的gitlab父项目详细信息
EN

Stack Overflow用户
提问于 2020-10-08 15:28:36
回答 2查看 1.6K关注 0票数 0

我正在使用以下两个gitlab存储库

  1. 例如,家长Gitlab回购应用程序代码-角应用程序
  2. 子Gitlab repo - For Gitlab管道,只有gitlab-ci.yml文件,其中包含要运行管道的脚本

我使用以下步骤调用管道/子项目gitlab-ci.yml文件格式父程序

父Gitlab repo - gitlab-ci.yml文件

代码语言:javascript
复制
  include:
  - project: 'my-group/child-project'
    ref: master
    file: '/templates/.gitlab-ci-template.yml'

子项目- gitlab-ci.yml文件

代码语言:javascript
复制
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和分支名称等父-回购的详细信息?

一种方法是在父项目中定义变量并在子项目中使用,但是有其他方法可以直接访问子项目中的父项目细节吗?

EN

回答 2

Stack Overflow用户

发布于 2021-06-28 18:48:05

在您的示例中,includetrigger不一样。Include只是将所有文件合并到一个巨大的管道中,这样只要变量的作用域是正确的,您就应该能够从包含的文件中访问任何您想要的变量。

如果您实际上希望从父管道将详细信息传递给子管道,您可以添加一个作业,将您想要的变量和详细信息导出到dotenv,然后让子管道访问dotenv。这将允许代码在变量的硬编码内部是动态的,并直接将它们传递给子管道。

代码语言:javascript
复制
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

然后,在子作业中,您应该能够从父作业访问父工件。

代码语言:javascript
复制
child-job:
    needs:
        - pipeline: $PARENT_PIPELINE_ID
          job: export-parent-details
    script:  
        - echo $PARENT_PROJECT_NAME    

看见

另一种选择可能是对获取父项目的详细信息进行API调用,因为运行程序在$CI_JOB_TOKEN下具有只读令牌,此方法依赖于回购访问权限和所需的详细信息。

代码语言:javascript
复制
curl -H "JOB_TOKEN: $CI_JOB_TOKEN" "https://gitlab.com/api/v4/{whatever the api call is}"
票数 1
EN

Stack Overflow用户

发布于 2021-03-10 04:42:22

由于您是including子项目的配置,而不是triggering它,因此两个管道定义文件在管道启动之前被合并并成为一个,所以这个方法和父项目的子项目定义的内容没有实际区别。

因此,如果管道在那里运行,那么所有的预定义变量都将基于父项目。例如,像$CI_COMMIT_REF_NAME$CI_PROJECT_NAME这样的变量将指向父项目和父项目的分支。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64265805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档