Jenkinsfile-将私有密钥凭据添加到Terraform

时间:2018-09-11 18:51:56

标签: jenkins-pipeline terraform

作为我的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,因为找不到私钥文件。

1 个答案:

答案 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)
}