作为我的Jenkinsfile的一部分,我试图加载我在Jenkins机器上拥有的秘密文件,并将其用作变量以传递到terraform脚本中。这个terraform脚本被ssh'到我新配置的ansible服务器上并生成Ansible库存。问题是将私钥文件作为变量加载到terraform脚本中,以便从我在詹金斯的临时构建中创建ssh连接。
如您所见,加载凭证并存储在terraform变量(TF_VAR_private_key)中,但是我在将其加载到main.tf terraform脚本时遇到了麻烦。
任何建议或帮助,不胜感激。
Jenkinsfile
UserDefaults.standard.bool(forKey: "identifierKey")
main.tf
stages {
stage('Provision Infrastructure') {
steps {
// credentialsId loading private key and storing in var
withCredentials([file(credentialsId: 'ec2user.pem', variable: 'TF_VAR_private_key'),
[
$class : 'AmazonWebServicesCredentialsBinding',
credentialsId : "aws_credentials",
accessKeyVariable: 'AWS_ACCESS_KEY_ID',
secretKeyVariable: 'AWS_SECRET_ACCESS_KEY'
]])
{ sh """
terraform version
cd ${TERRAFORM_DIR}
terraform init
terraform plan
terraform apply -input=false -auto-approve
""" }
}
}
错误:
无法运行remote-exec,因为找不到私钥文件。
答案 0 :(得分:0)
我尝试了几种方法,这是可行的:
Jenkinsfile
withCredentials([sshUserPrivateKey(
credentialsId: 'e4dd944e-5fef-4109-801c-b478d41af2d7',
keyFileVariable: 'SSH_KEY')])
{
sh 'cp "$SSH_KEY" files/jenkins-aws.pem'
sh 'terraform plan -out tfplan'
}
您需要将凭据文件复制到terraform可以在工作空间内访问的某个位置。然后在您的地形中正常使用它:
main.tf
variable "ssh_private_key_file" {
default = "files/jenkins-aws.pem"
}
locals {
ssh_private_key_content = file(var.ssh_private_key_file)
}