我需要使用 jenkins 管道创建 docker ansible 映像并运行剧本。
我已经创建了 docker 镜像,但我不知道如何将 docker ansible ssh 密钥复制到远程 ansible 主机。是否需要提前进行设置?
答案1
您提到您正在使用 Jenkins 来执行此操作。有一个名为“SSH 代理“它允许您在 SSH 私钥上下文中运行脚本,即使在 docker 容器内也是如此。
首先,确保插件已安装在詹金斯
接下来,在詹金斯秘密
然后,您可以在工作中重复使用秘密 ID,如下例所示:
pipeline {
agent {
label "docker"
}
environment {
ANSIBLE_VAULT_PASSWORD = credentials('ANSIBLE_VAULT_PASSWORD')
}
options {
timeout(time: 60, unit: "MINUTES")
}
stages {
stage('Run Ansible playbook') {
agent {
docker {
image 'hippolab/ansible'
args '-u 0:0'
reuseNode true
}
}
steps {
sshagent(credentials : ['MY_SSH_KEY_SECRET_ID']) {
sh '''
ansible-galaxy install -r requirements.yml
echo ${ANSIBLE_VAULT_PASSWORD} | ansible-playbook \
--inventory-file hosts \
--extra-vars ansible_ssh_common_args='"-o StrictHostKeyChecking=no -o ServerAliveInterval=30"' \
--ask-vault-pass \
my_playbook.yml
'''
}
}
}
}
post {
always {
deleteDir()
}
}
}
作者经历:
- 如果Ansible Vault使用后,可以使用 shell 管道将密码传递给 ansible-playbook 工具
- StrictHostKeyChecking=否除非你静态设置从属服务器,并手动预先接受所有节点的密钥,否则这一点至关重要,但在 99% 的情况下,情况并非如此
- 服务器存活间隔=30可以省略,除非你在那边有严格的 SSH 服务器,它会因为不活动而终止连接。如果某些 Ansible 任务需要很长时间才能完成,请提供帮助