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 所有阶段工作的变化