Я не заставил не секрет в этом блоге того, как я чувствую о террафоре, и как я считаю, что инфраструктура как код абсолютно важен для управления любыми облачными развертываниями на основе долгосрочных.
Есть так много преимуществ для использования этих технологий. И для меня один из самых больших в том, что вы можете управлять развертыванием инфраструктуры точно так же, как и ваши изменения кода.
Если ваша любознательно из преимуществ конвейера CI/CD, там много сообщений. Но для этого поста я хотел поговорить о том, как вы можете взять эти шаблоны террафора и построить конвейер CI/CD, чтобы развернуть их в свои условия.
Таким образом, для этого проекта я создал шаблон террафора, который разворачивает много ресурсов в 3 среда. И я хотел сделать это в экономии затрат, поэтому я хочу управлять этим следующим образом.
- Развитие: что всегда будет существовать, но в масштабированной способности затратываться.
- Тестовая среда: это будет создано только тогда, когда мы будем готовы начать тестирование и уничтоженные после.
- Производство: где наше производственное приложение будет проживать.
Сейчас ради этого упражнения я буду строить только трубопровод развертывания для кода террафора, а в более позднем посте будет изучаться, как интегрировать это с изменениями кода.
Теперь, как и во всем, есть много способов сделать что-то работу. Я просто показываю подход, который работал для меня.
Настройка своего шаблона
Первая часть этого состоит в том, чтобы построить свой шаблон, чтобы иметь возможность легко сделать изменения конфигурации через автоматический трубопровод развертывания.
Лучший способ сделать это, это переменные, и ваши делают автоматическое развертывание или нет, я настоятельно рекомендую использовать их. Если у вас когда-нибудь будет больше, чем самостоятельно, работая на шаблоне террафора, или планируйте создать более одной среды. Вы будете абсолютно нужны переменные. Так что это в целом хорошая практика.
Ради этого примера я объявил следующие переменные в файле под названием «Variables.tf»:
variable "location" { default = "usgovvirginia"}variable "environment\_code" { description = "The environment code required for the solution. "}variable "deployment\_code" { description = "The deployment code of the solution"}variable "location\_code" { description = "The location code of the solution."}variable "subscription\_id" { description = "The subscription being deployed."}variable "client\_id" { description = "The client id of the service prinicpal"}variable "client\_secret" { description = "The client secret for the service prinicpal"}variable "tenant\_id" { description = "The client secret for the service prinicpal"}variable "project\_name" { description = "The name code of the project" default = "cds"}variable "group\_name" { description = "The name put into all resource groups." default = "CDS"}
Также стоит отметить, что идентификатор клиента, секрет, идентификатор подписки и идентификатор арендатора выше. Использование Azure DEVOPS вам придется иметь возможность развертываться с помощью принципала службы. Так что это будет важно.
Тогда в вашем Main.tf у вас будет следующее:
provider "azurerm" { subscription\_id = var.subscription\_id version = "=2.0.0" client\_id = var.client\_id client\_secret = var.client\_secret tenant\_id = var.tenant\_id environment = "usgovernment" features {}}
Теперь стоит упомянуть, что когда я работаю с моим шаблоном, я использую файл под названием «Variables.tfvars», который выглядит как следующее:
location = "usgovvirginia"environment\_code = "us1"deployment\_code = "d"location\_code = "us1"subscription\_id = "..."group\_name = "CDS"
Настройка трубопровода
Это будет важно позже, поскольку вы создаете автоматизацию. Отсюда следующий шаг собирается построить ваш трубопровод DEVOPS AZURE, и для этого образца Я собираюсь показать, я использую трубопровод YAML:
Итак, что я сделал, был планировать создание «Variables.tfvars» как часть моего развертывания:
- script: | touch variables.tfvars echo -e "location = \""$LOCATION"\"" >> variables.tfvars echo -e "environment\_code = \""$ENVIRONMENT\_CODE"\"" >> variables.tfvars echo -e "deployment\_code = \""$DEPLOYMENT\_CODE"\"" >> variables.tfvars echo -e "location\_code = \""$LOCATION\_CODE"\"" >> variables.tfvars echo -e "subscription\_id = \""$SUBSCRIPTION\_ID"\"" >> variables.tfvars echo -e "group\_name = \""$GROUP\_NAME"\"" >> variables.tfvars echo -e "client\_id = \""$SP\_APPLICATIONID"\"" >> variables.tfvars echo -e "tenant\_id = \""$SP\_TENANTID"\"" >> variables.tfvarsdisplayName: 'Create variables Tfvars'
Теперь следующий вопрос, откуда приходят эти значения, я объявил как часть переменных в трубопроводе, эти значения:
Оттуда, потому что я развертываю правительство Azure, я добавил шаг Azure CLI, чтобы убедиться, что мой контекст командной строки указан на правительство Azure, выполняя следующее:
- task: AzureCLI@2 inputs: azureSubscription: 'Kemack - Azure Gov' scriptType: 'bash' scriptLocation: 'inlineScript' inlineScript: | az cloud set --name AzureUSGovernment az account show
Как мы занимаемся планом/применением Terraform, ответ довольно простой. Я установил это расширение и использую задачу «Установщик инструмента Terraform», следующим образом:
- task: TerraformInstaller@0 inputs: terraformVersion: '0.12.3' displayName: "Install Terraform"
После этого он стал довольно продвиженным вперед для реализации:
- script: | terraform init displayName: 'Terraform - Run Init'- script: | terraform validate displayName: 'Terraform - Validate tf'- script: | terraform plan -var-file variables.tfvars -out=tfPlan.txt displayName: 'Terraform - Run Plan'- script: | echo $BUILD\_BUILDNUMBER".txt" echo $BUILD\_BUILDID".txt" az storage blob upload --connection-string $TFPLANSTORAGE -f tfPlan.txt -c plans -n $BUILD\_BUILDNUMBER"-plan.txt" displayName: 'Upload Terraform Plan to Blob'- script: | terraform apply -auto-approve -var-file variables.tfvars displayName: 'Terraform - Run Apply'
Теперь прохладная часть приведенного выше, я сделал это еще дальше, и создал учетную запись хранения в Azure и добавил соединительную строку как секрет. Затем я построил логику, что, когда она запускает этот трубопровод, он будет выполнять план перед применением, а затем вывести это в текстовый файл и сохранить его в учетной записи хранилища с номером сборки для имени файла.
Я лично такой, как это создает журнал действий, выполняемых во время автоматической сборки, движущейся вперед.
Сейчас я планирую уточнение этого и предпринимая шаги создания большего количества автоматизации окружающей среды, поэтому еще прийти.
Оригинал: «https://dev.to/documentednerd/building-ci-cd-for-terraform-h7j»