首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GitLab:选择的阶段不存在

GitLab:选择的阶段不存在
EN

Stack Overflow用户
提问于 2021-06-04 15:45:27
回答 1查看 15.4K关注 0票数 1

我正在尝试将一个相当复杂的管道与几个在不同环境中依次运行的作业组合在一起。这是为了在我们的水下运行我们的地形变化。作业序列应该在我们的infraci环境中自动运行,这个环境只会通过CI发布,然后停止并要求按一下按钮开始部署到我们的dev环境,该环境有实际的用户(尽管是开发的)。当然,我不想一遍又一遍地写相同的代码,所以我已经试着尽可能的枯燥。这是我的gitlab-ci.yml

代码语言:javascript
复制
---
# "variables" & "default" are used by all jobs
variables:
  TF_ROOT: '${CI_PROJECT_DIR}/terraform'
  TF_CLI_CONFIG_FILE: .terraformrc
  AWS_STS_REGIONAL_ENDPOINTS: regional
  AWS_DEFAULT_REGION: eu-west-2
  ASG_MODULE_PATH: module.aws_asg.aws_autoscaling_group.main_asg

default:
  image:
    name: hashicorp/terraform:light
    entrypoint: ['']
  cache:
    paths:
      - ${TF_ROOT}/.terraform
  tags:
    - nonlive # This tag matches the group wide GitLab runner.
  before_script:
    - cd ${TF_ROOT}

# List of all stages (jobs within the same stage are executed concurrently)
stages:
  - init
  - infraci_plan
  - infraci_taint
  - infraci_apply
  - dev_plan
  - dev_taint
  - dev_apply

# "Hidden" jobs we use as templates to improve code reuse.
.default:
  rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH

.plan:
  extends: .default
  stage: ${CI_ENVIRONMENT_NAME}_plan
  script:
    - terraform workspace select ${CI_ENVIRONMENT_NAME}
    - terraform plan
  rules:
    - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_ENVIRONMENT_NAME != "infraci"'
      when: manual
      allow_failure: false

.taint:
  extends: .default
  stage: ${CI_ENVIRONMENT_NAME}_taint
  script: terrafrom taint ${ASG_MODULE_PATH}
  needs:
    - ${CI_ENVIRONMENT_NAME}_plan

.apply:
  extends: .default
  stage: ${CI_ENVIRONMENT_NAME}_apply
  script: terraform apply -auto-approve

# Create actual jobs
## init - runs once per pipeline
init:
  stage: init
  script: terraform init
  rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
      when: always
    - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE == "web"'
      when: manual
  
## infraci - auto deploy
infraci_plan:
  extends: .plan
  environment:
    name: infraci

infraci_taint:
  extends: .taint
  environment:
    name: infraci

infraci_apply:
  extends: .apply
  environment:
    name: infraci

## dev - manual deployment
dev_plan:
  extends: .plan
  environment:
    name: dev

dev_taint:
  extends: .taint
  environment:
    name: dev

dev_apply:
  extends: .apply
  environment:
    name: dev

不幸的是,由于以下错误,验证失败:

代码语言:javascript
复制
infraci_plan job: chosen stage does not exist; available stages are .pre, init, infraci_plan, infraci_taint, infraci_apply, dev_plan, dev_taint, dev_apply, .post

我的假设是,这与在隐藏的作业中内插CI_ENVIRONMENT_NAME有关,而不是在实际定义作业的作业之前实际设置值。

如果是这样的话,那么有什么方法可以在没有大量重复的情况下获得我所需要的设置呢?

EN

回答 1

Stack Overflow用户

发布于 2021-06-07 09:03:11

您说得对,在变量中使用stage是不可能的。我看到您需要在工作中直接定义阶段并删除.plan中的阶段的唯一方法。

代码语言:javascript
复制
infraci_plan:
  extends: .plan
  stage: infraci_plan
  environment:
    name: infraci
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67840199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档