如何解决在 Jenkins 管道中运行 Packer 脚本?
打包程序 v1.6.6
我有以下 Packer 模板,它为 Jenkins 创建了一个 AMI。如您所见,它有 SSH_PRIVATE_KEY
变量。
{
"variables" : {
"aws_access_key" : "{{ env `AWS_ACCESS_KEY` }}","aws_secret_key" : "{{ env `AWS_SECRET_KEY` }}","ssh_private_key" : "{{ env `SSH_PRIVATE_KEY` }}","aws_ami_us_east_1" : "{{ env `AWS_BASE_AMI` }}","jenkins_master_image_version" : "{{ env `JENKINS_MASTER_IMAGE_VERSION` }}"
},"builders" : [
"ssh_username" : "ec2-user","ssh_keypair_name" : "my-key-pair","ssh_private_key_file" : "{{ user `ssh_private_key` }}",...
],"provisioners": []
}
现在我有一个使用模板的 Jenkins 管道。我已将 SSH 私钥文件存储在我的凭据插件中。您会看到我在哪里设置了 Packer 模板使用的 SSH_PRIVATE_KEY
变量。
stage("Create Jenkins AMI") {
steps {
script {
withCredentials([file(credentialsId: "my-key-pair-pem",variable: "SSH_PRIVATE_KEY")]) {
dir("$env.WORKSPACE/deployment/jenkins/packer") {
sh """
export AWS_BASE_AMI=ami-123456abcdef \
&& export JENKINS_MASTER_IMAGE_VERSION=$env.JENKINS_VERSION \
&& packer build jenkins-ami-master.json
"""
}
}
}
}
}
当我运行作业时,它会创建临时实例来运行我的配置器,但无法通过 SSH 连接到它。我得到
+ export AWS_BASE_AMI=ami-0be2609ba883822ec
+ export JENKINS_MASTER_IMAGE_VERSION=lts
+ packer build jenkins-ami-master.json
[1;32mamazon-ebs output will be in this color.[0m
[1;32m==> amazon-ebs: Prevalidating AMI Name: packer-jenkins-master-somedate[0m
[0;32m amazon-ebs: Found Image ID: ami-123456abcedf[0m
[1;32m==> amazon-ebs: Using existing SSH private key[0m
[1;32m==> amazon-ebs: Launching a source AWS instance...[0m
[1;32m==> amazon-ebs: Adding tags to source instance[0m
[0;32m amazon-ebs: Adding tag: "Name": "packer-builder-jenkins-master"[0m
[0;32m amazon-ebs: Instance ID: i-0ceb4376846c69[0m
[1;32m==> amazon-ebs: Waiting for instance (i-0ceb4376846c69) to become ready...[0m
[1;32m==> amazon-ebs: Using ssh communicator to connect: 10.23.x.x[0m
[1;32m==> amazon-ebs: Waiting for SSH to become available...[0m
[1;31m==> amazon-ebs: Timeout waiting for SSH.[0m
[1;32m==> amazon-ebs: Terminating the source AWS instance...[0m
[1;32m==> amazon-ebs: Cleaning up any extra volumes...[0m
[1;32m==> amazon-ebs: No volumes to clean up,skipping[0m
[1;31mBuild 'amazon-ebs' errored: Timeout waiting for SSH.[0m
==> Some builds didn't complete successfully and had errors:
--> amazon-ebs: Timeout waiting for SSH.
让 packer 在我的管道中使用我的 SSH 密钥凭证的正确方法是什么?
注意 我非常确定我使用的是正确的 ssh 凭据,因为我可以使用相同的凭据手动 ssh 到临时实例。此外,我可以在本地终端上执行相同的 CLI 并且可以正常工作。
更新。似乎我需要以某种方式将选项 -o StrictHostKeyChecking=no
传递给 Packer,但我在 SSH Communicator 文档中没有看到这一点。
解决方法
事实证明,我为 Packer security_group
使用了错误的 builder
。它适用于我的机器,但 Jenkins slaves 使用不同的安全组。一旦我将它设置为那个 SG,它就起作用了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。