来源:http://www.ilanni.com/?p=12436
现在开始学习有关jenkins的知识了,学习jenkins,我这边是从jenkins的编译和打包开始。
因为jenkins是基于java语言开发的,而且项目管理是通过maven进行的,所以在开始编译和打包jenkins之前,我们需要配置相关的基础环境。
一、安装和配置jdk环境
安装和配置jdk环境,使用如下命令:
wget http://mirrors.linuxeye.com/jdk/jdk-7u80-linux-x64.tar.gz
tar -xf jdk-7u80-linux-x64.tar.gz -C /usr/local/
chown root:root -R /usr/local/jdk1.7.0_80/
jdk1.7安装完毕回,我们把它配置到系统的环境变量中,如下:
vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.7.0_80
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
source /etc/profile
java –version
二、安装和配置maven3.3
因为代码依赖管理是通过maven进行的,所以在此我们需要安装和配置maven。
2.1 安装maven3.3
在此我们使用的是maven3.3.9版本,maven3.3.9的安装与配置使用如下命令:
wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
tar -xf apache-maven-3.3.9-bin.tar.gz -C /usr/local/
cd /usr/local/
mv apache-maven-3.3.9 maven
把maven加入系统的环境变量中,如下:
vim /etc/profile
export M2_HOME=/usr/local/maven/
export PATH=$PATH:/usr/local/mysql/bin:$M2_HOME/bin
使maven环境变量生效,如下:
source /etc/profile
java –version
mvn –v
通过上图,我们可以很容易的看到maven已经安装成功了。
2.2 修改maven3.3配置文件
对于maven3.3的配置文件settings.xml选项比较多,在此我们暂时只修改两处:mirror和proxy。
其中mirror我们用于镜像阿里云的maven仓库,而proxy是用于代理maven去下载国外的一些依赖和仓库。
有关mirror部分修改如下:
vim /usr/local/maven/conf/settings.xml
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
有关proxy部分修改如下:
vim /usr/local/maven/conf/settings.xml
<proxies>
<proxy>
<id>http</id>
<active>true</active>
<protocol>http</protocol>
<username>ilanni</username>
<password>passwd</password>
<host>101.177.221.45</host>
<port>44010</port>
<nonProxyHosts>192.168.1.232|*.aliyun.com </nonProxyHosts>
</proxy>
<proxy>
<id>https</id>
<active>true</active>
<protocol>https</protocol>
<username>ilanni</username>
<password>passwd</password>
<host>101.177.221.45</host>
<port>44010</port>
<nonProxyHosts>192.168.1.232|*.aliyun.com</nonProxyHosts>
</proxies>
以上配置默认情况下是所有http和https请求走代理服务器的,但是192.168.1.232和*.aliyun.com例外。
三、配置nexus仓库
jenkins源码编译和打包需要从jenkins官方nexus依赖仓库下载相应的依赖,由于众所周知的原因,这个下载速度是很慢的。
所以需要我们在本地搞一个内部nexus依赖仓库的代理仓库,用于从jenkins官方nexus依赖仓库下载相关依赖。
有关nexus的安装和配置,可以查看这篇文章《烂泥:maven私库nexus2.14.1迁移到nexus3.1》。
在此我们只介绍下,nexus3.1上配置代理jenkins官方nexus依赖仓库。
jenkins官方nexus依赖仓库地址是:
http://repo.jenkins-ci.org/public/
现在我们来新建ilanniproxy仓库,如下:
上图中我们只需要填写name和remote storage就行了,其中name填写的是仓库的名称,remote storage中填写的是需要代理的远程nexus依赖仓库的地址。
上图中,我们可以看到刚刚新建的ilanniproxy地址为:
http://192.168.1.232:8081/repository/ilanniproxy/
四、下载jenkins源码
要编译jenkins源码,需要我们下载jenkins源码,我们可以从jenkins的github上下载。如下:
https://github.com/jenkinsci/jenkins
在此我们下载jenkins2.19.3版本的源码,如下:
https://github.com/jenkinsci/jenkins/releases
使用下面命令:
wget https://github.com/jenkinsci/jenkins/archive/jenkins-2.19.3.tar.gz
tar -xf jenkins-jenkins-2.19.3.tar.gz
cd jenkins-jenkins-2.19.3
五、修改pom.xml文件
jenkins源码下载完毕后,我们来修改jenkins源码中pom.xml文件。
注意:jenkins源码中的pom.xml文件有多个,因为不同的源码中有不同的模块。在这篇文章中,我们牵涉到的pom.xml文件主要是源码根目录的下pom.xml文件和war目录下的pom.xml文件。
其中根目录下pom.xml文件,主要是jenkins编译时所使用,二war目录下的pom.xml文件主要是jenkins打包时所使用。
在此,我们为了显示jenkins是我们自己编译和打包的,需要我们对相关的pom.xml文件做几处修改。
比如:修改jenkins打包后的名称和jenkins页面刷新频率。
5.1 修改jenkins仓库
刚刚在前面我们说了为了比较快的编译、打包jenkins,需要我们修改jenkins的nexus仓库地址。
jenkins源码中,要修改nexus仓库地址,我们只需要修改源码根目录下的pom.xml文件即可。
我们只需要把该pom.xml文件中的http://repo.jenkins-ci.org/public/修改为自己搭建的maven仓库相关地址即可。
在此我们是以http://192.168.1.232:8081/repository/ilanniproxy/仓库地址为例,如下:
vim pom.xml +114
vim pom.xml +127
<url>http://192.168.1.232:8081/repository/ilanniproxy/</url>
5.2 修改nodejs配置
jenkins在编译和打包过程中,是需要nodejs的支持。但是就像前面我们所说的一样,由于众所周知的原因,Nodejs相关的仓库和模块依赖下载速度很慢的。
当然还是有国内的公司开源了自己的Nodejs镜像站点,比如淘宝的npm.taobao.org。
所以我们只需要修改根目录下pom.xml文件中的有关nodejs相关的地址即可。
修改nodejs的下载地址,把https://nodejs.org/dist修改为https://npm.taobao.org/mirrors/node,如下:
vim war/pom.xml +666
<url>https://npm.taobao.org/mirrors/node/v${node.version}/${node.download.file}</url>
修改nodejs模块的仓库地址,把war目录下的pom.xml文件中的http://registry.npmjs.org修改为https://registry.npm.taobao.org,如下:
vim war/pom.xml +678
<url>https://registry.npm.taobao.org/npm/-/npm-${npm.version}.tgz</url>
5.3 修改打包名称
Jenkins源码默认打包后的war包名称是jenkins.war,但是为了显示该war包是我们自己编译和打包的,所以需要我们修改jenkins打包后的war名称。
这个是需要修改war目录下的pom.xml文件中的finalName选项达到目的的,如下:
vim war/pom.xml +191
<finalName>ilannijenkins</finalName>
5.4 修改页面刷新频率
Jenkins页面默认的刷新频率是10s,但是我们现在想修改jenkins默认的页面刷新频率,可以通过两种方式达到此目的。
方式一:使用Config AutoRefresh Plugin插件,如下:
https://wiki.jenkins-ci.org/display/JENKINS/Features+controlled+by+system+properties
配置–系统配置–Automatic Refresh Configuration
方法二,通过直接修改jenkins源码来达到目的。在此我们使用修改源码方式,如下:
vim core/src/main/java/hudson/Functions.java +632
if (refresh) {response.addHeader(“Refresh”, SystemProperties.getString(“hudson.Functions.autoRefreshSeconds”, “5“));}
六、编译和打包jenkins
以上全部修改完毕后,我们就可以对jenkins源码进行编译和打包,在此我们跳过了单元测试部分,使用如下命令:
mvn clean install -Dmaven.test.skip=true
如果不想跳过maven的单元测试,我们可以使用如下命令:
mvn clean install
如果想以maven的debug模式运行,我们可以使用如下命令:
mvn clean install -Dmaven.test.skip=true -X
通过上图,我们可以看到有关nodejs的配置,确实使用的是我们前面所配置的相关地址。
这一步会花费很长时间,需要耐心等待。
通过上图,我们可以很明显的看出jenkins已经编译和打包完成,并且打包后的war包名称确实是我们在前面定义的该ilannijenkins。
七、启动jenkins
Jenkins编译和打包完毕后,我们现在来启动jenkins。
因为我们目前打包的是war包,所以我们可以通过tomcat来启动jenkins。
但是为了不那么麻烦,在此我们直接使用java命令启动,如下:
java -jar ilannijenkins.war
通过上图,我们可以很明显的看出,我们源码jenkins编译、打包的jenkins已经正常运行。