You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在同一个GitLab Job中同时使用Docker和Terraform完成资源部署

GitLab单Job同时使用Docker和Terraform的实现方案

方案1:使用预装双工具的基础镜像

  • 优先选择同时内置docker和terraform的公共CI基础镜像,也可以自行构建专属镜像,示例Dockerfile如下:
# 以docker官方镜像为基础
FROM docker:latest
# 安装依赖及terraform
RUN apk add --no-cache wget unzip gnupg lsb-release
RUN wget -O- https://rpm.releases.hashicorp.com/RPM-GPG-KEY-hashicorp | gpg --dearmor | tee /usr/share/keyrings/hashicorp-archive-keyring.gpg
RUN echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/hashicorp.list
RUN apk add --update terraform

将构建好的镜像推送到私有/公共镜像仓库后,直接在GitLab Job的image字段配置该镜像即可。

若需要用到Docker-in-Docker(DinD) 能力,需要额外在Job中配置services字段启用docker:dind服务,同时配置DOCKER_HOST环境变量为tcp://docker:2376。

方案2:运行时动态安装缺失工具

  • 无需提前维护镜像,直接选择其中一个工具的官方镜像作为Job基础镜像,在before_script阶段安装另一个工具即可,示例CI配置如下:
deploy-resources:
  image: docker:latest
  # 启用DinD服务
  services:
    - docker:dind
  variables:
    DOCKER_HOST: tcp://docker:2376
    DOCKER_TLS_CERTDIR: "/certs"
  before_script:
    # 安装terraform
    - apk add --no-cache wget unzip
    - wget https://releases.hashicorp.com/terraform/1.9.5/terraform_1.9.5_linux_amd64.zip
    - unzip terraform_1.9.5_linux_amd64.zip
    - mv terraform /usr/local/bin/
    # 验证两个工具都可用
    - docker --version
    - terraform --version
  script:
    # 执行业务逻辑
    - docker pull your-custom-image:latest
    - terraform init
    - terraform apply -auto-approve
  • 该方案灵活性高,可随时调整工具版本,缺点是每次Job运行都会重复执行安装步骤,会增加数秒到数十秒的运行耗时。

方案3:拆分为多Job串行执行

  • 如果不想在单个镜像内集成两个工具,可以拆分为两个串行Job,通过CI产物传递数据:
    • 第一个Job使用docker官方镜像,完成镜像拉取、打包、导出等操作,将需要传递的配置、镜像tar包等存为GitLab CI artifacts
    • 第二个Job使用terraform官方镜像,通过dependencies字段拉取前一个Job的产物,执行资源部署逻辑

内容的提问来源于stack exchange,提问作者akshit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 10:06:03