Выполнение команд 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 задач займет много времени