Ansible + Jenkins: error: unrecognized arguments: .yaml
Probléma: Jenkinsszel futtatnád az Ansible playbookot, de a címben jelentkező hibaüzenetet kapod.
Megoldás röviden: Tedd idézőjelbe az ${SSH_KEY}
-t.


Probléma: Jenkinsszel futtatnád az Ansible playbookot, de a címben jelentkező hibaüzenetet kapod.
Megoldás röviden: Tedd idézőjelbe az ${SSH_KEY}
-t.
Hosszabban: Valószínűleg szóközt tettél a Jenkins pipeline nevébe. Ilyet soha ne tegyél. Ha mégis kell, akkor inkább állítsd be a displayName
property-t (vagy UI-on az Advanced Project Options → Display Name opciót).
Miért?
Röviden: mert a Jenkins a munkakönyvtár képzésekor beteszi a pipeline nevében lévő szóközt is, így az SSH kulcs útvonalában is lesz szóköz, amit az Ansible paraméterként kap meg.
Hosszabban: mert valószínűleg így futtatod a playbookodat:
withCredentials(
[
sshUserPrivateKey(credentialsId: 'ssh-username-and-key', usernameVariable: 'SSH_USERNAME', keyFileVariable: 'SSH_KEY')
]) {
sh '''
ansible-playbook -u ${SSH_USERNAME} --private-key ${SSH_KEY} -i inventory.ini playbook.yaml
'''
}
Ilyenkor az SSH_KEY
változó a kulcs elérési útvonalát tartalmazza, ami egy ideiglenes könyvtárba kerül a munkakönyvtáron belül. A Jenkins munkakönyvtárnév képzése a következőképpen alakul:
<jenkins_home>/workspace/<mappák>/<pipeline neve>/
Ha a pipeline nevében szóköz van – esetleg kötőjellel tovább rontva a helyzetet – akkor azt az Ansible az SSH_KEY
változón keresztül plusz paraméterként kapja meg, és így borul a paraméterlista.