azure - ssh 到 jenkins Pipeline 中第 2 阶段的第 1 阶段中使用 terraform 模块创建的新 Azure VM
问题描述
我正在为我们的 CD 自动化程序开发 jenkins 管道。我们需要使用 Jenkins Pipeline 中的 terraform(在第 1 阶段创建)创建 Azure VM(Linux),然后从(第 2 阶段)连接到它并执行一些命令。
我已经创建了一个具有所需配置的 Terraform 模块,以及 jenkins ssh 密钥,该密钥将在创建过程中复制到新 VM。还从状态文件中提取新 VM 的 IP,然后复制到 txt 文件,使用 txt 文件作为参考,在第 2 阶段传递 IP。除 SSH 连接外,一切都按预期工作。
下面是我的设置
下面是我的 Jenkins 流水线脚本
stage('Create VM') {
steps {
sh '''
#!/bin/bash
cd ${WORKSPACE}/Terraform/terraform-azure-linux-vm/terraform-azure-network_interface/
pwd
terraform init
terraform plan
ls
terraform apply --auto-approve
cd ${WORKSPACE}/Terraform/terraform-azure-linux-vm/terraform-azure-linux
terraform init
terraform plan
ls
terraform apply --auto-approve
cat terraform.tfstate | grep "private_ip_address" | awk -F' ' '{print $2}' | awk 'NR==1{print $1}'| tr -d ',"' > ${WORKSPACE}/Ansible-roles/linux_inventory.txt
'''
}
}
stage('ssh connection') {
steps {
script{
env.data = readFile(file: 'Ansible-roles/linux_inventory.txt')
sh '''
ssh -tt jenkins@${data} -o StrictHostKeyChecking=no << EOF
sudo -i
echo "Connected"
exit
exit
EOF'''
}
}
`
当我第一次从 jenkins vm 手动连接到新 VM 时,它会提示输入密码,而从第二次开始 ssh 连接无密码。但我需要第一次从管道连接。
以下是我第一次尝试 SSH 时的错误
- ssh -tt jenkins@10.0.1.2 -o StrictHostKeyChecking=no
警告:远程主机标识已更改!
可能有人在做一些讨厌的事情!有人现在可能正在窃听您(中间人攻击)!请联系您的系统管理员。在 /var/lib/jenkins/.ssh/known_hosts 添加正确的主机密钥以消除此消息。/var/lib/jenkins/.ssh/known_hosts:12 中的违规 ECDSA 密钥删除: ssh-keygen -f "/var/lib/jenkins/.ssh/known_hosts" -R "*******" 密码身份验证被禁用以避免中间人攻击。键盘交互
解决方案
推荐阅读
- javascript - 如何比较数组中的2位数字
- r - 如何在 R 的列表中按组获取平均值
- javascript - 用于检测带有条件的表情符号的正则表达式
- google-cloud-shell - 编辑提示后gcloud no space错误
- tensorflow - 导入张量流概率的问题
- python - 为什么在尝试从条目对象获取文本时出现此错误:Tkinter AttributeError: CustomClass instance has no attribute 'entry'?
- python - 如何将二维列表传递给函数?
- python - 具有混合值类型的列表的笛卡尔积
- javascript - 选择将自定义数据集作为类的元素
- flutter - Flutter:带有 TextAlign justify 的文本在一个单词内被截断