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

就不告诉你 · 2016年01月22日 · 最后由 回复于 2016年02月04日 · 5102 次阅读
本帖已被设为精华帖!

本文将介绍在 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 百度的骚年

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册