来源: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/

clip_image001

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

clip_image002

source /etc/profile

java –version

clip_image003

二、安装和配置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

clip_image004

把maven加入系统的环境变量中,如下:

vim /etc/profile

export M2_HOME=/usr/local/maven/

export PATH=$PATH:/usr/local/mysql/bin:$M2_HOME/bin

clip_image005

使maven环境变量生效,如下:

source /etc/profile

java –version

mvn –v

clip_image006

通过上图,我们可以很容易的看到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>

clip_image007

有关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>

clip_image008

以上配置默认情况下是所有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仓库,如下:

clip_image009

clip_image010

clip_image011

clip_image012

上图中我们只需要填写name和remote storage就行了,其中name填写的是仓库的名称,remote storage中填写的是需要代理的远程nexus依赖仓库的地址。

clip_image013

上图中,我们可以看到刚刚新建的ilanniproxy地址为:

http://192.168.1.232:8081/repository/ilanniproxy/

四、下载jenkins源码

要编译jenkins源码,需要我们下载jenkins源码,我们可以从jenkins的github上下载。如下:

https://github.com/jenkinsci/jenkins

clip_image014

在此我们下载jenkins2.19.3版本的源码,如下:

https://github.com/jenkinsci/jenkins/releases

clip_image015

使用下面命令:

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

clip_image016

clip_image017

五、修改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>

clip_image018

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>

clip_image019

修改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>

clip_image020

5.3 修改打包名称

Jenkins源码默认打包后的war包名称是jenkins.war,但是为了显示该war包是我们自己编译和打包的,所以需要我们修改jenkins打包后的war名称。

这个是需要修改war目录下的pom.xml文件中的finalName选项达到目的的,如下:

vim war/pom.xml +191

<finalName>ilannijenkins</finalName>

clip_image021

5.4 修改页面刷新频率

Jenkins页面默认的刷新频率是10s,但是我们现在想修改jenkins默认的页面刷新频率,可以通过两种方式达到此目的。

方式一:使用Config AutoRefresh Plugin插件,如下:

https://wiki.jenkins-ci.org/display/JENKINS/Features+controlled+by+system+properties

配置–系统配置–Automatic Refresh Configuration

clip_image022

方法二,通过直接修改jenkins源码来达到目的。在此我们使用修改源码方式,如下:

vim core/src/main/java/hudson/Functions.java +632

if (refresh) {response.addHeader(“Refresh”, SystemProperties.getString(“hudson.Functions.autoRefreshSeconds”, “5“));}

clip_image023

六、编译和打包jenkins

以上全部修改完毕后,我们就可以对jenkins源码进行编译和打包,在此我们跳过了单元测试部分,使用如下命令:

mvn clean install -Dmaven.test.skip=true

clip_image024

如果不想跳过maven的单元测试,我们可以使用如下命令:

mvn clean install

如果想以maven的debug模式运行,我们可以使用如下命令:

mvn clean install -Dmaven.test.skip=true -X

clip_image025

通过上图,我们可以看到有关nodejs的配置,确实使用的是我们前面所配置的相关地址。

clip_image026

clip_image027

clip_image028

这一步会花费很长时间,需要耐心等待。

clip_image029

clip_image030

通过上图,我们可以很明显的看出jenkins已经编译和打包完成,并且打包后的war包名称确实是我们在前面定义的该ilannijenkins。

七、启动jenkins

Jenkins编译和打包完毕后,我们现在来启动jenkins。

因为我们目前打包的是war包,所以我们可以通过tomcat来启动jenkins。

但是为了不那么麻烦,在此我们直接使用java命令启动,如下:

java -jar ilannijenkins.war

clip_image031

clip_image032

clip_image033

通过上图,我们可以很明显的看出,我们源码jenkins编译、打包的jenkins已经正常运行。


Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐