jenkins+ansible+supervisor打造一個web構建釋出系統

菲宇發表於2018-08-01

一步一步用jenkins,ansible,supervisor打造一個web構建釋出系統。

本來應該還有gitlab這一環節的,但是感覺加上,內容會增加很多。所以直接用github上的spring-mvc-showcase專案來做演示。

https://github.com/spring-projects/spring-mvc-showcase

本文的環境用docker來構建。當然也可以任意linux環境下搭建。

如果沒有安裝docker,可以參考官方的文件:
https://docs.docker.com/installation/ubuntulinux/#ubuntu-trusty-1404-lts-64-bit

下面將要介紹的完整流程是:

  1. github作為原始碼倉庫
    • jenkins做為打包伺服器,Web控制伺服器
    • ansible把war包,釋出到遠端機器
      1. 安裝python-pip
      2. 用pip安裝supervisor
      3. 安裝jdk
      4. 下載,部署tomcat
      5. 把tomcat交由supervisor託管
      6. 把jenkins生成的war包釋出到遠端伺服器上
      7. supervisor啟動tomcat
      8. 在http埠等待tomcat啟動成功
    • supervisor託管app程式,提供一個web介面可以檢視程式狀態,日誌,控制重啟等。

在文章的最後,會給出一個完整的docker映象,大家可以自己執行檢視實際效果。

安裝jenkins

  • 先用docker來啟動一個名為“jenkins”的容器:
sudo docker run -i -t -p 8080:8080 -p 8101:8101 -p 9001:9001 --name='jenkins' ubuntu /bin/bash

8080是jenkins的埠,8101是spring-mvc-showcase的埠,9001是supervisor的web介面埠

執行完之後,會得到一個container的shell。接著在這個shell裡安裝其它元件。

  • 安裝open jdk 和 git:
sudo apt-get update
sudo apt-get install openjdk-7-jdk git
  • 下載配置tomcat:
apt-get install wget
mkdir /opt/jenkins
cd /opt/jenkins
wget http://apache.fayea.com/tomcat/tomcat-8/v8.0.18/bin/apache-tomcat-8.0.18.tar.gz
tar xzf apache-tomcat-8.0.18.tar.gz
  • 安裝jenkins:
cd /opt/jenkins/apache-tomcat-8.0.18/webapps
wget http://mirrors.jenkins-ci.org/war/latest/jenkins.war
rm -rf ROOT*
mv jenkins.war ROOT.war
  • 啟動jenkins:
/opt/jenkins/apache-tomcat-8.0.18/bin/startup.sh

然後在本機用瀏覽器訪問:http://localhost:8080/ ,可以看到jenkins的介面了。

配置jenkins

安裝git外掛

安裝git外掛:
https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin

在“系統管理”,“外掛管理”,“可選外掛”列表裡,搜尋“Git Plugin”,這樣比較快可以找到。

因為jenkins用google來檢查網路的連通性,所以可能在開始安裝外掛時會卡住一段時間。

配置maven, java

開啟 http://localhost:8080/configure
在jenkins的系統配置裡,可以找到maven,git,java相關的配置,只要勾選了,在開時執行job時,會自動下載。
jenkins-config-maven

JDK可以選擇剛才安裝好的openjdk,也可以選擇自動安裝oracle jdk。
jenkins-config-openjdk7

Git會自動配置好。

配置ssh服務

安裝sshd服務:

sudo apt-get install openssh-server sshpass

編輯
vi /etc/ssh/sshd_config

PermitRootLogin without-password

改為:

PermitRootLogin yes

重啟ssh服務:

sudo /etc/init.d/ssh restart

為root使用者配置密碼,設定為12345:

passwd

最後嘗試登陸下:

ssh root@127.0.0.1

安裝ansible

在jenkins這個container裡,繼續安裝ansible,用來做遠端釋出用。

先安裝pip,再用pip安裝ansible:

sudo apt-get install python-pip python-dev build-essential git
sudo pip install ansible

配置ansible playbook

把自動釋出的ansible playbook clone到本地:

https://github.com/hengyunabc/jenkins-ansible-supervisor-deploy

mkdir -p /opt/ansible
cd /opt/ansible
git clone https://github.com/hengyunabc/jenkins-ansible-supervisor-deploy

在jenkins上建立deploy job

  • 新建一個maven的專案/job,名為spring-mvc-showcase
    jenkins-new-job-maven

  • 在配置頁面裡,勾選“引數化構建過程”,再依次增加“String”型別的引數

jenkins-new-job-parameters

共有這些引數:

    app    要釋出的app的名字
    http_port     tomcat的http埠
    https_port  tomcat的https埠
    server_port tomcat的server port
    JAVA_OPTS    tomcat啟動的Java引數
    deploy_path   tomcat的目錄
    target_host  要釋出到哪臺機器
    war_path       jenkins生成的war包的目錄
  • “原始碼管理”,選擇Git,再填入程式碼地址

https://github.com/spring-projects/spring-mvc-showcase.git

jenkins-new-job-git

  • 在“Post Steps”裡,增加呼叫ansible playbook的shell命令
    jenkins-new-job-shell-ansible
cd /opt/ansible/jenkins-ansible-supervisor-deploy
ansible-playbook -i hosts site.yml --verbose --extra-vars "target_host=$target_host app=$app http_port=$http_port https_port=$https_port server_port=$server_port deploy_path=$deploy_path JAVA_HOME=/usr JAVA_OPTS=$JAVA_OPTS deploy_war_path=$WORKSPACE/$war_path"

最後,儲存。

測試構建

一切都配置好之後,可以在jenkins介面上,在左邊,選擇“Build with Parameters”,“開始”來構建專案了。

如果構建成功的話,就可以開啟 http://localhost:8101 ,就可以看到spring-mvc-showcase的介面了。

spring-mvc-showcase-webui

開啟 http://localhost:9001 可以看到superviosr的控制網頁,可以檢視tomcat程式的狀態,重啟,檢視日誌等。

supervisor-webui

如果想要釋出到其它機器上的話,只要在
/opt/ansible/jenkins-ansible-supervisor-deploy/hosts

檔案裡增加相應的host配置就可以了。

其它的一些東東

如果提示

to use the 'ssh' connection type with passwords, you must install the sshpass program

則安裝:

sudo apt-get install sshpass

演示的docker image

如果只是想檢視實際執行效果,可以直接把 hengyunabc/jenkins-ansible-supervisor 這個image拉下來,執行即可。

docker run -it -p 8080:8080 -p 8101:8101 -p 9001:9001 --name='jenkins' hengyunabc/jenkins-ansible-supervisor

總結

  • jenkins提供了豐富的外掛,可以定製自己的打包這過程,並可以提供完善的許可權控制
  • ansible可以輕鬆實現遠端部署,配置環境等工作,輕量簡潔,功能強大
  • supervisor託管了tomcat程式,提供了web控制介面,所有執行的程式一目瞭然,很好用

相關文章