Большой конвейер terraform в Jenkins

#jenkins #jenkins-pipeline #jenkins-plugins #terraform

#дженкинс #дженкинс-конвейер #дженкинс-плагины #terraform

Вопрос:

Я работаю над созданием Jenkins для нашей довольно большой и растущей инфраструктуры. В настоящее время мы используем terraform с userdata для запуска наших экземпляров в AWS. В настоящее время в нашем репозитории установлена эта иерархия

 terraform/
├── server1/
│   ├── server1.tf
│   ├── userdata.yaml
├── server2/
│   ├── server2.tf
│   ├── userdata.yaml
├── server3/
│   ├── server3.tf
│   ├── userdata.yaml
├── server4/
│   ├── server4.tf
│   ├── userdata.yaml
├── server5/
│   ├── server5.tf
│   ├── userdata.yaml
  

В идеале Jenkins должен запускаться при слиянии с master, однако мы хотим, чтобы он запускался только с измененным / новым файлом, чтобы предотвратить удаление экземпляров и попытки построить более 50 серверов. Каким был бы наилучший способ для Jenkins проверять наличие изменений в папках и применять конвейер terraform только к новым / обновленным?

Спасибо всем

Комментарии:

1. Terraform уже обрабатывает это с помощью своего файла состояния.

Ответ №1:

Мне не нравится ваш подход, но если вы настаиваете на том, чтобы делать это через jenkins, вы можете написать оболочку для запуска terraform в зависимости от того, какие файлы изменены.

 folders=`$(git show --name-only |awk -F / '/^terraform/{print $1, FS, $2}')

for folder in ${folders}
do
  pushd ${folder}
  terraform init <options>
  terraform plan <options>
  terraform apply <options>
  popd
done
  

Комментарии:

1. Что бы вы предложили в качестве подхода?