在GitLab配置项中使用合并请求作业中的项目 [英] Use artifacts from merge request job in GitLab CI
本文介绍了在GitLab配置项中使用合并请求作业中的项目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在我的项目中,我使用合并请求来测试构建,并在将提交合并到MASTER之后进行部署。当前我的.gitlab-ci.yml
看起来像:
build:
stage: build
script:
- yarn build
artifacts:
paths:
- public
deploy:
stage: deploy
script: yarn deploy
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
这种方式只提交将构建成功合并到主版本并进行部署。但是,构建阶段运行两次,一次在合并请求分支中,一次在主分支中。我想要这样的东西:
build:
stage: build
script:
- yarn build
artifacts:
paths:
- public
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
deploy:
stage: deploy
script: yarn deploy
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
但是部署作业应该能够将build
作业生成的工件拉到合并请求分支中。有可能吗?
推荐答案
检查CI_MERGE_REQUEST_REF_PATH
变量是否可用。
如果是这样的话,也许您可以将其与GET /projects/:id/jobs/artifacts/:ref_name/download?job=name
API调用一起使用,以便在合并请求的最近一次成功管道中下载您想要的作业的项目。
如下所示:
rules:
- if: ${CI_PIPELINE_SOURCE} == "merge_request_event"
script:
# Download the binaries from the most recent successful pipeline for the CI_MERGE_REQUEST_REF_PATH
# See: https://docs.gitlab.com/ee/api/job_artifacts.html#download-the-artifacts-archive
- echo Downloading ${CI_API_V4_URL}/projects/$(echo ${CI_PROJECT_PATH} | sed "s///%2F/g")/jobs/artifacts/$(echo ${CI_MERGE_REQUEST_REF_PATH} | sed "s///%2F/g")/download?job=build
# Because of the ':' in the header, the whole curl command must be inside single-quotes
- 'curl
--header "JOB-TOKEN: ${CI_JOB_TOKEN}"
--output ${CI_PROJECT_DIR}/artifacts.zip
${CI_API_V4_URL}/projects/$(echo ${CI_PROJECT_PATH} | sed "s///%2F/g")/jobs/artifacts/$(echo ${CI_MERGE_REQUEST_REF_PATH} | sed "s///%2F/g")/download?job=build'
# extract desired artifacts from the zip file.
- unzip
-o
-d ${CI_BUILDS_DIR}/${CI_PROJECT_NAMESPACE}
${CI_PROJECT_DIR}/artifacts.zip
'directory/subDirectory/*'
请注意,CI_PROJECT_PATH和CI_MERGE_REQUEST_REF_PATH通常都包含/
个字符。我使用sed
将它们更改为URL编码的%2F
。
这篇关于在GitLab配置项中使用合并请求作业中的项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文