Ansible und Jenkins: „winrm ist nicht installiert: Name-Utilities können nicht importiert werden

Ansible und Jenkins: „winrm ist nicht installiert: Name-Utilities können nicht importiert werden

Ich habe vor ein paar Tagen angefangen, Ansible und Jenkins zu lernen. Ich stecke bei einem bestimmten Problem fest und kann es trotz vieler Bemühungen nicht lösen. Ich habe ein sehr einfaches Playbook, das problemlos läuft, wenn ich es direkt von der Befehlszeile aus ausführe.

Ansible und Jenkins sind auf derselben virtuellen Ubuntu-Maschine installiert.

Ich möchte es über Jenkins ausführen und das gelingt mir auch, aber der Workflow wird fälschlicherweise beendet. Dies ist die Konsolenausgabe:

Started by user Jenkins Operador
Running as SYSTEM
Building in workspace /var/lib/jenkins/workspace/Ansible-demo
[Ansible-demo] $ /usr/bin/ansible-playbook /home/operador/Ansible/playbooks/ping.yaml -f 5

PLAY [My first play] ***********************************************************

TASK [Gathering Facts] *********************************************************
fatal: [ubuntu-srv]: FAILED! => {"msg": "winrm or requests is not installed: cannot import name utils"}

PLAY RECAP *********************************************************************
ubuntu-srv         : ok=0    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0   

FATAL: command execution failed
hudson.AbortException: Ansible playbook execution failed
    at org.jenkinsci.plugins.ansible.AnsiblePlaybookBuilder.perform(AnsiblePlaybookBuilder.java:262)
    at org.jenkinsci.plugins.ansible.AnsiblePlaybookBuilder.perform(AnsiblePlaybookBuilder.java:232)
    at jenkins.tasks.SimpleBuildStep.perform(SimpleBuildStep.java:123)
    at hudson.tasks.BuildStepCompatibilityLayer.perform(BuildStepCompatibilityLayer.java:80)
    at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20)
    at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:816)
    at hudson.model.Build$BuildExecution.build(Build.java:199)
    at hudson.model.Build$BuildExecution.doRun(Build.java:164)
    at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:524)
    at hudson.model.Run.execute(Run.java:1899)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:44)
    at hudson.model.ResourceController.execute(ResourceController.java:107)
    at hudson.model.Executor.run(Executor.java:449)
ERROR: Ansible playbook execution failed
Finished: FAILURE

Ich verstehe nicht, warum das Playbook auf Ansible perfekt läuft, aber beim Aufruf durch Jenkins fehlschlägt.

Gemäß dem Befehl von @john-mahowald führen Sie diesen Befehl aus:

ansible -m python_requirements_info -a dependencies=winrm localhost

Kehrt zurück:

localhost | SUCCESS => {
    "changed": false,
    "mismatched": {},
    "not_found": [
        "winrm"
    ],
    "python": "/usr/bin/python2",
    "python_system_path": [
        "/tmp/ansible_python_requirements_info_payload_PcEN_E/ansible_python_requirements_info_payload.zip",
        "/usr/lib/python2.7",
        "/usr/lib/python2.7/plat-x86_64-linux-gnu",
        "/usr/lib/python2.7/lib-tk",
        "/usr/lib/python2.7/lib-old",
        "/usr/lib/python2.7/lib-dynload",
        "/usr/local/lib/python2.7/dist-packages",
        "/usr/lib/python2.7/dist-packages"
    ],
    "python_version": "2.7.18 (default, Jul  1 2022, 12:27:04) \n[GCC 9.4.0]",
    "valid": {}
}

Ich bin nicht sicher, ob das hilft, aber es sieht so aus, als wäre pywinrm nur für Python3 installiert:

jenkins@ubuntu:/home/operador/Ansible/playbooks$ pip install pywinrm
Requirement already satisfied: pywinrm in /usr/local/lib/python3.8/dist-packages (0.4.3)
Requirement already satisfied: six in /usr/local/lib/python3.8/dist-packages (from pywinrm) (1.16.0)
Requirement already satisfied: requests-ntlm>=1.1.0 in /usr/local/lib/python3.8/dist-packages (from pywinrm) (1.1.0)
Requirement already satisfied: xmltodict in /usr/local/lib/python3.8/dist-packages (from pywinrm) (0.13.0)
Requirement already satisfied: requests>=2.9.1 in /usr/local/lib/python3.8/dist-packages (from pywinrm) (2.28.1)
Requirement already satisfied: ntlm-auth>=1.0.2 in /usr/local/lib/python3.8/dist-packages (from requests-ntlm>=1.1.0->pywinrm) (1.5.0)
Requirement already satisfied: cryptography>=1.3 in /usr/local/lib/python3.8/dist-packages (from requests-ntlm>=1.1.0->pywinrm) (38.0.3)
Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.8/dist-packages (from requests>=2.9.1->pywinrm) (3.4)
Requirement already satisfied: charset-normalizer<3,>=2 in /usr/local/lib/python3.8/dist-packages (from requests>=2.9.1->pywinrm) (2.1.1)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.8/dist-packages (from requests>=2.9.1->pywinrm) (2022.9.24)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/local/lib/python3.8/dist-packages (from requests>=2.9.1->pywinrm) (1.26.12)
Requirement already satisfied: cffi>=1.12 in /usr/local/lib/python3.8/dist-packages (from cryptography>=1.3->requests-ntlm>=1.1.0->pywinrm) (1.15.1)
Requirement already satisfied: pycparser in /usr/local/lib/python3.8/dist-packages (from cffi>=1.12->cryptography>=1.3->requests-ntlm>=1.1.0->pywinrm) (2.21)

Antwort1

Installieren Sie, wie der Fehler nahelegt, die Python-Module „winrm“ oder „requests“ für das Python, das Ansible auf dem Controller verwendet.

Um das Problem weiter zu beheben, versucht dieser Befehl, das WinRM-Modul zu finden und den Python-Pfad auszudrucken. Technisch gesehen verwendet er das Modul Python, das sich vom Plugin Python unterscheiden kann, aber es ist ein Ausgangspunkt.

ansible -m python_requirements_info -a dependencies=winrm localhost

Die interne Fehlermeldung stammt von einem WinRM-Verbindungsmodul, das zur Verwaltung verwendet wird.Windows-HostsWenn Sie dies nicht verwenden möchten, überprüfen Sieansible_connection-Variable und alles andere, was mit Verbindungsschlüsselwörtern und Inventar zu tun hat. Möglicherweise haben Sie zuvor Windows-Verbindungen auf einer Play- oder All-Host-Ebene eingerichtet, jetzt haben Sie aber scheinbar einen Linux-Host.

verwandte Informationen