Рубрики
Uncategorized

Создание простого трубопровода CI/CD с Gitlab, Terraform и Amazon Web Services

Как построить конвейер развертывания для веб -сайтов с использованием Gitlab и Terraform. Помечено терраформ, гитлаб, AWS, DevOps.

Предварительные условия

  1. A Gitlab учетная запись
  2. А AWS учетная запись
  3. Terraform установлен
  4. A Клавиш учетная запись
  5. Домен управляется на маршруте 53
  6. Сертификат ACM для вашего домена.

Настроить инфраструктуру

Мы будем использовать Terraform для создания инфраструктуры. Для веб -сайта все, что нам нужно, это ведро S3 и развертывание Cloudfront.

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

variable "bucket_name" {
  default = "website.example.com"
}

variable "cnames" {
  type    = list(string)
  default = ["example.com", "www.example.com"]
}

variable "certificate_arn" {
  default = "arn:::acm::example23132423"
}

provider "aws" {
  region = "us-east-1"
}

resource "aws_s3_bucket" "bucket" {
  bucket = "${var.bucket_name}"
  acl    = "private"
  policy = <

Теперь создайте ведро

terraform init
terraform apply -auto-approve

Потрясающий! Вся наша инфраструктура создана в AWS, и теперь нам нужно настроить наш бегун Gitlab!

Настройка нашего бегуна

В Gitlab создайте репозиторий для вашего проекта или используйте существующий репозиторий. Нам просто нужно сделать несколько вещей, прежде чем наше приложение будет готово к развертыванию.

Во -первых, давайте настроем нашего бегуна. Мы собираемся использовать общего бегуна из Gitlab. Они могут использовать до 2000 минут развертывания в месяц — и они включены по умолчанию.

Нам нужно дать ему учетную запись AWS для использования для развертывания в S3. Создайте еще одну конфигурацию Terraform с этим контентом:

variable "keybase_user" {
  description = "A keybase username to encrypt the secret key output."
  default     = "dannextlinklabs"
}

provider "aws" {
  region = "us-east-1"
}


resource "aws_iam_access_key" "gitlab_ci" {
  user    = "${aws_iam_user.gitlab_ci.name}"
  pgp_key = "keybase:${var.keybase_user}"
}

resource "aws_iam_user_policy" "gitlab_ci" {
  name = "gitlab-ci-policy"
  user = "${aws_iam_user.gitlab_ci.name}"

  policy = <

Убедитесь, что вы установили пользователя клавиш на собственном пользователе клавиш. Хорошо, что угодно, запустите конфигурацию.

terraform init
terraform apply -auto-approve

Конфигурация Terraform возвращает ключ доступа и секретный ключ для этого пользователя. Нам нужно расшифровать секретный ключ с командой (поэтому вам нужно было использовать своего собственного пользователя клавиш).

terraform output encrypted_secret | base64 --decode | keybase pgp decrypt

Теперь, когда у нас есть ключ доступа и секретный ключ для нашего пользователя Gitlab, нам нужно предоставить эти переменные нашему бегуну, добавив их в раздел переменных в настройках CI/CD.

Мы установили три переменных:

AWS_ACCESS_KEY_ID - to the key we just got
AWS_SECRET_ACCESS_KEY - to the key we just got
AWS_DEFAULT_REGION - us-east-1

Запустите развертывание

Gitlab CI/CD основан на файле с именем .gitlab-ci.yml Анкет Наш файл должен выглядеть так:

stages:
  - deploy-s3
  - deploy-cf

variables:
  AWS_BUCKET: website.example.com

deploy_s3:
  image: python:3.6
  stage: deploy-s3
  tags:
    - docker
    - gce
  before_script:
    - pip install awscli -q
  script:
    - aws s3 sync . s3://$AWS_BUCKET/ --delete --acl public-read
  only:
    - master

deploy_cf:
  image: python:3.6
  stage: deploy-cf
  tags:
    - docker
    - gce
  before_script:
    - pip install awscli -q
  script:
    - export distId=$(aws cloudfront list-distributions --output=text --query 'DistributionList.Items[*].[Id, DefaultCacheBehavior.TargetOriginId'] | grep "S3-$AWS_BUCKET" | cut -f1) 
    - while read -r dist; do aws cloudfront create-invalidation --distribution-id $dist --paths "/*"; done <<< "$distId"
  only:
    - master

Этот файл gitlab-ci устанавливает два этапа: Deploy-S3 и Deploy-CF. Первый этап загружает наше приложение в наше ведро S3, а второй аннулирует зону Cloudfront, чтобы это ведро представила новые изменения на нашем веб -сайте!

Эта простая конфигурация — все, что вам нужно для полного конвейера CI/CD для веб -сайта вашего бизнеса.

Этот пост впервые появился на нашем блог где мы пишем о DevOps and DevOps Consulting Services Анкет

Оригинал: «https://dev.to/danielslapelis/building-a-simple-ci-cd-pipeline-with-gitlab-terraform-and-amazon-web-services-2108»