各位,我将使用Jenkins Pipeline来获得一个git克隆,然后运行一个terraform来部署一个AWS实例,这确实为我的Ansible阶段提供了一些需要的输出,以使用正确的IP和密码。从terraform导出一个值,并创建一个Jenkis-var,我可以在我的Jenkinsfile中为Ansible剧本使用它。
Terraform output.tf将显示给我:
output "S3_bucket_name" {
value = aws_s3_bucket.ddve6.bucket
description = "The value you do need for DDVE configuration on the bucket name!"
}
output "Instance_id" {
value = aws_instance.terraform_ddve.id
description = "EC2 instance ID for default sysadmin password"
}
output "DDVE_public_IP" {
value = aws_instance.terraform_ddve.public_ip
description = "Public IP of your DDVE"
}
output "DDVE_DNS_Name" {
value = aws_instance.terraform_ddve.public_dns
description = "Public DNS name of your DDVE"
}
output "Anzahl_Metadisk" {
value = var.amount_of_metadisk
description = "Amount of attached metadata disk"
}
如何创建可以在上使用的Jenkins变量
ansible playbook release.yml——extra vars"DD_IP=地形.DDVE_public_IP DD_password=地形.Instance_id";
我正在寻找一些如何交换不同阶段的数据并使用它们的例子。
有很多方法可以做到这一点。
- 通过使用terraform模板,您可以生成预期的YAML文件,并在运行ansible时使用该文件。terraform templatefile-将向您解释模板的工作原理对于您的场景,它将是这样的:
main.tf/输出.tf
locals {
someVariable = templatefile("${path.module}/template.tpl", {
dd_ip = aws_instance.terraform_ddve.public_ip,
dd_password = aws_instance.terraform_ddve.id
})
}
output "neededForAnsible" {
value = local.someVariable
}
模板.tpl
DD_IP = ${dd_ip}
DD_password = ${dd_password}
Jenkinsfile
node {
stage('terraform') {
sh """
terraform init
terraform plan
terraform apply --auto-approve
"""
//write the template output in a file
def fileContent = sh(returnStdout: true, script: "terraform output neededForAnsible")
writeFile file: "${WORKSPACE}/vars.yaml", text: fileContent
}
stage('ansible') {
sh """
ansible-playbook release.yml -e @vars.yaml
"""
}
}
- 在groovy变量上设置地形输出:
def dd_ip
def dd_password
node {
stage('terraform) {
sh """
terraform init
terraform plan
terraform apply --auto-approve
"""
// inject terraform out to a groovy variable
dd_ip = sh(returnStdout: true, script: "terraform output DDVE_public_IP").trim()
dd_password = sh(returnStdout: true, script: "terraform output Instance_id").trim()
}
stage('ansible') {
sh """
ansible-playbook release.yml --extra-vars "DD_IP=${dd_ip} DD_password=${dd_password}"
"""
}
}