如何在’include’中使用’extends’时解决’invalid base hashes’错误

46次阅读
没有评论

问题描述

在将一部分内容移动到另一个文件中,并通过使用”include”关键字来调用时,遇到了一个问题。具体地说,他想将一个名为”.gitlab-tf-backend”的隐藏任务从主的.gitlab-ci.yml文件中抽取出来,并通过使用”extends”关键字在另一个文件中调用。然而,他遇到了一个错误,错误消息如下:

This GitLab CI configuration is invalid: validate: invalid base hashes in `extends` (.gitlab-tf-backend)

用户希望能够解决这个问题,正确地从主.gitlab-ci.yml文件中调用他的隐藏任务”.gitlab-tf-backend”。

解决方案

请注意以下操作可能因GitLab版本差异而有所不同。
为了解决这个问题,你可以采用以下步骤来调用隐藏任务并避免出现”invalid base hashes”错误。

方案

首先,你需要确保.gitlab-tf-backend隐藏任务在被”include”时有正确的”script”部分。这是因为在GitLab CI配置中,”extends”关键字引用的任务需要有对应的”script”部分。

下面是如何调整你的.gitlab-tf-backend隐藏任务的示例:

# .gitlab/ci/_common.gitlab-ci.yml file:
.variables:
  GITLAB_API_ENDPOINT: https://gitlab.com/api/v4
  TF_ROOT: ${CI_PROJECT_DIR}/terraform
  PLAN: plan.tfplan
  JSON_PLAN_FILE: tfplan.json
  GIT_DEPTH: 10

.gitlab-tf-backend: &gitlab-tf-backend
  script:
    - export TF_ADDRESS=${GITLAB_API_ENDPOINT}/projects/${CI_PROJECT_ID}/terraform/state/${STATE_NAME}
    - export TF_HTTP_ADDRESS=${TF_ADDRESS}
    - export TF_HTTP_LOCK_ADDRESS=${TF_ADDRESS}/lock
    - export TF_HTTP_LOCK_METHOD=POST
    - export TF_HTTP_UNLOCK_ADDRESS=${TF_ADDRESS}/lock
    - export TF_HTTP_UNLOCK_METHOD=DELETE
    - export TF_HTTP_USERNAME=${USERNAME}
    - export TF_HTTP_PASSWORD=${GITLAB_TOKEN}
    - export TF_HTTP_RETRY_WAIT_MIN=5
    - echo "Using HTTP Backend at $TF_HTTP_ADDRESS"
    - terraform --version
    - terraform init

在这个示例中,我们将.gitlab-tf-backend隐藏任务的内容包裹在一个”script”块中。这样,当你在主.gitlab-ci.yml文件中使用”extends”关键字引用.gitlab-tf-backend时,就会包含正确的”script”部分,从而避免”invalid base hashes”错误。

使用gitlab-terraform镜像(可选)

另外,你还可以考虑使用gitlab-terraform镜像来简化你的配置。这个镜像可以帮助你管理与Terraform相关的设置,包括远程状态管理等。具体细节可以参考GitLab文档

总结

通过将隐藏任务的内容放置在正确的”script”块中,你可以避免”invalid base hashes”错误,并成功地在主的.gitlab-ci.yml文件中调用.gitlab-tf-backend隐藏任务。另外,考虑使用gitlab-terraform镜像可以简化与Terraform相关的设置。

希望这个解决方案能够帮助你解决问题!如果你还有任何疑问,请随时询问。

正文完