如何在 Gitlab 中运行不阻塞后续阶段的作业?

Jan*_*omä 2 gitlab

在一个项目中,我正在运行这些作业的两个阶段:

  • build
    • compile & test
    • generate sonar report
  • deploy
    • deploy to staging environment[手动的]
    • deploy to production[手动的]

该阶段的作业deploy取决于作业的输出compile & test。然而,generate sonar report在我可以开始该阶段的任何工作之前,不需要完成该工作deploy。尽管如此,GitLab 坚持认为该build阶段的所有作业都已完成,然后我才能启动该deploy阶段的任何作业。

有没有办法告诉 GitLab 该generate sonar report作业不应阻塞后续的管道阶段?我已经尝试allow_failure: true过这项工作,但这似乎没有达到预期的效果。这项工作需要很长时间才能完成,我真的不想一直等待才能部署。

Ama*_*osa 5

从我的角度来看,这取决于你的阶段语义。您应该尝试确定流程中最重要的是什么:阶段清晰还是完成工作。

GitLab 有许多方便的功能,例如needs关键字,您可以使用它来指定依赖图上的直接边。

stages:
    - build
    - deploy

build:package:
    stage: build
    script: 
        - echo "compile and test"
        - mkdir -p target && echo "hello" > target/file.txt
    artifacts:
        paths: 
            - ./**/target

build:report:
    stage: build
    script:
        - echo "consume the target artifacts"
        - echo "waiting for 120 seconds to continue"
        - sleep 120
        - mkdir -p target/reports && echo "reporting" > target/reports/report.txt
    artifacts:
        paths: 
            - ./**/target/reports

deploy:
    stage: deploy
    needs: ["build:package"]
    script:
        - echo "deploy your package on remote site"
        - cat target/file.txt

Run Code Online (Sandbox Code Playgroud)

显示构建阶段结束之前执行的部署的管道屏幕截图