Запуск плейбуков Ansible в Jenkins не дает расшифровки

На моей машине разработки все работает отлично. Просто когда Дженкинс пытается запустить плейбуки, связанные с файлами, зашифрованными в хранилище, я вижу ошибку:

ERROR! Decryption failed on /data/jenkins/workspace/.../secrets.yml 
FATAL: command execution failed hudson.AbortException: Ansible playbook execution failed

Команда, которая была выполнена из задания Jenkins:

/usr/bin/ansible-playbook playbook.yml -i prod/inventory -l localhost -s -f 1 --vault-password-file /etc/ansible/vault_password

Подтверждено, что файл паролей хранилища существует в расположении со следующими разрешениями:

-rw-r--r--. 1 root root 35 Dec 18 13:23 /etc/ansible/vault_password

Если я запускаю ту же команду, но запрашиваю пароль (в интерактивном режиме), все работает нормально. Однако это не желаемый рабочий процесс: я бы хотел, чтобы Дженкинс запускал эти сборники игр самостоятельно, без взаимодействия с пользователем.

Я должен упомянуть, что playbook предназначен для локального запуска задач, по сути, для подготовки среды к тестированию Maven (создание ожидаемых ресурсов, таких как файлы свойств).


person Jubz    schedule 19.12.2016    source источник
comment
что такое пользователь, под которым работает Дженкинс?   -  person Raul Hugo    schedule 20.12.2016
comment
Это было бы мое имя пользователя в Mac OSX (что удалось) и jenkins на машинах CentOS, где Jenkins запускает playbook. Пользователь jenkins находится в sudoers.d.   -  person Jubz    schedule 21.12.2016


Ответы (1)


Оказывается, существует огромная разница между созданием файла с содержимым и копированием файла с содержимым, даже если конечным результатом является файл с тем же содержимым.

Позвольте мне объяснить: мой плейбук для подготовки создавал мой файл паролей, записывая пароль в файл на удаленных машинах, например так:

copy: content="{{ ansibl_vault_password }}", dest="{{ ansibl_vault_password_file }}"

Изменение, которое я сделал, заключалось в том, что файл паролей копировался с моей машины на удаленные машины, например:

  copy:
    src: "{{ ansibl_vault_password_file }}"
    dest: "{{ ansibl_vault_password_file }}"
    mode: "u=rw,g=r,o=r"

Таким образом, даже если по большому счету я получил файл, содержащий пароль в первой строке, предыдущий подход не смог расшифровать содержимое, в то время как второй подход работал нормально.

person Jubz    schedule 04.01.2017