在 CentOS 6.5 上使用 ansible 的 jenkins_job 模塊

運行環境

  • CentOS 6.5
  • ansible 2.6.8
  • 系統自帶python2.6
  • 用戶爲 root

問題/解決

最近試用了一下 ansible 的 jenkins_job 模塊,在這裏整理一下我遇到的問題和解決方法。html

首先是模塊的官方文檔 https://docs.ansible.com/ansi...python

根據官方文檔,須要運行 jenkins_job 的目標機器須要安裝2個依賴,分別是:bash

  • python-jenkins >= 0.4.12
  • lxml >= 3.3.3

首先說 lxml ,若是直接使用系統默認 python 的 pip 安裝,安裝過程當中會報錯:網絡

error: command 'gcc' failed with exit status 1

在網絡上查詢通常的解決辦法都會告知須要安裝 libxml2 和 libxslt 的開發套件,也就是dom

yum install -y libxml2-devel libxslt-devel

可是若是你的系統是新的系統或者很是的「乾淨」的話,你會發現安裝完成以後仍然不能 pip install lxml ,這時還須要安裝 python-devel加密

yum install -y python-devel

安裝完成以後就能夠正常使用 pip 安裝 lxml 了url

pip install lxml

下面說 python-jenkins ,直接使用 pip 安裝上 python-jenkins 後並不能使用,調用 ansible 的 jenkins_job 模塊或者直接在目標主機上的 python 中 import jenkins 會報語法錯誤,像這樣:code

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.6/site-packages/jenkins/__init__.py", line 59, in <module>
    import requests
  File "/usr/lib/python2.6/site-packages/requests/__init__.py", line 43, in <module>
    import urllib3
  File "/usr/lib/python2.6/site-packages/urllib3/__init__.py", line 8, in <module>
    from .connectionpool import (
  File "/usr/lib/python2.6/site-packages/urllib3/connectionpool.py", line 92
    _blocking_errnos = {errno.EAGAIN, errno.EWOULDBLOCK}
                                    ^
SyntaxError: invalid syntax

在網絡上查詢到報錯的緣由是 python-jenkins 最新版本並不支持 python2.6 ,解決方法就是安裝舊版本的 python-jenkins ,這裏就選 jenkins_job 要求的最低版本 0.4.12 就好:xml

pip uninstall python-jenkins
pip install python-jenkins==0.4.12

這時再在目標主機的 python 中 import jenkins 不會報語法錯誤了,只會提示一個 "UserWarning: Support for python 2.6 is deprecated and will be removed." 即將再也不支持 python2.6 ,這個版本能支持那麼就一直使用這個版本好了。htm

使用方法

解決了 jenkins_job 模塊的問題使之能夠調用了以後,下面咱們來看看如何使用這個模塊。根據官網文檔的描述,可使用這個模塊對 jenkins 的 job 進行 建立/刪除/禁用/啓用 的操做,認證方式可使用 jenkins 的用戶名加密碼/token 的方式。下面放個簡單的例子用於禁用某項目:

---
- hosts: localhost
  gather_facts: no
  vars:
  tasks:
  - name: "disable jenkins job"
    jenkins_job:
      url: http://you.jenkins.domainname:port
      user: yourusername
      password: yourpassword
      name: "jenkins_job_name"
      enabled: False

啓用/禁用/刪除 和選擇密碼仍是 token 登陸都很是好理解,下面看一下官方建立項目的例子:

# Create a jenkins job using basic authentication
- jenkins_job:
    config: "{{ lookup('file', 'templates/test.xml') }}"
    name: test
    password: admin
    url: http://localhost:8080
    user: admin

其餘字段都很是好理解,只有 config 字段是得到了 templates/test.xml 這個文件的內容,而對於這個文件裏的內容,並無更多的解釋。這部分應該屬於 jenkins 定義的範圍。不知道是不多人使用仍是我搜索的方法不對,我並無很容易的找到關於這個 xml 文件怎麼定義的文檔,可是我查到其實這個 xml 就是你的 jenkins 目錄下的 jobs/yourJobName/config.xml 。因此最簡單的方法就是在 jenkins 上建立好須要的 job 而後複製出這個 config.xml 文件,這樣你就獲得了你須要的 config 字段中的內容,也能夠在其中修改一些值,改一個現有的配置文件總比從零開始寫要容易。

config 字段除了使用 "{{ lookup('file','xxxx.xml') }}" 的形式以外,還可使用 "{{ lookup('template', 'xxxx.xml.j2') }}" 將 xml 文件改爲 jinja2 模板,這樣就可使用 ansible 的變量動態生成 job 了。

相關文章
相關標籤/搜索