2016-12-19 4 views
0

Sur mon tout machine de développement fonctionne très bien. Il est juste que quand Jenkins tente d'exécuter Playbooks qui sont associés à des fichiers chiffrés voûte, je vois l'erreur:Courir Playbooks Ansible Jenkins ne déchiffrage

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

La commande qui a été exécutée à partir du travail Jenkins est:

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

La voûte fichier de mot de passe est confirmé exister à l'endroit avec les autorisations suivantes:

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

Si je lance la même commande, mais demande un mot de passe (interactive), tout fonctionne bien. Ce n'est cependant pas le flux de travail souhaité: je voudrais que Jenkins exécute ces livrets tout seul, sans interaction de l'utilisateur.

Je dois mentionner que le PlayBook est destiné à exécuter des tâches localement, essentiellement pour préparer l'environnement pour les tests Maven (création de ressources attendues telles que les fichiers de propriétés).

+0

Quel est l'utilisateur que jenkins exécute? –

+0

Ce serait mon nom d'utilisateur sur Mac OSX (qui réussit), et "jenkins" sur les machines CentOS où Jenkins exécute le playbook. L'utilisateur "jenkins" est dans sudoers.d. – Jubz

Répondre

0

Il se trouve qu'il ya une énorme différence entre la création d'un fichier avec le contenu et la copie d'un fichier avec le contenu, même si le résultat final est un fichier avec le même contenu.

Permettez-moi d'expliquer: mon livre de jeux d'approvisionnement avait été crée mon fichier de mot de passe en écrivant le mot de passe dans un fichier sur les machines distantes, comme ceci:

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

Le changement que j'ai fait était pour le fichier de mot de passe à copié de ma machine aux machines distantes, comme ceci:

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

Ainsi, même si, dans le grand schéma des choses que je fini avec un fichier contenant le mot de passe sur la première ligne, l'approche précédemment gardé ne pas décrypter le contenu alors que la deuxième approche a fonctionné ça va.