1. 安装git、java JDK
如果系统中已经安装了jdk,可以直接使用系统中的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
可见,在这台ubuntu里面已经安装了JDK,安装路径在 /usr/lib/jvm/java-8-openjdk-amd64
可以把这个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 版本太老,对于 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. 设置环境变量
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。
为了实施远程调试,需要分别把tomat放在两个目录下,分别叫做:
$ ls
apache-tomcat-8.5.29_jenkins apache-tomcat-8.5.29_projects
之所以需要把tomcat分别放在两个目录下,一个用来启动Jenkins,一个用来启动项目,是因为在后面配置远程调试,打开JDWP 的端口的时候,总是报错:
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/
修改启动Jenkins的tomcat的监听端口,监听7070端口。
用来启动项目的tomcat的端口,监听8080
启动监听7070端口的tomcat
在浏览器地址栏输入:http://192.168.2.180:7070/jenkins/
7. 按照导航,解锁密码、安装插件、添加用户
解锁密码 日志配置路径 安装插件 image.png这里,因为项目是用的gitlab,所以特意安装了gitlab的插件
安装插件 安装gitlab插件8. 全局工具配置:JDK 和 git
Jdk
JDK Git9. 项目配置:
新建任务 新建任务选择“构建一个自由风格的软件项目”。
任务名称不要使用中文。
任务配置 gitlab 地址配置注意:这里的项目地址,一定要填
https://gitlab.com/company/project.git 而不是 https://gitlab.com/company/project
否则,会报:
error: RPC failed; result=22, HTTP code = 404
fatal: The remote end hung up unexpectedly
构建触发
构建这一步是最重要的配置:
构建
选择“Use Gradle Wrapper”,并且选择下面的 “Force GRADLE_USER_HOME to use workspace”,同时跳过 test, 使用 -x 开关。
10. 构建:
点击“立即构建”之后,可以点击当前构建右侧向下的箭头,点击“控制台输出”,查看构建日志。
构建结果 构建日志11. 部署:
构建完成之后,可以部署在本地或者远程服务器上。
本地部署:
构建完成之后,添加执行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
#宿主服务器的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. 远程调试:
假设192.168.2.180是远程构建、测试服务器。要完成jenkins构建部署、远程调试,需要起两个tomcat分别监听不同的端口。
假设部署了Jenkins的tomcat监听了7070端口。需要远程调试的tomcat监听了8080端口。
监听7070端口的tomcat所在的路径是: ~/apache-tomcat-8.5.29_jenkins
监听8080端口的tomcat所在的路径是: ~/apache-tomcat-8.5.29_projects
打开IntelliJ IDEA,build-> Edit Build Configuration
remote
添加remote 选项
remote remote复制JVM的相关参数
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
配置服务器Tomcat
进入~/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'
jdwp
使用 $tomcat_path/bin/shutdown.sh 来关闭监听8080端口的tomcat,会带来一个问题,就是这个脚本会把监听7070端口的部署了Jenkins的tomcat也杀掉。
shutdown.sh 这个脚本会接受一个参数:CATALINA_PID。这个参数指向一个文件,文件里保存了指定要杀死的tomcat的pid。
问题在于使用 $tomcat_path/bin/startup.sh 并没有指定这个参数,告诉它启动的时候把pid写入一个文件。所以这一步需要先做。
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
把这两个脚本放到 ~/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
#我的项目编译的名称
project=checkup
#最后打包的war名称
war_name=demo.war
#宿主服务器的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"
这样就解决了调用 ~/apache-tomcat-8.5.29_projects/bin/shutdown.sh 连监听7070端口的tomcat也杀掉的问题了。
13. 问题:
13.1. 权限问题:
最好是在自己的目录下单独放一个tomcat来启动jenkins,而不是使用系统安装的jenkins,这会涉及到权限问题,会很非常麻烦。
Error
Unable to create the home directory ‘/usr/share/tomcat7/.jenkins’. This is most likely a permission problem.
或者,根据网上的说法,可以设置一个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
这个情况,一般是在在tomcat/bin/catalina.sh中有如下的配置:
CATALINA_OPTS="-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=12343"
即:打开了远程调试的端口。
网友评论