jenkins 內建 redmine 賬戶驗證的方案
賴勇浩
Jenkins 是最著名的持續內建工具,又因為它開源免費、插件衆多,成為了許多團隊做持續內建的首選。
Jenkins 本身支援多種賬戶驗證方案,但最棒的是它支援驗證插件,可以把賬戶驗證的工作完全托管給插件,這就為它支援更多的賬戶驗證方案提供了無限可能。
script-realm-plugin 無疑是一個天才的驗證插件,它的天才之處在于可以運作一個指令,并通過環境變量的方式把賬号密碼傳遞給這個指令,然後檢驗它的 exit code 獲得驗證結果。這個指令可以是任意語言編寫的程式,它可以是一段 shell 腳本,也可以是 C 語言編寫的一個程式。在今天它是我們使用 python 編寫的一個小程式:redmine-auth
redmine-auth 是一個讀取 redmine 賬戶資訊的腳本,實作賬戶驗證。
得益于 redmine-auth 使用了 SQLAlchemy 的 database orm,隻要 SQLAlchemy 支援的資料庫,redmine-auth 都可以讀取。是以無論 redmine 使用的是 MySQL 還是 postgresql,甚至是 oracle/mssql/sqlite,都可以無縫地使用 redmine-auth 進行賬戶驗證。
首先,確定安裝了 jenkins 和它的 script-realm-plugin 插件。
然後,確定安裝了 python 和 pip,接下來的工作就很簡單,運作使用:
它會自動安裝依賴的 SQLAlchemy,但是資料庫驅動需要你手動安裝,比如 MySQLdb 需要你自行安裝好。
首先,進入 jenkins 的 Configure Global Security 頁面,確定選擇了“啟用安全”,然後在“通路控制”-> “安全域” 那裡選擇“Authenticat via custom script”(需要安裝插件以後才有),最後,在 login command 輸入框中填入以下内容:
其中“連接配接字元串”是一個符合 SQLAlchemy 連接配接字元串定義的字元串,如:
怎麼構造你自己的連接配接字元串,請參考 SQLAlchemy 的文檔(http://docs.sqlalchemy.org/en/rel_0_8/core/engines.html#sqlalchemy.create_engine)。簡單摘抄最關鍵的一句放在下面:
The string form of the URL is dialect+driver://user:password@host/dbname[?key=value..], where dialect is a database name such as mysql, oracle, postgresql, etc., and driver the name of a DBAPI, such as psycopg2, pyodbc, cx_oracle, etc. Alternatively, the URL can be an instance of URL.