1. 安裝git、java JDK
如果系統(tǒng)中已經(jīng)安裝了jdk,可以直接使用系統(tǒng)中的Java
例如:
aa@ubuntu:~$ uname -a
Linux ubuntu 4.10.0-42-generic #46-Ubuntu SMP Mon Dec 4 14:38:01 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
aa@ubuntu:~$
aa@ubuntu:~$ which java
/usr/bin/java
aa@ubuntu:~$ java -version
openjdk version "1.8.0_151"
OpenJDK Runtime Environment (build 1.8.0_151-8u151-b12-0ubuntu0.16.04.2-b12)
OpenJDK 64-Bit Server VM (build 25.151-b12, mixed mode)
aa@ubuntu:~$ file /usr/bin/java
/usr/bin/java: symbolic link to /etc/alternatives/java
aa@ubuntu:~$ file /etc/alternatives/java
/etc/alternatives/java: symbolic link to /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
可見,在這臺(tái)ubuntu里面已經(jīng)安裝了JDK,安裝路徑在 /usr/lib/jvm/java-8-openjdk-amd64
可以把這個(gè)JDK的路徑加入到 .bashrc
aa@ubuntu:~$ echo export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 >> ~/.bashrc
aa@ubuntu:~$ . .bashrc
aa@ubuntu:~$ echo $JAVA_HOME
/usr/lib/jvm/java-8-openjdk-amd64
如果沒有安裝Jdk
aa@ubuntu:~$ sudo apt-cache search jdk | grep jdk
[sudo] password for aa:
default-jdk - Standard Java or Java compatible Development Kit
default-jdk-doc - Standard Java or Java compatible Development Kit (documentation)
default-jdk-headless - Standard Java or Java compatible Development Kit (headless)
gcj-5-jdk - GCJ and Classpath development tools for Java(TM)
openjdk-8-dbg - Java runtime based on OpenJDK (debugging symbols)
openjdk-8-demo - Java runtime based on OpenJDK (demos and examples)
openjdk-8-doc - OpenJDK Development Kit (JDK) documentation
openjdk-8-jdk - OpenJDK Development Kit (JDK)
openjdk-8-jdk-headless - OpenJDK Development Kit (JDK) (headless)
openjdk-8-jre - OpenJDK Java runtime, using Hotspot JIT
openjdk-8-jre-headless - OpenJDK Java runtime, using Hotspot JIT (headless)
openjdk-8-source - OpenJDK Development Kit (JDK) source files
gcj-4.8-jdk - GCJ and Classpath development tools for Java(TM)
gcj-4.9-jdk - GCJ and Classpath development tools for Java(TM)
gcj-jdk - gcj and Classpath development tools for Java(TM)
libhtsjdk-java - Java API for high-throughput sequencing data (HTS) formats
libhtsjdk-java-doc - Documentation for the java HTSJDK library
openjdk-8-jre-dcevm - Alternative VM for OpenJDK 8 with enhanced class redefinition
openjdk-8-jre-zero - Alternative JVM for OpenJDK, using Zero/Shark
openjdk-9-dbg - Java runtime based on OpenJDK (debugging symbols)
openjdk-9-demo - Java runtime based on OpenJDK (demos and examples)
openjdk-9-doc - OpenJDK Development Kit (JDK) documentation
openjdk-9-jdk - OpenJDK Development Kit (JDK)
openjdk-9-jdk-headless - OpenJDK Development Kit (JDK) (headless)
openjdk-9-jre - OpenJDK Java runtime, using Hotspot JIT
openjdk-9-jre-headless - OpenJDK Java runtime, using Hotspot JIT (headless)
openjdk-9-source - OpenJDK Development Kit (JDK) source files
uwsgi-plugin-jvm-openjdk-8 - Java plugin for uWSGI (OpenJDK 7)
uwsgi-plugin-jwsgi-openjdk-8 - JWSGI plugin for uWSGI (OpenJDK 7)
uwsgi-plugin-ring-openjdk-8 - Closure/Ring plugin for uWSGI (OpenJDK 7)
uwsgi-plugin-servlet-openjdk-8 - JWSGI plugin for uWSGI (OpenJDK 7)
openjdk-8-jre-jamvm - Transitional package for obsolete JamVM for OpenJDK
直接 apt-get install openjdk-9-jdk 或者 openjdk-8-jdk 即可。
2. 安裝mvn,如果需要
步驟基本跟安裝JDK一樣。
3. Gradle,使用gradle wrapper。
Ubuntu 自帶的gradle 版本太老,對(duì)于 CompileOnly 不支持。
aa@ubuntu:~$ which gradle
/usr/bin/gradle
aa@ubuntu:~$ gradle -version
------------------------------------------------------------
Gradle 2.10
------------------------------------------------------------
Build time: 2016-01-26 15:17:49 UTC
Build number: none
Revision: UNKNOWN
Groovy: 2.4.5
Ant: Apache Ant(TM) version 1.9.6 compiled on July 8 2015
JVM: 1.8.0_151 (Oracle Corporation 25.151-b12)
OS: Linux 4.10.0-42-generic amd64
4. 設(shè)置環(huán)境變量
export M2_HOME=/usr/share/maven
export M2=$M2_HOME/bin
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
5. 下載tomcat、Jenkins
wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war
wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-8/v8.5.29/bin/apache-tomcat-8.5.29.tar.gz
解壓tomcat。
為了實(shí)施遠(yuǎn)程調(diào)試,需要分別把tomat放在兩個(gè)目錄下,分別叫做:
$ ls
apache-tomcat-8.5.29_jenkins apache-tomcat-8.5.29_projects
之所以需要把tomcat分別放在兩個(gè)目錄下,一個(gè)用來啟動(dòng)Jenkins,一個(gè)用來啟動(dòng)項(xiàng)目,是因?yàn)樵诤竺?strong>配置遠(yuǎn)程調(diào)試,打開JDWP 的端口的時(shí)候,總是報(bào)錯(cuò):
gradle clean build run
ERROR: transport error 202: bind failed: Address already in use
把 jenkins.war 放到 apache-tomcat-8.5.29_jenkins/webapps/下
mv jenkins.war apache-tomcat-8.5.29_jenkins/webapps/
修改啟動(dòng)Jenkins的tomcat的監(jiān)聽端口,監(jiān)聽7070端口。
用來啟動(dòng)項(xiàng)目的tomcat的端口,監(jiān)聽8080
啟動(dòng)監(jiān)聽7070端口的tomcat
在瀏覽器地址欄輸入:http://192.168.2.180:7070/jenkins/
7. 按照導(dǎo)航,解鎖密碼、安裝插件、添加用戶




這里,因?yàn)轫?xiàng)目是用的gitlab,所以特意安裝了gitlab的插件


8. 全局工具配置:JDK 和 git
Jdk


9. 項(xiàng)目配置:


選擇“構(gòu)建一個(gè)自由風(fēng)格的軟件項(xiàng)目”。
任務(wù)名稱不要使用中文。


注意:這里的項(xiàng)目地址,一定要填
https://gitlab.com/company/project.git 而不是 https://gitlab.com/company/project
否則,會(huì)報(bào):
error: RPC failed; result=22, HTTP code = 404
fatal: The remote end hung up unexpectedly

構(gòu)建這一步是最重要的配置:

選擇“Use Gradle Wrapper”,并且選擇下面的 “Force GRADLE_USER_HOME to use workspace”,同時(shí)跳過 test, 使用 -x 開關(guān)。
10. 構(gòu)建:
點(diǎn)擊“立即構(gòu)建”之后,可以點(diǎn)擊當(dāng)前構(gòu)建右側(cè)向下的箭頭,點(diǎn)擊“控制臺(tái)輸出”,查看構(gòu)建日志。


11. 部署:
構(gòu)建完成之后,可以部署在本地或者遠(yuǎn)程服務(wù)器上。
本地部署:
構(gòu)建完成之后,添加執(zhí)行shell 腳本:

在文本框里輸入以下腳本:
#!/bin/bash
#copy file and restart tomcat
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export CATALINA_HOME=/home/aa/apache-tomcat-8.5.29_projects
export CATALINA_BASE=/home/aa/apache-tomcat-8.5.29_projects
export BUILD_ID=dontKillMe
tomcat_path=/home/aa/apache-tomcat-8.5.29_projects
project=checkup
war_name=demo.war
#宿主服務(wù)器的ip何端口
war_path=http://192.168.2.180:8080/jenkins/job/${project}/ws/targetserver_port=8080
#編譯好的war包存放地址
file_path=~/.jenkins/workspace/${project}/build/libs
$tomcat_path/bin/shutdown.sh
sleep 3s
echo "rm -rf ${tomcat_path}/webapps/ROOT/*"
rm -rf ${tomcat_path}/webapps/ROOT/*
cd $file_path
cp ${war_name} ${tomcat_path}/webapps/ROOT/
cd $tomcat_path/webapps/ROOT/
unzip ${war_name}
rm -rf ${war_name}
sleep 5s
#$tomcat_path/bin/startup.sh
cd $tomcat_path/bin/
./startup.sh
echo "server restarted"

12. 遠(yuǎn)程調(diào)試:
假設(shè)192.168.2.180是遠(yuǎn)程構(gòu)建、測(cè)試服務(wù)器。要完成jenkins構(gòu)建部署、遠(yuǎn)程調(diào)試,需要起兩個(gè)tomcat分別監(jiān)聽不同的端口。
假設(shè)部署了Jenkins的tomcat監(jiān)聽了7070端口。需要遠(yuǎn)程調(diào)試的tomcat監(jiān)聽了8080端口。
監(jiān)聽7070端口的tomcat所在的路徑是: ~/apache-tomcat-8.5.29_jenkins
監(jiān)聽8080端口的tomcat所在的路徑是: ~/apache-tomcat-8.5.29_projects
打開IntelliJ IDEA,build-> Edit Build Configuration

添加remote 選項(xiàng)


復(fù)制JVM的相關(guān)參數(shù)
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
配置服務(wù)器Tomcat
進(jìn)入~/apache-tomcat-8.5.29_projects/bin目錄下
vi catalina.sh
#在# OS specific support.上面添加
export JAVA_OPTS='-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005'

使用 $tomcat_path/bin/shutdown.sh 來關(guān)閉監(jiān)聽8080端口的tomcat,會(huì)帶來一個(gè)問題,就是這個(gè)腳本會(huì)把監(jiān)聽7070端口的部署了Jenkins的tomcat也殺掉。
shutdown.sh 這個(gè)腳本會(huì)接受一個(gè)參數(shù):CATALINA_PID。這個(gè)參數(shù)指向一個(gè)文件,文件里保存了指定要?dú)⑺赖膖omcat的pid。
問題在于使用 $tomcat_path/bin/startup.sh 并沒有指定這個(gè)參數(shù),告訴它啟動(dòng)的時(shí)候把pid寫入一個(gè)文件。所以這一步需要先做。
start.sh
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export CATALINA_HOME=/home/aa/projects
export CATALINA_BASE=/home/aa/projects
export CATALINA_PID=${CATALINA_BASE}/tomcat.pid
${CATALINA_HOME}/bin/catalina.sh start
stop.sh
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export CATALINA_HOME=/home/aa/apache-tomcat-8.5.29_projects
export CATALINA_BASE=/home/aa/apache-tomcat-8.5.29_projects
export CATALINA_PID=${CATALINA_BASE}/tomcat.pid
${CATALINA_HOME}/bin/catalina.sh stop
把這兩個(gè)腳本放到 ~/apache-tomcat-8.5.29_projects/bin 路徑下。修改上面的“本地部署”步驟里的腳本
export M2_HOME=/usr/share/maven
export M2=$M2_HOME/bin
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export CATALINA_HOME=/home/aa/apache-tomcat-8.5.29_projects
export CATALINA_BASE=/home/aa/apache-tomcat-8.5.29_projects
export BUILD_ID=dontKillMe
#我的Tomcat位置
tomcat_path=/home/aa/apache-tomcat-8.5.29_projects
#我的項(xiàng)目編譯的名稱
project=checkup
#最后打包的war名稱
war_name=demo.war
#宿主服務(wù)器的ip何端口
war_path=http://192.168.2.180:8080/jenkins/job/${project}/ws/targetserver_port=8080
#編譯好的war包存放地址
file_path=~/.jenkins/workspace/${project}/build/libs
$tomcat_path/bin/stop.sh
sleep 3s
echo "rm -rf ${tomcat_path}/webapps/ROOT/*"
rm -rf ${tomcat_path}/webapps/ROOT/*
cd $file_path
cp ${war_name} ${tomcat_path}/webapps/ROOT/
cd $tomcat_path/webapps/ROOT/
unzip ${war_name}
rm -rf ${war_name}
sleep 5s
cd $tomcat_path/bin/
./start.sh
echo "server restarted"
這樣就解決了調(diào)用 ~/apache-tomcat-8.5.29_projects/bin/shutdown.sh 連監(jiān)聽7070端口的tomcat也殺掉的問題了。
13. 問題:
13.1. 權(quán)限問題:
最好是在自己的目錄下單獨(dú)放一個(gè)tomcat來啟動(dòng)jenkins,而不是使用系統(tǒng)安裝的jenkins,這會(huì)涉及到權(quán)限問題,會(huì)很非常麻煩。
Error
Unable to create the home directory ‘/usr/share/tomcat7/.jenkins’. This is most likely a permission problem.
或者,根據(jù)網(wǎng)上的說法,可以設(shè)置一個(gè)JENKINS_HOME的變量:
To change the home directory, use JENKINS_HOME environment variable or set the JENKINS_HOME system property. See Container-specific documentation for more details of how to do this.
13.2. 202的問題:
gradle clean build run
ERROR: transport error 202: bind failed: Address already in use
這個(gè)情況,一般是在在tomcat/bin/catalina.sh中有如下的配置:
CATALINA_OPTS="-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=12343"
即:打開了遠(yuǎn)程調(diào)試的端口。