Python
Jenkins
Ansible

AnsibleでJenkinsのviewを管理するモジュールを作ってみたよ

Jenkins離れが叫ばれて久しいですが
皆さんいかがお過ごしでしょうか。
私もJenkins代替ツールをずっと探しているのですが
ジョブを無数に作りまくるという性質上
中々クラウドスケジューラに移行出来ない日々を送っています。

ついにこの間管理している1ジェンキンスサーバが1000タスクを越えてしまいました。

viewの管理

さて、そんなこんなでJenkinsを使い倒している訳ですが
基本的にはAnsibleで作業を完結したいと思っています。
ジョブの管理はこの間記事に書いたのですが
ビューの管理はAnsible2.4時点では出来ません。
というか、JenkinsではJenkinsの操作は下の3つしかありません。

http://docs.ansible.com/ansible/2.4/list_of_all_modules.html

jenkins_job - Manage jenkins jobs
jenkins_plugin - Add or remove Jenkins plugin
jenkins_script - Executes a groovy script in the jenkins instance

手で毎回作業するのも辛かったので、モジュールを作ってみました。

Ansible-Jenkins-view

https://github.com/cahlchang/ansible-jenkins-view

ソースコードはこれだけですね
https://github.com/cahlchang/ansible-jenkins-view/blob/master/library/jenkins_view.py

しくみ

ソースコードも短いので読んで頂ければ簡単に追えるのですが
単なるPythonのJenkinsライブラリのラッパーになっています。
ただこのライブラリもXMLを頑張るタイプのライブラリなので
ラッパー挟むだけでも使い勝手よくなりますね。

使い方

サンプル(Github上のREADME.md内と同じものです)

sample_task
- hosts: jenkins_host
  tasks:
    - set_fact:
        list_view_example:
          - name: example_view
            list_job:
              - exmpla_job_a
              - exmpla_job_b
              - exmpla_job_c
              - exmpla_job_d
        list_view_regex_example:
          - name: example_regexp_view
            list_job:
              - exmpla_job_a
            ptn_regex: "exmpla_regex_job.*"

    - name: "Create ordinary view"
      jenkins_view:
        name: "{{ item.name }}"
        list_job: "{{ item.list_job | join(',') }}"
      with_items:
        - "{{ list_view_example }}"

    - name: "Create a job with regular expressions"
      jenkins_view:
        name: "{{ item.name }}"
        list_job: "{{ item.list_job | join(',') }}"
        regex: "{{ item.ptn_regex }}"
      with_items:
        - "{{ list_view_regex_example }}"

シンプルにJenkinsの情報とジョブ名
もしくは正規表現を入れます。
サンプルではset_factで定義してますが
直接記載しても問題ありません。

list_viewで指定するジョブは設定するジョブをカンマで繋げてください。
ここ、どうしようかと迷って色々モジュールを見てみたんですが
Route53のvalueがカンマ区切りで指定するようなので真似してみました。
…だったはずなのですが、今みたら普通にリスト指定も出来るのか。

冪等性とか

一応まじめに対応してます。
細かい所はソースに書いてる通りなのですが
正規表現とかも含め一通り使えるものにはなってるんじゃないかなぁと。

課題点

正規表現入りのビューパラメーターを1回作ってから消した時
「 」という空スペース1つだけの
正規表現のビューパラメーターが入ってしまいます。
jenkins-pythonライブラリには
正規表現のビューパラメーターを設定出来るのですが
消すことは出来ないみたいで。

正規表現のパラメーターを含まないXMLを設定しても
「 」という空スペース1つだけのパラメーターが入ってしまいます。
代替の場面において運用には困らないと思うのですが…。

まとめ

Ansibleモジュールは作ってみると結構簡単に出来るなーって印象です。
コマンドラインのAPIやライブラリが用意されてる物なら
結構簡単にできちゃいますね。
これからもどんどんモジュールを作って運用を楽にしていきたいですね。