Ham*_*eza 5 continuous-integration gitlab gitlab-ci gitlab-ci-runner
我想向其余 API 发送有关部署状态的报告。
它应该独立于部署作业(因为 $IMAGE2 依赖性),因为我想在其他项目中使用报告作业。所以我在 Gitlab CI 中创建了两个作业,如下所示:
deploy:
stage: deploy
image: $IMAGE1
script:
- cd ${CI_PROJECT_DIR} && echo 'Failed' > deployment-status
# some codes to deploy and exit 1 if not successful
- cd ${CI_PROJECT_DIR} && echo 'Passed' > deployment-status #This line run only when deployment is successful
when: manual
artifacts:
when: always
paths:
- deployment-status
report-deployment:
stage: post-deploy
image: $IMAGE2
script:
- cd ${CI_PROJECT_DIR} && cat deployment-status
# some codes to report the status of deployment to an API
when: always
needs: ["deploy"]
Run Code Online (Sandbox Code Playgroud)
在上面的解决方案中,根据部署,我填写deployment-status“通过/失败”,并deployment-status在下一个作业中使用工件文件来获取有关部署状态的信息并报告它。
上面的解决方案有一些问题:
- 管道状态将是running,除非我触发手动作业。(因为report-deployment工作需要deploy)
- 如果我尝试触发该deploy工作两次,则只有一份报告被发送到 API。
问题的形象
小智 1
更新:我刚刚意识到他是一篇旧帖子,但这个解决方案可能对其他人仍然有帮助。
根据我对管道的理解,作业完成后不可能再次自动触发。
我们遇到了类似的问题,我们通过使用gitlab job API解决了这个问题:
您可以做的是创建一个调用Play a Job端点的脚本。该脚本应在部署作业的after_script中调用,因此仅在部署完成后才会触发。
您还必须将报告部署作业设置为手动执行。
deploy:
stage: deploy
image: $IMAGE1
script:
- cd ${CI_PROJECT_DIR} && echo 'Failed' > deployment-status
# some codes to deploy and exit 1 if not successful
- cd ${CI_PROJECT_DIR} && echo 'Passed' > deployment-status
after_script:
- <path_to_report_deployment_script>
when: manual
artifacts:
when: always
paths:
- deployment-status
report-deployment:
stage: post-deploy
image: $IMAGE2
script:
- cd ${CI_PROJECT_DIR} && cat deployment-status
when: manual # changed to manual
needs: ["deploy"]
Run Code Online (Sandbox Code Playgroud)
调用report_deployment作业的脚本仅需要项目id和管道id,您可以从CI_PROJECT_ID和CI_PIPELINE_ID环境变量中获取它们。这允许您通过 API列出管道作业。
迭代作业列表,直到找到报告部署作业并保存作业 ID。使用项目 ID 和作业 ID,您现在可以触发Play a Job API 调用。
如果你想摆脱工件的创建,你可以尝试一下。虽然 API 不允许您将变量传递给作业,但可能有一种解决方法。我可以想象report_successful_deployment和report_failed_deployment作业,然后让脚本决定应该触发哪一个。
| 归档时间: |
|
| 查看次数: |
530 次 |
| 最近记录: |