terraform:在 gitlab CI 环境中找不到命令

terraform: command not found in gitlab CI environment

我有以下 CI 配置:

variables:
  TF_ROOT: ${CI_PROJECT_DIR}
  TF_ADDRESS: ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/terraform/state/${CI_PROJECT_NAME}
  TF_CLI_CONFIG_FILE: $CI_PROJECT_DIR/.terraformrc

default:
  image: hashicorp/terraform:light

cache:
  key: ${CI_PROJECT_NAME}
  paths:
    - ${TF_ROOT}/.terraform


before_script:
  - echo -e "credentials \"$CI_SERVER_HOST\" {\n  token = \"$CI_JOB_TOKEN\"\n}" > $TF_CLI_CONFIG_FILE
  - cd ${TF_ROOT}
  - export TF_LOG_CORE=TRACE
  - export TF_LOG_PATH=terraform_logs.txt

stages:
  - prepare

init:
  stage: prepare
  script:
    - terraform -v
    - terraform init

但在 prepare 阶段我得到:

$ terraform -v
bash: line 135: terraform: command not found

我的理解是通过使用 hashicorp/terraform:light 作为基础图像,我在整个运行器环境中获得 terraform 可用,但情况似乎并非如此。

任何人都可以纠正我我做错了什么吗?

我猜你必须使用 'latest' 图像而不是 'light'。使用以下内容更新 'default' 部分。它具有已初始化 PATH 的入口点详细信息。

default:
  image:
    name: hashicorp/terraform:latest
    entrypoint:
      - /usr/bin/env
      - "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

参考:https://matavelli.io/posts/2020/01/setup-gitlab-ci-with-terraform/

My understanding is by using hashicorp/terraform:light as base image, i get terraform available throughout the runner environment but that doesn't seems to be the case

但是在您使用的代码中 gitlab-terraform 并且在 hashicorp/terraform:light 图像中似乎不可用。

尝试下图,来自 gitlab 注册表

default:
  image: registry.gitlab.com/gitlab-org/terraform-images/stable:latest

如果您想使用 terraform 命令,请添加以下内容

default:
  image:
    name: hashicorp/terraform:light
    entrypoint:
      - /usr/bin/env
      - "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

问题是 gitlab-runner 被配置为 shell 执行器。这使得整个 image: hashicorp/terraform:light 部分变得多余,并且 terraform 应该安装在运行运行程序的主机本身上。