1. 程式人生 > >Jenkins+maven+git的可持續整合實踐

Jenkins+maven+git的可持續整合實踐

概述

相關資料

實踐操作

說明:JDK、SSHD已經預設安裝了,這裡就不復述了。

安裝Tomcat

安裝maven

  1. maven官網下載maven最新的安裝包apache-maven-3.0.4-bin.tar.gz,並解壓至/usr/local/目錄,或可選地修改maven的使用使用者:sudo chown -R user:group apache-maven-3.0.4 或者 chmod 777 apache-maven-4.0.4 -R
  2. 新增M2_HOME環境變數:在/etc/environment或~/.bashrc檔案中新增
export M2_HOME=/usr/local/apache-maven-3.0
.4 export PATH=$PATH:$M2_HOME/bin #optional export MAVEN_OPTS="-Xms256m -Xmx512m"

安裝git

ubuntu下直接apt-get install git -y即可安裝。
安裝完後,執行git --version看看版本資訊:

[email protected]36ab2c1af70e:~# git --version
git version 1.9.1

安裝Jenkins

Jenkins官網下載最新版本的war包。然後放入到tomcat的webapps目錄下:
這裡使用Jenkins預設的工作空間。
啟動tomcat,然後訪問:

http://localhost:8080/jenkins 即可看到頁面。

但是卻看到如下的錯誤資訊:

AWT is not properly configured on this server. Perhaps you need to run your container with "-Djava.awt.headless=true"? See also: https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+got+java.awt.headless+problem

java.lang.UnsatisfiedLinkError: /mnt/jdk1.8/jre/lib/amd64/libawt_xawt.so: libXrender.so.1
: cannot open shared object file: No such file or directory at java.lang.ClassLoader$NativeLibrary.load(Native Method) at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941) at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1824) at java.lang.Runtime.load0(Runtime.java:809) at java.lang.System.load(System.java:1086) at java.lang.ClassLoader$NativeLibrary.load(Native Method) at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941) at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1845) at java.lang.Runtime.loadLibrary0(Runtime.java:870) at java.lang.System.loadLibrary(System.java:1122) at java.awt.Toolkit$3.run(Toolkit.java:1636) at java.awt.Toolkit$3.run(Toolkit.java:1634) at java.security.AccessController.doPrivileged(Native Method) at java.awt.Toolkit.loadLibraries(Toolkit.java:1633) at java.awt.Toolkit.<clinit>(Toolkit.java:1668) at java.awt.Font.<clinit>(Font.java:246) at hudson.util.ChartUtil.<clinit>(ChartUtil.java:255) at hudson.WebAppMain.contextInitialized(WebAppMain.java:186) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4842) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5303) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:725) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717) at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1092) at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1834) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745)

根據上面的提示,發現是少了libxrender,於是執行命令

sudo apt-get install libxrender-dev

完成後重啟tomcat,發現又有新的錯誤:

java.lang.UnsatisfiedLinkError: /mnt/jdk1.8/jre/lib/amd64/libawt_xawt.so: libXtst.so.6: cannot open shared object file: No such file or directory

於是執行命令:

apt-get install libxtst-dev

繼續重啟tomcat。
重新整理頁面,可以看到正常啟動了

啟動完後,需要輸入管理員密碼:

去伺服器的/root/.jenkins/secrets/initialAdminPassword檢視密碼,輸入密碼然後繼續。

然後選擇需要安裝的plugin,接著等待外掛安裝完成

這個過程很慢(看個人網路),可能有些外掛安裝不了(應該是被牆了),但是隻要git安裝也就行。安裝完後,設定管理員賬號跟密碼,就能開始使用Jenkins了,如圖

後來發現Git plugin 並沒有安裝成功。因為Git plugin 依賴於其他的外掛(Credentials Plugin、SSH Credentials Plugin、Git Client Plugin),然後人工去下載了最新版本的依賴外掛,最後才把git plugin安裝上去。

使用Jenkins

新建任務

點選主介面左上角的“新建”按鈕,彈出如下介面

配置Git倉庫

如圖所示

輸入git地址,如果需要授權登入的話,就新增相應的授權。

配置maven命令

我們希望在git pull完成後,編譯程式碼成jar,然後執行。
如圖所示

  1. Maven Vesion 要選擇正確(可以在配置中修改),不然找不到mvn命令
  2. 先執行mvn clean package -Dmaven.skip.test=true命令,進行編譯,這個根據實際情況來修改
  3. 編譯完後,就要執行jar檔案。此時我們要判斷一下這個jar是否已經執行過了,如果執行中就先kill掉
  4. 最後用nohup後臺執行我們的jar,同時儲存pid到jenkins.pid,方便下次kill掉程序。

這樣的話就能構建專案了。
同時可以配置一個定時器去判斷git上面的程式碼有沒有更新,如果更新了,就自動構建,真是太方便了。