Gitlab跨项目神器
Gitlab cross-project artifact
我有 2 个独立的 gitlab 项目,我已经查看了 2 天的文档,但仍在努力实现我的目标。
我有项目 A,它为整个项目生成文档。
项目 B 是一个 Gitlab Pages 项目。
我的项目 A 的 gitlab-ci.yml
文件有这样的工作
build_docs:
stage: deploy
artifacts:
# Create Archive with name of [Current Job - Current Tag]
name: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
paths:
- documentation/build/dokka/
script:
- ./gradlew assemble
- ls $CI_PROJECT_DIR/documentation/build
- echo "Job Name = $CI_JOB_NAME"
- echo "Project Dir = $CI_PROJECT_DIR"
- echo "Docs trigger key = $DOCS_TRIGGER_KEY"
- echo "Test Unprotected Unmasked Trigger = $TEST_TRIGGER"
- echo "Job Token = $CI_JOB_TOKEN"
- echo "Job ID= $CI_JOB_ID"
- echo "Triggering [Documentation Pipeline]; Artifact from ACL -> Documentation"
- "curl -X POST -F token=${CI_JOB_TOKEN} -F ref=master https://gitlab.duethealth.com/api/v4/projects/538/trigger/pipeline"
此作业触发项目 B 中的以下作业:
get-artifacts:
stage: get-artifacts
script:
- echo "I have been triggered!!"
- echo "$CI_JOB_TOKEN"
- echo "$CI_JOB_NAME"
- echo "$CI_PROJECT_DIR"
- ls $CI_PROJECT_DIR
# List artifacts generated from acl project
- 'curl --globoff --header "PRIVATE-TOKEN: abc1234" "https://gitlab.duethealth.com/api/v4/projects/492/jobs"'
# This should take artifacts from ACL and output them into --output filename
- 'curl --location --output artifacts.zip --header "JOB-TOKEN: $CI_JOB_TOKEN" "https://gitlab.duethealth.com/api/v4/android-projects/492/jobs/63426/artifacts"'
# - unzip build_docs-feature-inf-297-upload-kdoc-doc-mod-test.zip
- ls $CI_PROJECT_DIR
- file $CI_PROJECT_DIR/artifacts.zip
- ls
only:
variables:
- $CI_PIPELINE_SOURCE == "pipeline"
tags:
- pages
现在,在项目 A 的作业日志中。工件已成功上传,我看到大小为 ~50000
在项目 B 的日志中,之后
# List artifacts generated from acl project
我确实看到了 zip 文件神器
但是,我的 GET 作业工件的 curl 请求似乎以某种方式不正确。如果你看下面的图片,你可以看到两件事。
1.) 请求大小比上传小很多。所以我们上传大小为 ~50000 的工件,但随后我们下载大小为 ~1000
的相同工件
2.) 应输出工件的 zip
文件不是 zip
文件,即使它具有 .zip
文件扩展名。
在我看来,它从来没有真正获取工件,而只是创建了一些名为 artifacts.zip
的对象,它甚至不是 zip
文件,我假设文件大小是我' m看到的只是空的大小artifacts.zip
.
如有任何见解,我们将不胜感激。
我的问题出在 URL,使用正确的 URL 后问题就解决了。
我有 2 个独立的 gitlab 项目,我已经查看了 2 天的文档,但仍在努力实现我的目标。
我有项目 A,它为整个项目生成文档。
项目 B 是一个 Gitlab Pages 项目。
我的项目 A 的 gitlab-ci.yml
文件有这样的工作
build_docs:
stage: deploy
artifacts:
# Create Archive with name of [Current Job - Current Tag]
name: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
paths:
- documentation/build/dokka/
script:
- ./gradlew assemble
- ls $CI_PROJECT_DIR/documentation/build
- echo "Job Name = $CI_JOB_NAME"
- echo "Project Dir = $CI_PROJECT_DIR"
- echo "Docs trigger key = $DOCS_TRIGGER_KEY"
- echo "Test Unprotected Unmasked Trigger = $TEST_TRIGGER"
- echo "Job Token = $CI_JOB_TOKEN"
- echo "Job ID= $CI_JOB_ID"
- echo "Triggering [Documentation Pipeline]; Artifact from ACL -> Documentation"
- "curl -X POST -F token=${CI_JOB_TOKEN} -F ref=master https://gitlab.duethealth.com/api/v4/projects/538/trigger/pipeline"
此作业触发项目 B 中的以下作业:
get-artifacts:
stage: get-artifacts
script:
- echo "I have been triggered!!"
- echo "$CI_JOB_TOKEN"
- echo "$CI_JOB_NAME"
- echo "$CI_PROJECT_DIR"
- ls $CI_PROJECT_DIR
# List artifacts generated from acl project
- 'curl --globoff --header "PRIVATE-TOKEN: abc1234" "https://gitlab.duethealth.com/api/v4/projects/492/jobs"'
# This should take artifacts from ACL and output them into --output filename
- 'curl --location --output artifacts.zip --header "JOB-TOKEN: $CI_JOB_TOKEN" "https://gitlab.duethealth.com/api/v4/android-projects/492/jobs/63426/artifacts"'
# - unzip build_docs-feature-inf-297-upload-kdoc-doc-mod-test.zip
- ls $CI_PROJECT_DIR
- file $CI_PROJECT_DIR/artifacts.zip
- ls
only:
variables:
- $CI_PIPELINE_SOURCE == "pipeline"
tags:
- pages
现在,在项目 A 的作业日志中。工件已成功上传,我看到大小为 ~50000
在项目 B 的日志中,之后
# List artifacts generated from acl project
我确实看到了 zip 文件神器
但是,我的 GET 作业工件的 curl 请求似乎以某种方式不正确。如果你看下面的图片,你可以看到两件事。
1.) 请求大小比上传小很多。所以我们上传大小为 ~50000 的工件,但随后我们下载大小为 ~1000
的相同工件2.) 应输出工件的 zip
文件不是 zip
文件,即使它具有 .zip
文件扩展名。
在我看来,它从来没有真正获取工件,而只是创建了一些名为 artifacts.zip
的对象,它甚至不是 zip
文件,我假设文件大小是我' m看到的只是空的大小artifacts.zip
.
如有任何见解,我们将不胜感激。
我的问题出在 URL,使用正确的 URL 后问题就解决了。