У меня есть 2 проблемы, которые являются частью одной и той же проблемы.Я запускаю terraform внутри JenkinsFile, все это происходит в док-контейнере, который выполняется на определенном узле.У меня есть несколько различных сред с ec2_plugin, которые помечены как «environment_ec2».Это сделано так, поскольку мы используем ansible, и я хочу иметь возможность выполнять ansible локально в VPC.
1) Как создать вход и этап, которые выполняются только в том случае, если предыдущая команда возвращает определенныйoutput?
2) Как сделать так, чтобы это не было блокировкой?
node('cicd_ec2') {
stage('Prepare Environment'){
cleanWs()
checkout scm
}
withAWSParameterStore(credentialsId: 'jenkin_cicd', naming: 'relative', path: '/secrets/cicd/', recursive: true, regionName: 'us-east-1') {
docker.image('jseiser/jenkins_devops:0.7').inside {
stage('Configure Git Access') {
sh 'mkdir -p ~/.ssh'
sh 'mv config ~/.ssh/config'
sh 'chmod 600 ~/.ssh/config'
sh "echo '$BITBUCKET_CLOUD' > ~/.ssh/bitbucket_rsa"
sh 'chmod 600 ~/.ssh/bitbucket_rsa'
sh "echo '$CICD_CODE_COMMIT_KEY' > ~/.ssh/codecommit_rsa"
sh 'chmod 600 ~/.ssh/codecommit_rsa'
sh "echo '$IDAUTO_CICD_MGMT_PEM' > ~/.ssh/idauto-cicd-mgmt.pem"
sh 'chmod 600 ~/.ssh/idauto-cicd-mgmt.pem'
sh 'ssh-keyscan -t rsa bitbucket.org >> ~/.ssh/known_hosts'
sh 'ssh-keyscan -t rsa git-codecommit.us-east-1.amazonaws.com >> ~/.ssh/known_hosts'
}
stage('Terraform'){
sh './init-ci.sh'
sh 'terraform validate'
sh 'terraform plan -detailed-exitcode -out=create.tfplan'
}
input 'Deploy stack?'
stage ('Terraform Apply') {
sh 'terraform apply -no-color create.tfplan'
}
stage('Ansible'){
sh 'ansible-galaxy -vvv install -r requirements.yml'
sh 'ansible-playbook -i ~/ vpn.yml'
}
}
}
}
Я хочу запустить только input и terraform, если результат команды ниже == 2.
terraform plan -detailed-exitcode
Поскольку все это должно выполняться на экземпляре ec2, и все это должно использовать этот контейнер, я не уверен, как я могу сделать этот ввод вне узла, как это рекомендовано.Поскольку, если входные данные находятся достаточно долго, этот экземпляр может выйти из строя, а остальная часть кода будет запущена в новом экземпляре / рабочей области, и информация, которая мне нужна из репозитория git и плана terraform, не будет представлена.Репозиторий git, который я извлекаю, содержит конфигурации terraform, конфигурации ansible и некоторую конфигурацию для SSH, так что terraform и ansible могут извлекать свои модули / роли из частных репозиториев git.'Create.tfplan', который мне нужно будет использовать, если в terraform есть изменения, также нужно будет передать.
Просто очень запутался, как я могу получить хороший ввод, получайте этот ввод, только если мне действительно нужнозапустить терраформ применить, и как я могу сделать это без блокировки.