基于Jenkins, Apache Mesos和Marathon的彈性高可用的持續集成環境(下篇)

jopen 9年前發布 | 21K 次閱讀 Jenkins 項目構建

基于Jenkins, Apache Mesos和Marathon的彈性高可用的持續集成環境(上篇), 探討了利用 marathon/Mesos 管理Jenkins集群的整個架構流程,以及如何一步步配置 Jenkins Master 來將其注冊成為 Mesos 的 Framework 。本篇博客,我們主要解決Jenkins Master的數據持久化問題,marathon會在Jenkins Master因意外崩潰后重新部署其到某個mesos slave節點上,但marathon無法維護應用程序的數據,即我們需要一個 Jenkins Master 的數據持久化方法,由于Jenkins Master是將數據存儲在XML文件而不是數據庫中,這里可以利用jenkins插件SCM Sync configuration plugin來將Jenkins Master的數據同步到相應的repo。

在內部的代碼庫或者 github 上創建一個 git repo

我們需要在內部的代碼庫或者公共代碼庫創建一個名為 jenkins-on-mesos 的 gitrepo , 譬如:git@gitlab.dataman.io:wtzhou/jenkins-on-mesos.git 。 這個 repo 是 jenkins 插件 SCM Sync configuration plugin 用來同步jenkins數據的。

另外,對于SCM-Sync-Configuration來說,非常關鍵的一步是保證其有權限 pull/push 上面我們所創建的gitrepo。 以我們公司的內部環境為例, 在mesos集群搭建時,我們首先使用ansible為所有的mesos slave節點添加了用戶core并生成了相同的ssh keypair,同時在內部的gitlab上注冊了用戶core并上傳其在slave節點上的公鑰,然后添加該用戶core為repo git@gitlab.dataman.io:wtzhou/jenkins-on-mesos.gitdeveloper或者owner,這樣每個mesos slave節點都可以以用戶core來 pull/push 這個gitrepo了。

使用 marathon 部署可持久化的 Jenkins Master

我們首先需要wget兩個文件:

wget -O start-jenkins.app.sh https://raw.githubusercontent.com/Dataman-Cloud/jenkins-on-mesos/master/start-jenkins.app.sh.template
  wget https://raw.githubusercontent.com/Dataman-Cloud/jenkins-on-mesos/master/marathon.json

其中start-jenkins.app.sh是需要配置的,

#! /bin/bash

  # Sync the config with SCM_SYNC_GIT
  # SCM_SYNC_GIT format: git@gitlab.dataman.io:wtzhou/jenkins-on-mesos.git
  SCM_SYNC_GIT=

  # deploy jenkins on marathon as user APP_USER, who has been granted to pull/push repo SCM_SYNC_GIT
  APP_USER=

  # Marathon PORTAL, for example: http://192.168.3.4:8080/v2/apps
  MARATHON_PORTAL=
  ......
  ......
  ......

編輯如下3個變量:

  1. SCM_SYNC_GIT: 上面所配置的 gitrepo 地址, 格式例子: git@gitlab.dataman.io:wtzhou/jenkins-on-mesos.git
  2. APP_USER: marathon 會以用戶 APP_USER 來部署 jenkins ,從而插件SCM-Sync-Configuration會以用戶APP_USER來跟gitrepo進行同步。 所以在我們的這個例子里,我們讓APP_USER=core。
  3. MARATHON_PORTAL: marathon 的 RESTapi 入口,例如: http://marathon.dataman.io:8080/v2/apps

接下來就可以執行命令:

bash start-jenkins.app.sh

來讓 marathon 部署我們的 Jenkins Master 了。這樣, 我們在 Jenkins Master 上所保存的任何配置,創建的任何job都會被SCM-Sync-Configuration同步到repo里,并在 Jenkins Master 被重新發布后 download 到本地。

關于SCM-Sync-Configuration的更多信息

SCM-Sync-Configuration初始化完成后(在我們環境里初始化過程會被自動觸發),每次配置更新或者添加,編輯構建作業時,我們會得到一個提示頁面來為新的 commit message 添加 comment,如下圖所示, commit comment

當前,所支持的配置文件如下:

  1. 構建作業的配置文件 (/jobs/*/config.xml)
  2. 全局的 Jenkins/Hudson 系統配置文件 (/config.xml)
  3. 基本的插件的配置文件 (/hudson*.xml, /scm-sync-configuration.xml)
  4. 用戶手動指定的配置文件

另外,我們可以在每一頁的下面看到 scm sync config 的狀態, 下圖是同步出錯時的截圖,你可以去System Log查看具體的出錯信息。scm sync status

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!