Gitlab CI / CD с Terraform и сторонним плагином - PullRequest
0 голосов
/ 11 июня 2019

Я предоставляю ресурсы в AWS, а также в сторонних системах через специального провайдера.В моей локальной среде он работает нормально (так как я скачал и скомпилировал стороннего поставщика).

В качестве следующего шага я пытаюсь запустить конвейер Gitlab с Terraform. Часть AWS работает, потому что оназарегистрированный провайдер Terrafrom, однако сторонняя часть не работает (потому что это не зарегистрированный провайдер Terraform).

Когда я пытаюсь запустить конвейер Gitlab, он выдает ошибку и сообщает следующее

В последнем случае плагин должен быть установлен вручную путем поиска и загрузки подходящегодистрибутив и размещение исполняемого файла плагина в следующем каталоге: terraform.d / plugins / linux_amd64

У меня есть файл .gitlab-ci.yml:

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

before_script:
  - rm -rf .terraform
  - terraform --version
  - export AWS_ACCESS_KEY
  - export AWS_SECRET_KEY
  - terraform init

stages:
  - validate
  - plan
  - apply

validate:
  stage: validate
  script:
    - terraform validate

plan:
  stage: plan
  script:
    - terraform plan -out "planfile"
  dependencies:
    - validate
  artifacts:
    paths:
      - planfile

apply:
  stage: apply
  script:
    - terraform apply -input=false "planfile"
  dependencies:
    - plan
  when: manual

enter image description here

Я вижу изображение, которое называется 'hashicorp / terraform: light'.Должен ли я создать образ докера на основе этого изображения с уже имеющимся сторонним поставщиком?

EDIT1

Ясно, что требуется пользовательское изображение.Я использовал идею из rflume ниже и использовал следующий Dockerfile для создания образа.

# Multi-Stage builds require Docker Engine 17.05 or higher

# Build ACI provider
FROM ubuntu:bionic-20190515 as builder

ENV HOME /root
ENV GOPATH $HOME/go
ENV GOBIN $GOPATH/bin

RUN apt update &&\
    apt install -yqq software-properties-common \
    git \
    wget \
    unzip \
    gcc \
    perl \
    go-dep \
    make \
    build-essential &&\
    add-apt-repository ppa:longsleep/golang-backports &&\
    apt-get update &&\
    apt-get install -y golang-go &&\
    mkdir -p $GOPATH/src/github.com/terraform-providers &&\
    wget -O $HOME/terraform-provider-aci.zip https://github.com/ciscoecosystem/terraform-provider-aci/archive/master.zip &&\
    cd $GOPATH/src/github.com/terraform-providers/ &&\
    unzip $HOME/terraform-provider-aci.zip -d . &&\
    mv terraform-provider-aci-master \
    terraform-provider-aci-v1.0.0

WORKDIR $GOPATH/src/github.com/terraform-providers/terraform-provider-aci-v1.0.0

RUN dep ensure
RUN make build


# Build the actual image
FROM hashicorp/terraform:0.11.14


ENV GOBIN /root/go/bin
ENV PATH $GOBIN:$PATH

RUN mkdir -p /root/.terraform.d/plugins

COPY --from=builder /root/go/bin/terraform-provider-aci-v1.0.0 $GOBIN/terraform-provider-aci-v1.0.0

ENTRYPOINT ["/bin/sh", "-c"]

Ответы [ 2 ]

0 голосов
/ 17 июня 2019

Решением было создать изображение с уже настроенным провайдером.

FROM hashicorp/terraform:full

ENV GOPATH /go

RUN mkdir -p $GOPATH/src/github.com/ciscoecosystem
WORKDIR $GOPATH/src/github.com/ciscoecosystem
RUN git clone https://github.com/ciscoecosystem/terraform-provider-aci.git $GOPATH/src/github.com/ciscoecosystem/terraform-provider-aci
RUN git clone https://github.com/ciscoecosystem/aci-go-client.git $GOPATH/src/github.com/ciscoecosystem/aci-go-client
RUN apk add --no-cache build-base

WORKDIR $GOPATH/src/github.com/ciscoecosystem/terraform-provider-aci

RUN make build

WORKDIR $GOPATH

ENTRYPOINT ["terraform"]
0 голосов
/ 11 июня 2019

Изображение terraform:light не содержит сторонних поставщиков.Вы можете попробовать использовать terraform:full изображение, но вам может и не повезти с этим.

В этом случае вам придется создать свое собственное изображение на основе одного из приведенных выше изображений (предпочтительно light, чем меньше изображение, тем лучше ...).

I 'У нас возникла та же проблема и был создан образ на основе light с поставщиком AWS и сторонним поставщиком Ansible Terraform-с-AWS-Provisioner-и-Ansible-Provider-for-Gitlab-CI , которыйвы можете использовать в качестве справки, если хотите.

EDIT1 (относительно вашего редактирования):

Я заметил, что вы не указываете версию провайдера в своем COPY --from=builder ... команда.В соответствии с Имена и версии плагинов вам необходимо указать версию для провайдера с _v[VERSION] для вашего встроенного пакета провайдера.Попробуйте и дайте мне знать, если это сработает;)

...