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.

Ansible logó
Ansible logó

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.