持续集成 centos+Jenkins+maven+nginx,完整搭建持续集成小结

就不告诉你 · January 22, 2016 · Last by replied at February 04, 2016 · 7424 hits
本帖已被设为精华帖!

本文将介绍在centos系统上完整搭建并运行Jenkins持续集成的实现细节,主要分以下几个步骤来介绍:

  • 1. Jenkins的安装;
  • 2. Jenkins的配置;
  • 3. nginx反向代理配置访问域名;
  • 4. 相关插件安装;
  • 5. 系统设置明细;
  • 6. slave节点配置;
  • 7.一些依赖项的安装。

一、 Jenkins安装

  1. 登陆需要安装Jenkinscentos机器;
  2. (可选) 卸载已有的open jdk,安装最新版本的java jdk,为后续集成maven服务做准备;
    • 安装:rpm -qa | grep jdk,显示结果如右(不同版本会显示java版本不同):java-1.6.0-openjdk-1.6.0.0-1.45.1.11.1.el6.i686
    • 卸载:yum -y remove java-1.6.0-openjdk-1.6.0.0-1.45.1.11.1.el6.i686;
  3. 安装java
    • 下载jdkwget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u40-b26/jdk-8u40-linux-x64.tar.gz ,jdk的具体下载地址可根据版本和系统需要去官网自行选择,此处为centos 64位系统1.8版本的jdk;
    • 创建/usr/java目录mkdir /usr/java,将文件解压到/usr/java目录下,tar -zxvf jdk-8u40-linux-x64.tar.gz -C /usr/java
  4. 配置java环境变量

    • 打开profile文件,vi /etc/profile ,末尾加上如下环境变量:

      export JAVA_HOME=/usr/java/jdk1.8.0_40
      export PATH=$PATH:$JAVA_HOME/bin
      export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    • 使profile文件生效,source /etc/profile

  5. 创建软链接,在/usr/bin目录下创建新的java工具的软链接(Jenkins服务启动需要在 /usr/bin 下有java命令行工具): ln -s /usr/java/jdk1.8.0_40/bin/java /usr/bin/java

  6. 安装Jenkins

    • 安装步骤如下:

      sudo wget -O /etc/yum.repos.d/jenkins.repo  http://pkg.jenkins-ci.org/redhat/jenkins.repo
      sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
      sudo yum install jenkins
    • 使Jenkins能够以服务方式启动

      sudo service jenkins start/stop/restart
      sudo chkconfig jenkins on
  7. 启动Jenkins

    • 输入指令 sudo service jenkins start,如果出现类似如下的报错:

      Starting Jenkins bash: /usr/bin/java: 没有那个文件或目录 

      或者

      Starting Jenkins Jenkins requires Java7 or later, but you are running 1.5.0 from /usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre

      则说明jenkins没有找到java安装目录,若此时已经卸载了openjdk,安装了新版本的全java包,则可以通过修改init.d中配置文件解决,方法如下:

      • 修改/etc/init.d/jenkins ,输入指令 vi /etc/init.d/jenkins
      • 找到candidates,修改如下,将你安装的java所在路径写到第一个候选位置(最前面)即可,或建立/usr/bin/java软连接连接到新安装的java,将/usr/bin/java写到最前。

        candidates="

        /usr/bin/java

        /usr/java/jdk1.8.0_40/bin/java

        /etc/alternatives/java

        /usr/lib/jvm/java-1.6.0/bin/java

        /usr/lib/jvm/jre-1.6.0/bin/java

        /usr/lib/jvm/java-1.7.0/bin/java

        /usr/lib/jvm/jre-1.7.0/bin/java

        /usr/lib/jvm/java-1.8.0/bin/java

        /usr/lib/jvm/jre-1.8.0/bin/java

        "

二、配置Jenkins

  1. 打开Jenkins,默认端口8080。http://{jenkins_host}:8080/,发现Jenkins服务已经搭建成功;
  2. 更改Jenkins的默认执行用户,确保拥有后续构建中部分指令需要的高级权限。

    • 修改Jenkins执行用户,vi /etc/sysconfig/jenkins,修改JENKINS_USER的值,将 JENKINS_USRE="jenkins"改成JENKINS_USER="root",执行用户更改为root用户
    • 修改目录的相应权限

      sudo chown -R root /var/log/jenkins 
      sudo chgrp -R root /var/log/jenkins

      sudo chown -R root /var/lib/jenkins
      sudo chgrp -R root /var/lib/jenkins

      sudo chown -R root /var/cache/jenkins
      sudo chgrp -R root /var/cache/jenkins
  3. 安装部分Jenkins插件

    • 系统管理 --> 管理插件 --> 可选插件;
    • 安装所需要的插件(根据需要自行选择),如 GitBucket Plugin、 FindBugs Plug-in 、Cobertura Plugin 、 Violations Plugin 、Email Extension Plugin等

三、配置nginx反向代理

  1. 在nginx配置目录/etc/nginx/conf.d目录下新建配置文件jenkins.conf,配置文件内容如下

    server {
    listen 80;
    server_name jenkins.yourhost.com;
    #access_log /var/log/jenkins.access.log main;
    #error_log /var/log/jenkins.error.log ;
    client_max_body_size 60M;
    client_body_buffer_size 512k;
    location / {
    port_in_redirect on;
    proxy_pass http://127.0.0.1:8080$request_uri;
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    }
  2. 修改/etc/hosts,在末尾新增一行 :

    127.0.0.1     jenkins.yourhost.com
  3. 重启nginx,/usr/sbin/nginx -s reload,即可以地址 jenkins.yourhost.com 访问Jenkins主页

四、相关插件安装

  1. 插件安装方法为,进入系统管理--->插件管理,在Available的Tab下勾选需要的插件直接安装即可。 一些常用的插件如下。
插件名 说明
Git plugin jenkins的git 集成工具,拉取源代码
GitBuckit plugin jenkins的gitbuckit集成工具,拉取源代码(提供gitbucket的webhook配置,使gitbucket可以通过提交代码触发build,webhook地址为http://[jenkins_host]/gitbucket-webhook/, 将其写入项目远程仓库的settings->service hooks 里即可)
Cobertura Plugin 显示代码测试覆盖率报表,如java 、python等
Violations Plugin 用来展示Python静态代码审查报表,支持pylint、jslint等
Email Extension Plugin Jenkins自定义邮件插件 。
Junit Plugin 用来展示生成的单元测试报表,支持一切单测框架,如junit、nosetests等
Maven Integration plugin maven项目管理工具。一些maven代码质量管理命令:mvn sonar:sonar(单测结果,覆盖率)、findbugs:findbugs(静态代码检查) 、checkstyles:checkstyles(编写规范,潜在问题)
Description Setter Plugin 为每次build设置说明文字。通过正则表达式来匹配log里每行的输出,将符合正则表达式的部分显示在说明中。

Email Extension Plugin 的设置参考

Default Subject: 
构建通知:$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!
Default Content:
<hr/>
(本邮件是程序自动下发的,请勿回复!)<br/><hr/>
项目名称:$PROJECT_NAME<br/><hr/>
构建编号:$BUILD_NUMBER<br/><hr/>
git版本号:${GIT_REVISION}<br/><hr/>
构建状态:$BUILD_STATUS<br/><hr/>
触发原因:${CAUSE}<br/><hr/>
构建日志地址:<a href="${BUILD_URL}console">${BUILD_URL}console</a><br/><hr/>
构建地址:<a href="$BUILD_URL">$BUILD_URL</a><br/><hr/>
失败单测:${FAILED_TESTS} <br/><hr/>
变更集:${JELLY_SCRIPT,template="html"}<br/>
<hr/>

五、系统设置明细

以下图解会对Jenkins系统的主要设置进行说明,可参考该部分进行必要的设置。

  • 系统常规设置

    该部分为常规设置,如下图设置即可。主目录的高级部分点开,为工作空间和构建日志的目录设置,使用默认即可。

  • 构建环境设置,具体见下图

    简单说明:
    Android部分,Android SDK root栏填入android sdk所在根目录,如 /home/work/Library/Android/sdk;
    JDK 部分,若已经安装JDK,则取消“自动安装”的勾选,填入 JAVA_HOME,即你的jdk安装根目录;
    Git部分,若已安装了 git,取消勾选“自动安装”,在Path to Git executable填入git工具的绝对路径如/usr/bin/git或者git即可(已配置好环境变量)。

    该部分依然是配置各构建环境。
    ANT_HOME填入ant工具的根目录,已安装则取消“自动安装”的选项,写入 ant工具所在根目录;
    MAVEN_HOME 写入maven工具的根目录,需要注意的是,建议maven根目录放置在公共目录/opt目录下,否则Jenkins运行用户有可能无权限访问maven安装所在目录而无法识别路径,依然是已安装则取消“自动安装”的选项。

    继续配置:
    Jenkins Location,写入你的Jenkins访问地址。比如:http://[jenkin_host]:[8080]/;系统管理员邮件地址,必须写入邮件发送人地址,如jenkins@example.com;
    CVS需要配置的话,则填入相应信息,如Private Key Location: Jenkins服务运行用户的rsa私钥地址,如~/.ssh/id_rsa;Private Key Password未设置则不用填写; Known Hosts Location写入known_hosts目录。

  • 邮件收发设置

此处是之前推荐安装的邮件插件Email Extension Plugin的设置。
邮件收发设置,按照字段要求填写即可,SMTP server为邮件的smtp服务器地址;
Default Subject:邮件默认标题,可以带Jenkins变量,如:构建通知:$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!
Default Content:  邮件默认内容,可以带Jenkins变量,如


(本邮件是程序自动下发的,请勿回复!)



项目名称:$PROJECT_NAME


构建编号:$BUILD_NUMBER


git版本号:${GIT_REVISION}


构建状态:$BUILD_STATUS


触发原因:${CAUSE}


构建日志地址:${BUILD_URL}console


构建地址:$BUILD_URL


失败单测:${FAILED_TESTS}


变更集:${JELLY_SCRIPT,template="html"}


需注意,要点击 Default user E-mail suffix右下方的“高级(advance)”选项,才能进行邮件发送的smtp 服务器的详细设置,设置如下:
勾选“use SMTP Authentication”,根据字段填入相应信息。
User Name: 发送邮件的email
Password: 发送人email的登陆密码。
SMTP port: SMTP邮件服务器的端口。

点击“Default Triggers” ,展开邮件发送触发器配置界面,如下图所示,根据需求勾选默认的触发发送邮件的方案。

下图为默认的邮件发送选项配置,若已经配置了之前介绍的Extended E-mail Notification的邮件选项,则该部分可忽略。
填写字段如Extended E-mail Notification,注意,该部分需要勾选“使用smtp认证”,才能展开smtp配置项的填写,不可忽略。

  • Publish over SSH配置

Path to key: jenkins服务运行用户的 rsa私钥路径,如~/.ssh/id_rsa;
Key: 将Jenkins服务运行用户的私钥全部内容填入,即~/.ssh/id_rsa内的全部内容粘贴到此框;
 Passphrase:创建ssh-keygen rsa私钥时,未设置则不填写。
 rsa方式远程操作机器的前提是,Jenkins所在用户的id_rsa.pub即公钥内容已经在远程机器用户.ssh目录下的authorized_keys文件内,请确保Jenkins的公钥已复制到远程机的~/.ssh/authorized_keys文件中。

SSH Servers(下图),需要远程操作的机器的信息配置,按照字段填写远程机器名称(自定义)、host地址、访问用户和远程机器的指定工作目录即可。

点击“高级(advanced)”选项,展开SSH Servers的详细配置信息,如下图:
勾选Use password authentication, or use a different key,展开针对于访问该远程机器的详细配置信息。
Key :将Jenkins服务运行用户的私钥全部内容填入,即~/.ssh/id_rsa内的全部内容粘贴到此框。
port :ssh连接远程机器的端口,ssh默认端口22。

六、slave节点配置

  1. 设置 linux  的slave机器环境。
    创建专用的jenkins用户来管理Jenkins job(可选)

    • 创建jenkins用户

      sudo /usr/sbin/useradd -m jenkins -d /home/jenkins
    • 查看jenkins用户及组的信息:

      id jenkins
      显示结果:uid=1000(jenkins) gid=1000(jenkins) groups=1000(jenkins)
    • 设置用户jenkins的密码:

      sudo /usr/bin/passwd jenkins
    • 切换到用户jenkins环境下,su jenkins

    • 确保slave 机器上java安装正确,java -version(java home最好放在 /opt 公共目录下);

    • 确保ssh正确运行

      /sbin/service --status-all | grep ssh
  2. 在Slave的linux机器上创建public/private key pair;

    • 确保当前用户为jenkins;
    • 进入主目录下的.ssh目录( 没有则建立目录mkdir .ssh  ),创建public/private key pair:

      • 生成秘钥匙:

        ssh-keygen -t rsa
      • 一路回车,不要设置passphrase,文件生成在.ssh目录下,私钥文件id_rsa,公钥文件id_rsa.pub;

      • 在.ssh目录中创建文件 authorized_keys;

      • 将公钥加入到authorized_keys文件中,用以Jenkins的slave配置能通过 ssh 方式连接。

        cat id_rsa.pub > authorized_keys
    • 对.ssh目录下文件赋予权限:

      chmod -R 700 .ssh
      chmod 600 authorized_keys
  3. 创建 slave节点。

    • 系统管理-> 管理节点 -> 创建一个dumb  slave,配置如下图: 注意填写标签(labels),标签内容将决定job是否在有该标签的slave机器上构建;
    • Credentials 这里写入连接slave机器的用户名密码,如果用ssh方式,则在Private Key 中填入slave机器的全部私钥内容(id_rsa),如图: 点击保存,配置完毕。
  4. 配置构建环境的依赖项。

    • slave机器在构建各种job 的过程中,会遇到maven、ant、java、python、nosetests等工具执行命令的情况,此时需要在slave机器上安装相应的依赖,如需要maven工具,则安装maven,安装过程如master机器;
    • 安装完毕之后,因为此slave机器用之前自建的名为jenkins的用户来构建job,所以一定要配置好全局环境变量:

      • 切换到root用户;
      • 更改系统配置文件:

        vi /etc/profile
      • 在文件末尾添加环境变量,如配置maven:

        export M2_HOME=/opt/apache-maven-3.3  #(你的maven所在目录), 并将该目录的bin目录添加到环境变量PATH
        export PATH=$PATH:$M2_HOME/bin
      • 退出后生效,source /etc/profile

  5. 用slave机器构建job。

    • 新建job,在job的配置项中,勾选“Restrict where this project can be run”,在Label Expression中,输入之前填写好的slave 的标签,则该job 将在有该标签slave机器上build;
    • 如果填写的标签没有任何slave机器标记过(slave机器没有填写过标签),则可以选择某slave,在该slave的Configure的“Labels”框中,将之前job了填写的“Label Expression”的内容输入即可。

七、一些依赖项的安装

  1. maven安装。

    • 下载maven文件,官网下载对应版本。http://maven.apache.org/download.cgi
    • 解压下载的包,将maven目录移动到自定义目录下,建议移动到/opt公共目录下,以便任何用户能够访问到该目录,例如/opt/apache-maven-3.3
    • 配置maven环境变量,修改/etc/profile,在文件末尾增加export M2_HOME=/opt/apache-maven-3.3(你的maven所在目录), 将该目录的bin目录添加到环境变量PATH中,export PATH=$PATH:$M2_HOME/bin;
    • 使配置生效,source /etc/profile;
    • 测试maven安装成功,mvn -v,出现配置信息如下则说明maven配置成功:

      Apache Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T19:57:37+08:00)
      Maven home: /Users/turinblueice/Downloads/apache-maven-3.3.3
      Java version: 1.8.0_40, vendor: Oracle Corporation
      Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/jre
      Default locale: zh_CN, platform encoding: UTF-8
      OS name: "mac os x", version: "10.10.5", arch: "x86_64", family: "mac"
  2. centos下一些python包的安装(可能在一些python项目的持续集成中会用到):

    • yum install python-mock(python测试桩工具) python-nose(python单测工具) python-coverage(python覆盖率统计工具) 
    • pip install pylint (静态代码检查工具) 安装后命令行工具在/usr/bin/下或/usr/local/bin下
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 7 条回复 时间 点赞

未完待续

赞,整理的不错。

#2楼 @wangcityboy 谢谢,未完的马上会补充

已完成,done。

第一个如此详细描述 jenkins 搭建的帖子么?@snake 比你那个是不是详细?

很详细,赞下。

#5楼 @lihuazhang 百度的骚年

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up