raf*_*ira 9 continuous-integration gitlab gitlab-ci gitlab-ci-runner
让我详细解释一下我的问题,请不要停止阅读... =)
您好,您必须看一下由命名get-last-successful-build-artifact.sh和开发的脚本morph027。
https://gitlab.com/morph027/gitlab-ci-helpers
该脚本允许下载工件并将其解压缩到项目根目录中。它使用Gitlab API检索成功的最新版本并下载相应的工件。您可以组合多个工件并在任何需要的地方解压缩,只需稍微更新一下脚本即可。
我目前还正在启动一个PHP库来处理构建工件,但是它还处于早期阶段,目前与laravel捆绑在一起。
目前尚无简便的方法来处理项目之间的工件使用,您必须使用该工具构建自己的工具。
我认为使用shell executor不是正确的解决方案,这非常危险,因为您无法验证构建期间使用的服务器上的文件!
希望这个帮助:)
在GitLab silver和premium中,有 $ CI_JOB_TOKEN可用,它允许以下.gitlab-ci.yaml代码片段:
build_submodule:
image: debian
stage: test
script:
- apt update && apt install -y unzip
- curl --location --output artifacts.zip "https://gitlab.example.com/api/v4/projects/1/jobs/artifacts/master/download?job=test&job_token=$CI_JOB_TOKEN"
- unzip artifacts.zip
only:
- tags
Run Code Online (Sandbox Code Playgroud)
但是,如果您没有Silver或更高版本的gitlab订阅,而是依靠免费套餐,则还可以使用API和管道触发器。
假设我们有项目B所需的项目A建筑物。app.jar
首先,您将需要一个API令牌。转到您的设置以创建一个,然后将其存储为项目B中的变量。在我的示例中为GITLAB_API_TOKEN。
在项目B的CI / CD设置中,添加一个新触发器,例如“ Builded A Project”。这将为您提供一个令牌,您可以复制该令牌。打开项目A的.gitlab-ci.yaml,然后trigger_build:从项目B的CI / CD设置触发器部分复制该部分。
项目A:
trigger_build:
stage: deploy
script:
- "curl -X POST -F token=TOKEN -F ref=REF_NAME https://gitlab.example.com/api/v4/projects/${PROJECT_B_ID}/trigger/pipeline"
Run Code Online (Sandbox Code Playgroud)
将TOKEN替换为该令牌(最好将其存储为项目A中的变量-那么您将需要使用它token=${TRIGGER_TOKEN_PROJECT_B}或类似的东西),并将REF_NAME替换为您的分支(例如master)。
然后,在项目B中,我们可以编写一个仅基于触发器并检索工件的部分。
项目B:
download:
stage: deploy
only:
- triggers
script:
- "curl -O --header 'PRIVATE-TOKEN: ${GITLAB_API_TOKEN}' https://gitlab.example.com/api/v4/projects/${PROJECT_A_ID}/jobs/${REMOTE_JOB_ID}/artifacts/${REMOTE_FILENAME}"
Run Code Online (Sandbox Code Playgroud)
如果您知道工件路径,那么可以${REMOTE_FILENAME}用它代替build/app.jar。可以在CI / CD设置中找到项目ID。
我在项目A中扩展了脚本,以传递触发器设置部分中记录的其余信息:
添加
variables[VARIABLE]=VALUE到API请求。变量值可用于区分触发管线和普通管线。
因此,触发器将传递REMOTE_JOB_ID和REMOTE_FILENAME,但是当然您可以根据需要进行修改:
curl -X POST \
-F token=TOKEN \
-F ref=REF_NAME \
-F "variables[REMOTE_FILENAME]=build/app.jar" \
-F "variables[REMOTE_JOB_ID]=${CI_JOB_ID}" \
https://gitlab.example.com/api/v4/projects/${PROJECT_B_ID}/trigger/pipeline
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4828 次 |
| 最近记录: |