2017-02-03 2 views
0

TL; DRansible Mit Jenkins Plugins installieren sagt mir die Krume Wert ungültig

Jenkins sagt mir, ich einen ungültigen Krume Wert am fließt, wenn Plugins von einem ansible Skript

Details zur Installation

Ich habe Jenkins 2.32.2 läuft in einem Docker-Container, mit dem offiziellen Docker-Container.

Ich habe es auf einer Vagrant VM installiert und versuche, die Plugins mit Ansible zu konfigurieren.

ich durch eine Liste von Plugins bin iteriert die folgende Aufgabe in den Standardeinstellungen definiert

- name: Install plugins 
    include: install_plugin.yml 
    with_items: "{{ plugins }}" 
    loop_control: 
    loop_var: plugin_name 
    tags: [jenkins] 

mit der folgenden Liste mit/main.yml

plugins: 
    - git 
    - template-project 
    - pipeline 
    - docker-workflow 
    - template-project 
    - config-file-provider 
    - bitbucket 
    - disk-usage 
    - greenballs 
    - jacoco 
    - slack 
    - sonar 

Im Folgenden ist die Definition von install_plugin Datei. yml, die aus der Datei main.yml aufgerufen wird

--- 
- name: Get Jenkins crumb 
    uri: 
    user: admin 
    password: "{{ jenkins_admin_password }}" 
    force_basic_auth: yes 
    url: "http://{{ ansible_hostname }}:8080/crumbIssuer/api/json" 
    return_content: yes 
    register: crumb_token 
    until: crumb_token.content.find('Please wait while Jenkins is getting ready') == -1 
    retries: 10 
    delay: 5 
    tags: [jenkins] 

- name: Plugins are installed 
    uri: 
    url: "http://{{ ansible_host }}:8080/pluginManager/installNecessaryPlugins" 
    method: POST 
    user: admin 
    password: "{{ jenkins_admin_password }}" 
    body: '<jenkins><install plugin="{{ plugin_name }}@latest" /></jenkins>' 
    headers: 
     Content-Type: "text/xml" 
     Jenkins-Crumb: "{{ crumb_token.json.crumb }}" 
    creates: "{{ jenkins_home }}/plugins/{{ plugin_name }}" 
    register: plugins_result 
    tags: [jenkins] 

- wait_for: 
    path: "{{ jenkins_home }}/plugins/{{ plugin_name }}" 
    tags: [jenkins] 

Wenn ich versuche zu emulieren dies mit curl von der Kommandozeile, erhalte ich die erwarteten Ergebnisse die folgenden 2 Befehle, es erfolgreich

~/Projects/ci> curl --user admin:admin cluster01:8080/crumbIssuer/api/json 
{"_class":"hudson.security.csrf.DefaultCrumbIssuer","crumb":"646966a811fe84bdc5dc00a0de942b80","crumbRequestField":"Jenkins-Crumb"}% 

~/Projects/ci> curl -X POST --user admin:admin -d '<jenkins><install plugin="[email protected]" /></jenkins>' --header 'Jenkins-Crumb: 646966a811fe84bdc5dc00a0de942b80' --header 'Content-Type: text/xml' http://cluster01:8080/pluginManager/installNecessaryPlugins 

arbeitet Aber wenn ich die ansible Textbuch laufen, bekomme ich folgende Fehler

status code was not [200]: HTTP Error 403: No valid crumb was included in the request 

Hier von -vvvv ist die Log-Ausgabe für diesen Schritt

TASK [jenkins : Install plugins] *********************************************** 
task path: /Users/chris/Projects/ci/roles/jenkins/tasks/main.yml:56 
included: /Users/chris/Projects/ci/roles/jenkins/tasks/install_plugin.yml for cluster01 
included: /Users/chris/Projects/ci/roles/jenkins/tasks/install_plugin.yml for cluster01 
included: /Users/chris/Projects/ci/roles/jenkins/tasks/install_plugin.yml for cluster01 
included: /Users/chris/Projects/ci/roles/jenkins/tasks/install_plugin.yml for cluster01 
included: /Users/chris/Projects/ci/roles/jenkins/tasks/install_plugin.yml for cluster01 
included: /Users/chris/Projects/ci/roles/jenkins/tasks/install_plugin.yml for cluster01 
included: /Users/chris/Projects/ci/roles/jenkins/tasks/install_plugin.yml for cluster01 
included: /Users/chris/Projects/ci/roles/jenkins/tasks/install_plugin.yml for cluster01 
included: /Users/chris/Projects/ci/roles/jenkins/tasks/install_plugin.yml for cluster01 
included: /Users/chris/Projects/ci/roles/jenkins/tasks/install_plugin.yml for cluster01 
included: /Users/chris/Projects/ci/roles/jenkins/tasks/install_plugin.yml for cluster01 

TASK [jenkins : Get Jenkins crumb] ********************************************* 
task path: /Users/chris/Projects/ci/roles/jenkins/tasks/install_plugin.yml:2 
Using module file /usr/local/Cellar/ansible/2.2.0.0_2/libexec/lib/python2.7/site-packages/ansible/modules/core/network/basics/uri.py 
<cluster01> ESTABLISH SSH CONNECTION FOR USER: vagrant 
<cluster01> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o 'IdentityFile=".vagrant/machines/cluster01/virtualbox/private_key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=vagrant -o ConnectTimeout=10 -o ControlPath=/Users/chris/.ansible/cp/ansible-ssh-%h-%p-%r cluster01 '/bin/sh -c '"'"'(umask 77 && mkdir -p "` echo $HOME/.ansible/tmp/ansible-tmp-1486148016.3-32614286575555 `" && echo ansible-tmp-1486148016.3-32614286575555="` echo $HOME/.ansible/tmp/ansible-tmp-1486148016.3-32614286575555 `") && sleep 0'"'"'' 
<cluster01> PUT /var/folders/g5/h48p994d3qn7d9_nz7xv2lvh0000gn/T/tmprL_Pye TO /home/vagrant/.ansible/tmp/ansible-tmp-1486148016.3-32614286575555/uri.py 
<cluster01> SSH: EXEC sftp -b - -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o 'IdentityFile=".vagrant/machines/cluster01/virtualbox/private_key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=vagrant -o ConnectTimeout=10 -o ControlPath=/Users/chris/.ansible/cp/ansible-ssh-%h-%p-%r '[cluster01]' 
<cluster01> ESTABLISH SSH CONNECTION FOR USER: vagrant 
<cluster01> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o 'IdentityFile=".vagrant/machines/cluster01/virtualbox/private_key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=vagrant -o ConnectTimeout=10 -o ControlPath=/Users/chris/.ansible/cp/ansible-ssh-%h-%p-%r cluster01 '/bin/sh -c '"'"'chmod u+x /home/vagrant/.ansible/tmp/ansible-tmp-1486148016.3-32614286575555/ /home/vagrant/.ansible/tmp/ansible-tmp-1486148016.3-32614286575555/uri.py && sleep 0'"'"'' 
<cluster01> ESTABLISH SSH CONNECTION FOR USER: vagrant 
<cluster01> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o 'IdentityFile=".vagrant/machines/cluster01/virtualbox/private_key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=vagrant -o ConnectTimeout=10 -o ControlPath=/Users/chris/.ansible/cp/ansible-ssh-%h-%p-%r -tt cluster01 '/bin/sh -c '"'"'sudo -H -S -n -u root /bin/sh -c '"'"'"'"'"'"'"'"'echo BECOME-SUCCESS-vzqwuvcglpsfrrzkvwdcupjtukijcwvl; /usr/bin/python /home/vagrant/.ansible/tmp/ansible-tmp-1486148016.3-32614286575555/uri.py; rm -rf "/home/vagrant/.ansible/tmp/ansible-tmp-1486148016.3-32614286575555/" > /dev/null 2>&1'"'"'"'"'"'"'"'"' && sleep 0'"'"'' 
ok: [cluster01] => { 
    "attempts": 1, 
    "changed": false, 
    "connection": "close", 
    "content": "{\"_class\":\"hudson.security.csrf.DefaultCrumbIssuer\",\"crumb\":\"ad67abc734af7eae279df5c68098a29e\",\"crumbRequestField\":\"Jenkins-Crumb\"}", 
    "content_type": "application/json;charset=UTF-8", 
    "date": "Fri, 03 Feb 2017 18:53:36 GMT", 
    "invocation": { 
     "module_args": { 
      "backup": null, 
      "body": null, 
      "body_format": "raw", 
      "content": null, 
      "creates": null, 
      "delimiter": null, 
      "dest": null, 
      "directory_mode": null, 
      "follow": false, 
      "follow_redirects": "safe", 
      "force": false, 
      "force_basic_auth": true, 
      "group": null, 
      "headers": { 
       "Authorization": "Basic YWRtaW46YWRtaW4=" 
      }, 
      "http_agent": "ansible-httpget", 
      "method": "GET", 
      "mode": null, 
      "owner": null, 
      "password": "admin", 
      "regexp": null, 
      "remote_src": null, 
      "removes": null, 
      "return_content": true, 
      "selevel": null, 
      "serole": null, 
      "setype": null, 
      "seuser": null, 
      "src": null, 
      "status_code": [ 
       200 
      ], 
      "timeout": 30, 
      "unsafe_writes": null, 
      "url": "http://cluster01:8080/crumbIssuer/api/json", 
      "url_password": "admin", 
      "url_username": "admin", 
      "use_proxy": true, 
      "user": "admin", 
      "validate_certs": true 
     }, 
     "module_name": "uri" 
    }, 
    "json": { 
     "_class": "hudson.security.csrf.DefaultCrumbIssuer", 
     "crumb": "ad67abc734af7eae279df5c68098a29e", 
     "crumbRequestField": "Jenkins-Crumb" 
    }, 
    "msg": "OK (unknown bytes)", 
    "redirected": false, 
    "server": "Jetty(9.2.z-SNAPSHOT)", 
    "status": 200, 
    "url": "http://cluster01:8080/crumbIssuer/api/json", 
    "x_content_type_options": "nosniff", 
    "x_jenkins": "2.32.2", 
    "x_jenkins_session": "3abb7e45" 
} 

TASK [jenkins : Plugins are installed] ***************************************** 
task path: /Users/chris/Projects/ci/roles/jenkins/tasks/install_plugin.yml:15 
Using module file /usr/local/Cellar/ansible/2.2.0.0_2/libexec/lib/python2.7/site-packages/ansible/modules/core/network/basics/uri.py 
<cluster01> ESTABLISH SSH CONNECTION FOR USER: vagrant 
<cluster01> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o 'IdentityFile=".vagrant/machines/cluster01/virtualbox/private_key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=vagrant -o ConnectTimeout=10 -o ControlPath=/Users/chris/.ansible/cp/ansible-ssh-%h-%p-%r cluster01 '/bin/sh -c '"'"'(umask 77 && mkdir -p "` echo $HOME/.ansible/tmp/ansible-tmp-1486148016.66-148559593691735 `" && echo ansible-tmp-1486148016.66-148559593691735="` echo $HOME/.ansible/tmp/ansible-tmp-1486148016.66-148559593691735 `") && sleep 0'"'"'' 
<cluster01> PUT /var/folders/g5/h48p994d3qn7d9_nz7xv2lvh0000gn/T/tmp1RWIY4 TO /home/vagrant/.ansible/tmp/ansible-tmp-1486148016.66-148559593691735/uri.py 
<cluster01> SSH: EXEC sftp -b - -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o 'IdentityFile=".vagrant/machines/cluster01/virtualbox/private_key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=vagrant -o ConnectTimeout=10 -o ControlPath=/Users/chris/.ansible/cp/ansible-ssh-%h-%p-%r '[cluster01]' 
<cluster01> ESTABLISH SSH CONNECTION FOR USER: vagrant 
<cluster01> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o 'IdentityFile=".vagrant/machines/cluster01/virtualbox/private_key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=vagrant -o ConnectTimeout=10 -o ControlPath=/Users/chris/.ansible/cp/ansible-ssh-%h-%p-%r cluster01 '/bin/sh -c '"'"'chmod u+x /home/vagrant/.ansible/tmp/ansible-tmp-1486148016.66-148559593691735/ /home/vagrant/.ansible/tmp/ansible-tmp-1486148016.66-148559593691735/uri.py && sleep 0'"'"'' 
<cluster01> ESTABLISH SSH CONNECTION FOR USER: vagrant 
<cluster01> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o 'IdentityFile=".vagrant/machines/cluster01/virtualbox/private_key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=vagrant -o ConnectTimeout=10 -o ControlPath=/Users/chris/.ansible/cp/ansible-ssh-%h-%p-%r -tt cluster01 '/bin/sh -c '"'"'sudo -H -S -n -u root /bin/sh -c '"'"'"'"'"'"'"'"'echo BECOME-SUCCESS-qixxmffrdktqhuyukutskswbxfsaxrdd; /usr/bin/python /home/vagrant/.ansible/tmp/ansible-tmp-1486148016.66-148559593691735/uri.py; rm -rf "/home/vagrant/.ansible/tmp/ansible-tmp-1486148016.66-148559593691735/" > /dev/null 2>&1'"'"'"'"'"'"'"'"' && sleep 0'"'"'' 
fatal: [cluster01]: FAILED! => { 
    "cache_control": "must-revalidate,no-cache,no-store", 
    "changed": false, 
    "connection": "close", 
    "content": "<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"/>\n<title>Error 403 No valid crumb was included in the request</title>\n</head>\n<body><h2>HTTP ERROR 403</h2>\n<p>Problem accessing /pluginManager/installNecessaryPlugins. Reason:\n<pre> No valid crumb was included in the request</pre></p><hr><i><small>Powered by Jetty://</small></i><hr/>\n\n</body>\n</html>\n", 
    "content_length": "387", 
    "content_type": "text/html; charset=ISO-8859-1", 
    "date": "Fri, 03 Feb 2017 18:53:37 GMT", 
    "failed": true, 
    "invocation": { 
     "module_args": { 
      "backup": null, 
      "body": "<jenkins><install plugin=\"[email protected]\" /></jenkins>", 
      "body_format": "raw", 
      "content": null, 
      "creates": "/var/jenkins_home/plugins/git", 
      "delimiter": null, 
      "dest": null, 
      "directory_mode": null, 
      "follow": false, 
      "follow_redirects": "safe", 
      "force": false, 
      "force_basic_auth": false, 
      "group": null, 
      "headers": { 
       "Content-Type": "text/xml", 
       "Jenkins-Crumb": "ad67abc734af7eae279df5c68098a29e" 
      }, 
      "http_agent": "ansible-httpget", 
      "method": "POST", 
      "mode": null, 
      "owner": null, 
      "password": "admin", 
      "regexp": null, 
      "remote_src": null, 
      "removes": null, 
      "return_content": false, 
      "selevel": null, 
      "serole": null, 
      "setype": null, 
      "seuser": null, 
      "src": null, 
      "status_code": [ 
       200 
      ], 
      "timeout": 30, 
      "unsafe_writes": null, 
      "url": "http://cluster01:8080/pluginManager/installNecessaryPlugins", 
      "url_password": "admin", 
      "url_username": "admin", 
      "use_proxy": true, 
      "user": "admin", 
      "validate_certs": true 
     }, 
     "module_name": "uri" 
    }, 
    "msg": "Status code was not [200]: HTTP Error 403: No valid crumb was included in the request", 
    "redirected": false, 
    "server": "Jetty(9.2.z-SNAPSHOT)", 
    "status": 403, 
    "url": "http://cluster01:8080/pluginManager/installNecessaryPlugins", 
    "x_content_type_options": "nosniff" 
} 

ich die ganze Build (Vagrant und ansible) zu github

0.123.516 gedrückt haben

Antwort

0

Ich lief auch in diesem und festgestellt, dass Sie force_basic_auth: True in Ihrer uri Aufgabe angeben müssen, die die Plugins installiert. Ich sehe, dass Sie es in der Aufgabe haben, die die crumb_token-Variable (name: Get Jenkins crumb) registriert, so dass Sie es nur zur name: Plugins are installed Aufgabe hinzufügen müssen.

Verwandte Themen