Предварительные условия
- A Gitlab учетная запись
- А AWS учетная запись
- Terraform установлен
- A Клавиш учетная запись
- Домен управляется на маршруте 53
- Сертификат 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»