32

Ansible を使用して Jenkins サービスを再起動しようとしています。

- name: Restart Jenkins to make the plugin data available
  service: name=jenkins state=restarted

- name: Wait for Jenkins to restart
  wait_for:
    host=localhost
    port=8080
    delay=20
    timeout=300

- name: Install Jenkins plugins
  command:
    java -jar {{ jenkins_cli_jar }} -s {{ jenkins_dashboard_url }} install-plugin {{ item }}
    creates=/var/lib/jenkins/plugins/{{ item }}.jpi
  with_items: jenkins_plugins

しかし、最初の実行で、3 番目のタスクはこれを含む多くの Java エラーをスローします:Suppressed: java.io.IOException: Server returned HTTP response code: 503 for URLこれは、Web サーバー (Jenkins によって完全に処理される) の準備ができていないと思わせます。ブラウザーを使用して Jenkins ダッシュボードにアクセスすると、Jenkins の準備ができておらず、準備ができたらリロードするというメッセージが表示されることがありますが、問題なく動作します。しかし、ページにアクセスすることがサーバーを起動するのか、それとも何なのかはわかりません。

だから私が必要なのは、httpコードが200になるまで何度もカールすることだと思いますか? 他に方法はありますか?

いずれにせよ、どうすればいいですか?

通常、ジェンキンスをどのように再起動しますか?

4

5 に答える 5

62

URI モジュールの使用http://docs.ansible.com/ansible/uri_module.html

   - name: "wait for ABC to come up"
     uri:
       url: "http://127.0.0.1:8080/ABC"
       status_code: 200
     register: result
     until: result.status == 200
     retries: 60
     delay: 1
于 2015-12-30T03:51:39.167 に答える
29

untilちょうど学んだcurl + Ansibleの を使用して解決しました。http ステータス コードが 200 OK になるまでページをリクエストします。

- name: Wait untils Jenkins web API is available
  shell: curl --head --silent http://localhost:8080/cli/
  register: result
  until: result.stdout.find("200 OK") != -1
  retries: 12
  delay: 5
于 2014-05-30T14:44:45.190 に答える
2

@ChocoDeveloperの回答のも​​う少し正確なバージョン。このバージョンでは、HTTP応答から生のstdoutを検索するのではなく、特定の応答コードを確認できます

- name: "wait for ABC to come up"
  shell: "curl --silent -o /dev/null -w '%{http_code}' http://127.0.0.1:8080/ABC"
  register: result
  until: result.stdout.find("401") != -1
  retries: 60
  delay: 1
于 2015-12-30T02:44:12.360 に答える