当依赖于以前的手动作业时,GitLab-CI 作业失败

cid*_*cid 6 continuous-integration gitlab gitlab-ci

情况

考虑以下.gitlab-ci.yml示例:

build:
    stage: build
    script: echo "Building..."

build-doc:
    stage: build
    when: manual
    script: 
        - echo "Building doc..."
        - echo "build result" > output.txt
    artifacts:
        name: "%CI_BUILD_NAME%_%CI_BUILD_ID%"
        expire_in: 1 week
        paths:
            - "output.txt"

deploy-doc:
    stage: deploy
    only:
        - master
    dependencies:
        - build-doc
    script: 
        - echo "Deploying doc..."
        - type output.txt
Run Code Online (Sandbox Code Playgroud)

结果

这个管道在master分支上的结果是:

gitlab-ci-result

deploy-doc作业日志说:

$ echo "Deploying doc..."
"Deploying doc..."
$ type output.txt
The system cannot find the file specified.
ERROR: Build failed: exit status 1
Run Code Online (Sandbox Code Playgroud)

结论

即使deploy-doc明确依赖于手动build-doc作业工件,build-doc也不会触发导致deploy-doc作业失败。

如何正确实现此行为?也就是说,当自动作业依赖于他时会触发手动作业?

语境

我只想在分支上自动构建部署文档master,其他分支只能手动构建文档来下载生成的文档。

解决方案

除了已接受的答案,请参阅下面我自己的答案。

Jak*_*nia 5

最简单的方法是使用触发器。将deploy-doc工作定义为:

only:
  - triggers
Run Code Online (Sandbox Code Playgroud)

使用 yaml 锚点做两份build-doc声明为

only:
  - master
Run Code Online (Sandbox Code Playgroud)

另一个作为

when:
  - manual
Run Code Online (Sandbox Code Playgroud)

build-doc呼叫触发何时结束。这将重建整个管道,因此您可以将build作业定义为

except:
  - triggers
Run Code Online (Sandbox Code Playgroud)

或者使用$CI_JOB_MANUAL变量并且deploy-doc只在 master 和 triggers 上运行,所以至少在 master 上它不会重建所有东西。