使用詹金斯管道在docker镜像中运行ansible playbook命令

使用詹金斯管道在docker镜像中运行ansible playbook命令

我需要使用 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 任务需要很长时间才能完成,请提供帮助

相关内容