Выполнение команд ansible playbook внутри образа докера с использованием конвейера jenkins

У меня есть требование для создания ответного образа докера и запуска playbook с использованием конвейера jenkins.

Я создал образ Docker, но я не понимаю, как ANS-ключи Docker копируются на удаленный ANS-хост. Эта настройка должна быть сделана заранее?

1 ответ

Вы упомянули, что используете Дженкинс для этого. Существует плагин под названием " Агент SSH", который позволяет вам запускать свои скрипты в контексте закрытого ключа SSH даже внутри контейнера докера.

Прежде всего, убедитесь, что плагин установлен в Jenkins

Затем зарегистрируйте закрытый ключ SSH в секрете Jenkins.

Затем вы можете повторно использовать секретный идентификатор в своей работе, как показано в примере ниже:

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, пароль можно передать инструменту ansible-playbook с помощью shell pipe
  • StrictHostKeyChecking=no имеет решающее значение, если вы не настраиваете подчиненных статически и не используете все ключи узлов, предварительно принятые вручную, что не имеет место в 99% случаев.
  • ServerAliveInterval=30 может быть опущено, если только у вас нет строгого SSH-сервера на той стороне, который разрывает соединения из-за неактивности. Помогите, если выполнение некоторых Ansible задач займет много времени
Другие вопросы по тегам