Gitlab CI/CD 不会运行我的部署阶段

Posted

技术标签:

【中文标题】Gitlab CI/CD 不会运行我的部署阶段【英文标题】:Gitlab CI/CD will not run my deploy stage 【发布时间】:2021-11-30 09:23:05 【问题描述】:

Gitlab CI/CD 新手。我的构建工作运行良好,但部署工作从未执行。我删除了所有规则,但它仍然没有运行。

这是我的 .gitlab-ci.yml 文件的内容:

build-job:
  stage: build
  script:
    - echo "STAGE - BUILD"
    - echo $CI_JOB_STAGE
    - echo $CI_COMMIT_MESSAGE
    - echo $CI_COMMIT_BRANCH
    - echo $CI_ENVIRONMENT_NAME
    - mkdir bin
    - mkdir obj
    - "dotnet build"


deploy-to-staging:
  stage: deploy
  script:
    - echo "STAGE - DEPLOY (STAGING)"

知道为什么 Gitlab 会跳过部署阶段吗?我必须明确定义我的阶段吗?我试过了,但没有任何区别(这些行在 yml 文件的底部有一段时间):

stages:
  - build
  - deploy

【问题讨论】:

阶段应该在顶部。你通过 CI linter 运行它了吗?构建工作通过了吗? 感谢您的评论。非常感谢......是的,构建阶段总是成功,但之后就停止了。我的 yaml 文件确实通过了 linter。奇怪的是,当我将阶段部分放在文件顶部时,管道失败并显示 yaml invalid 消息。根据文档,如果缺少阶段部分,它将使用默认阶段(.pre、构建、测试、部署、.post)......我想知道我是否必须测试一些东西才能执行部署。 我刚刚为阶段测试添加了一个测试作业,其脚本只是将文本回显到输出。现在所有三个阶段都运行了。我不知道您必须为定义的每个工作提供工作......在我的情况下,由于我没有定义阶段,因此我必须为每个默认阶段提供工作(.pre 和 .post 除外) 解决方法是在顶部定义阶段。如果 linter 抱怨,请仔细检查间距等。您还可以访问 CI linter 本身,以便在运行管道之前检查它是否有效 【参考方案1】:

虽然stages documentation 中没有明确说明,但您通常应该将它们设置在顶部。

如果您遇到 yaml invalid 失败,请使用 CI lint tool 仔细检查您的间距等,而无需运行管道。

请记住:

    如果作业失败,它不会开始下一个阶段。 如果您不定义阶段,则它使用构建、测试、部署。 任何未定义阶段的作业都假定为test。 应该简单地隐藏任何未使用的阶段。但是,确切的行为可能取决于您使用的 GitLab 版本。 (如果内存服务正确,这已更改,但我不能立即合并请求。)

【讨论】:

有趣的是...如果我在文件顶部设置阶段,lint 会成功,但是当我签入代码时,管道会失败并出现 lint 错误。我必须评论要执行的管道的阶段部分。另外,我必须为每个阶段提供一个作业,否则只有构建阶段执行。我已经验证了 stage 部分周围的文件中没有多余的空格。事实上,我将阶段部分移动到文件的底部,并且 linter 仍然说它是有效的并且管道执行并成功。 ???我不知道为什么! 如果你可以在公共项目中重现它并且你的 GitLab 是最新版本,那么我建议提交一个错误:gitlab.com/gitlab-org/gitlab/-/issues/new?issuable_template=bug【参考方案2】:

正如您在the official documentation of Gitlab CI 中看到的,通过定义stages,将指定作业执行的顺序和顺序。

所以下面的gitlab-ci.yml 应该可以工作:

stages: 
  - build
  - deploy


build-job:
  stage: build
  script:
    - echo "STAGE - BUILD"
    - echo $CI_JOB_STAGE
    - echo $CI_COMMIT_MESSAGE
    - echo $CI_COMMIT_BRANCH
    - echo $CI_ENVIRONMENT_NAME
    - mkdir bin
    - mkdir obj
    - "dotnet build"


deploy-to-staging:
  stage: deploy
  script:
    - echo "STAGE - DEPLOY (STAGING)"

截图:

【讨论】:

以上是关于Gitlab CI/CD 不会运行我的部署阶段的主要内容,如果未能解决你的问题,请参考以下文章

Gitlab CI/CD git push POMs 所有阶段工作的变化

用于 GAS 的 React App + Node Gitlab ci cd 管道(构建和部署)

Gitlab CI/CD 如何在管道中捕获 curl 响应

Gitlab CI:找不到构建阶段的输出

Gitlab-CI/CD

实践分享!GitLab CI/CD 快速入门