Memo/Jenkins

https://dexlab.net:443/pukiwiki/index.php?Memo/Jenkins
 

Jenkins


書籍


jobの管理


ansibleでのjob管理

  • jenkins crumbの取得
    - name: jenkins crumb
      uri:
        url: '{{ jenkins_host }}/crumbIssuer/api/json'
        method: GET
        user: "{{ jenkins_user }}"
        password: "{{ jenkins_password }}"
        force_basic_auth: yes
        status_code:
          - 200
        return_content: yes
      register: jenkins_crumb
  • job xmlのexport
    - name: Get config.xml
      uri:
        url: '{{ jenkins_host }}/job/{{ job_name }}/config.xml'
        method: GET
        user: "{{ jenkins_user }}"
        password: "{{ jenkins_password }}"
        force_basic_auth: yes
        headers:
          Jenkins-Crumb: "{{ jenkins_crumb.json.crumb }}"
          Cookie: "{{ jenkins_crumb.set_cookie }}"
        status_code:
          - 200
          - 201
        return_content: yes
      register: result_job
    
    - name: Export job
      copy:
        dest: "{{ dest_path }}/{{ job_name }}.config.xml"
        content: "{{ result_job.content }}"
  • job xmlからjobの作成: jenkins_jobと違いpip moduleに依存しない。
    - name: createItem
      uri:
        url: '{{ jenkins_host }}/createItem?name={{ job_name }}'
        method: POST
        user: "{{ jenkins_user }}"
        password: "{{ jenkins_password }}"
        force_basic_auth: yes
        headers:
          Jenkins-Crumb: "{{ jenkins_crumb.json.crumb }}"
          Cookie: "{{ jenkins_crumb.set_cookie }}"
          Content-type: "text/xml"
        body_format: raw
        body: "{{ lookup('file','/tmp/ansible-tmp.{{ job_name  }}.xml') }}"
        status_code:
          - 200
          - 201

トラブルシューティング


pluginを無効化したら起動しなくなった場合

GUIからpluginを無効化して、jenkinsが起動しなくなった場合、「<plugin>.disabled」ファイルを消すと、pluginが有効になる。

  • jenkins 2.204.x
    jenkins_plugin=<plugin name>
    rm $JENKINS_HOME/plugins/${jenkins_plugin}.jpi.disabled
    sudo service jenkins restart

job毎に権限を設定する

特定のユーザは特定のjobの実行のみできる等の権限を絞りたい。


API

curlでjob単体の状態を得る。jqでjsonの整形。

  • Jenkins 1.384まではcrumbの指定が必須だった。
jenkins_url=https://jenkins.example.com:8080/jenkins
cookie_jar=/tmp/cookies
jenkins_job=test01
jenkins_user=user01
read -sp 'jenkins_password: ' jenkins_password

# clumbの取得
jenkins_clumb=$(curl -s -u "${jenkins_user}:${jenkins_password}" -c $cookie_jar ${jenkins_url}/crumbIssuer/api/json | jq -r '.crumb')

# job単体の取得
curl -s -u "${jenkins_user}:${jenkins_password}" -H "Jenkins-Crumb:${jenkins_clumb}" ${jenkins_url}/job/${jenkins_job}/api/json | jq

curlでjobの実行:

  • jenkins_clumbの取得までは上と同じ
    curl -s -u "${jenkins_user}:${jenkins_password}" \
    -H "Jenkins-Crumb:${jenkins_clumb}" \
    -b $cookie_jar ${jenkins_url}/job/${jenkins_job}/buildWithParameters?id=123 \
    --data-urlencode json='{}'

ユーザの権限管理

  • 指定ユーザがjobの実行だけできるように

v1からv2への移行


コードで管理

  • Ansible module に幾つかある
    • jenkins_job - Manage jenkins jobs
    • jenkins_job_facts - Get facts about Jenkins jobs
    • jenkins_plugin - Add or remove Jenkins plugin
    • jenkins_script - Executes a groovy script in the jenkins instance

プラグイン


サーバをマスター/スレーブ構成にして分散ビルド

  • SSHスレーブ
    • 非対話モードになるので環境変数は ~/.bashrc (/etc/bashrc) が使われる。 ~/.bash_profile (/etc/bash_profile)は使われない。

外部ジョブの監視


手動インストール


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2020-02-12 (水) 15:00:50 (13d)