Preview
Skip to content
CodingDiary
返回

DevOps 之 Jenkins 安装、配置、美化、插件及常见错误处理

编辑页面
导读

GitLab 搭好了,下一步就是 Jenkins 持续集成。本文记录完整的 Jenkins 部署实战:JDK 路径配置、阿里云 Maven 镜像加速、个性化邮件模板(含完整 HTML 代码)。还推荐了 Material 风格主题美化方案,以及 11 个必装插件:Gitlab Hook、FireLine 代码规约检查、钉钉通知等。

继续上一篇的话题,既然已经搭建了 GitLab 的代码仓库,那么现在就可以开始进行下一步持续集成环境的搭建了。公司准备利用 Jenkins CI 进行持续集成,本文记录了 Jenkins 的安装、基础配置、界面美化、常用插件及常见错误处理。

1. 安装Jenkins

准备工作

  1. 安装 JDK,并配置环境变量

  2. 安装 maven

  3. 配置阿里云的 maven 镜像源地址,vim /usr/share/maven/conf/settings.xml 将👇内容添加进 mirrors 节点

    <mirror>
        <!--This sends everything else to /public -->
        <id>nexus-aliyun</id>
        <mirrorOf>*</mirrorOf>
        <name>Nexus aliyun</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>
  4. 安装 git

配置镜像源地址

sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
yum install jenkins

修改访问 IP 和 端口号

  1. vim /etc/sysconfig/jenkins
  2. JENKINS_PORT="10080"

配置 JDK 路径到 Jenkins 中

  1. vim /etc/init.d/jenkins

  2. 将自己的 java 目录加入到 candidates

    candidates="
    /etc/alternatives/java
    /usr/lib/jvm/java-1.8.0/bin/java
    /usr/lib/jvm/jre-1.8.0/bin/java
    /usr/lib/jvm/java-1.7.0/bin/java
    /usr/lib/jvm/jre-1.7.0/bin/java
    /usr/bin/java
    /opt/jdk1.8.0_144/bin/java
    "

安装完毕后启动

sudo service jenkins start # 启动jenkins服务

2. 配置 Jenkins

  1. 初始化密码

    cat /var/lib/jenkins/secrets/initialAdminPassword

  2. 安装插件

    选择左侧推荐的插件安装即可

  3. 配置管理员账号密码

  4. 配置 JDK、Maven、Git、Docker

    系统管理 → 全局工具配置(尽量在服务器本地安装,然后输入安装路径,不推荐使用在线安装,因为在线安装有些资源都在国外,下载速度极慢)

  5. 配置邮件服务器信息

    系统管理 → 系统设置,①Jenkins Location→系统管理员邮件地址②Extended E-mail Notification③邮件通知。

    其中Extended E-mail Notification的两个地方可以做个性化配置:

    • Default Content Type 邮件的内容类型,改为HTML(text/html)

    • Default Subject 邮件的标题,改为构建通知:$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!

    • Default Content 邮件的内容,改为👇内容。

      <!DOCTYPE html>
      <html>
        <head>
          <meta charset="UTF-8" />
          <title>${PROJECT_NAME}-第${BUILD_NUMBER}次构建日志</title>
        </head>
      
        <body
          leftmargin="8"
          marginwidth="0"
          topmargin="8"
          marginheight="4"
          offset="0"
        >
          <table
            width="95%"
            cellpadding="0"
            cellspacing="0"
            style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif"
          >
            <tr>
              <td>(本邮件是程序自动下发的,请勿回复!)</td>
            </tr>
            <tr>
              <td>
                <h2>
                  <font color="#0000FF">构建结果 - ${BUILD_STATUS}</font>
                </h2>
              </td>
            </tr>
            <tr>
              <td>
                <br />
                <b><font color="#0B610B">构建信息</font></b>
                <hr size="2" width="100%" align="center" />
              </td>
            </tr>
            <tr>
              <td>
                <ul>
                  <li>项目名称: ${PROJECT_NAME}</li>
                  <li>构建编号: 第${BUILD_NUMBER}次构建</li>
                  <li>触发原因: ${CAUSE}</li>
                  <li>
                    构建日志:
                    <a href="${BUILD_URL}console">${BUILD_URL}console</a>
                  </li>
                  <li>构建Url: <a href="${BUILD_URL}">${BUILD_URL}</a></li>
                  <li>
                    工作目录: <a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a>
                  </li>
                  <li>项目Url: <a href="${PROJECT_URL}">${PROJECT_URL}</a></li>
                </ul>
              </td>
            </tr>
            <tr>
              <td>
                <b
                  ><font color="#0B610B"
                    >Changes Since Last Successful Build:</font
                  ></b
                >
                <hr size="2" width="100%" align="center" />
              </td>
            </tr>
            <tr>
              <td>
                <ul>
                  <li>
                    历史变更记录 :
                    <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a>
                  </li>
                </ul>
                ${CHANGES_SINCE_LAST_SUCCESS,reverse=true, format="Changes for
                Build #%n:<br />%c<br />",showPaths=true,changesFormat="
                <pre>[%a]<br />%m</pre>
                ",pathFormat=" %p"}
              </td>
            </tr>
            <tr>
              <td>
                <b>Test Informations</b>
                <hr size="2" width="100%" align="center" />
              </td>
            </tr>
            <tr>
              <td>
                <pre
                  style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif"
                >
      Total:${TEST_COUNTS,var="total"},Pass:${TEST_COUNTS,var="pass"},Failed:${TEST_COUNTS,var="fail"},Skiped:${TEST_COUNTS,var="skip"}</pre
                >
                <br />
              </td>
            </tr>
            <tr>
              <td>
                <b><font color="#0B610B">构建日志 (最后 100行):</font></b>
                <hr size="2" width="100%" align="center" />
              </td>
            </tr>
            <tr>
              <td>
                <textarea
                  cols="80"
                  rows="30"
                  readonly="readonly"
                  style="font-family: Courier New"
                >
      ${BUILD_LOG, maxLines=100}</textarea
                >
              </td>
            </tr>
          </table>
        </body>
      </html>
    • 勾选上 Enable Debug Mode、Require Administrator for Template Testing、Enable watching for jobs、Allow sending to unregistered users

3. 美化 Jenkins

安利一款material风格的主题:http://afonsof.com/jenkins-material-theme/ ,支持使用 CDN,也支持自定义公司 logo 等等。

4. 常用插件

  1. Maven Integration plugin:用于构建 Maven 项目
  2. Gitlab Hook Plugin:用于触发 GitLab 的一些 WebHooks 来构建项目
  3. Simple Theme Plugin:配合上面的美化 Jenkins 使用
  4. FireLine Plugin:代码规范检查,已经集成了阿里巴巴的代码规约(P3C)检查
  5. HTML Publisher plugin:将一些测试结果变成 HTML 文档
  6. JUnit Plugin:JUnit 测试
  7. Checkstyle Plug-in:检测代码风格
  8. FindBugs Plug-in:检测构建出来的 class 文件是否安全
  9. Static Analysis Collector Plug-in:对7、8两个插件检测出来的结果进行汇总
  10. Extended E-mail Notification:个性化邮件模板
  11. Dingding[钉钉] Plugin:钉钉通知插件

5. 常见错误解决

添加镜像源的时候出现如下错误:

Resolving pkg.jenkins-ci.org (pkg.jenkins-ci.org)... failed: Temporary failure in name resolution.

wget: unable to resolve host address ‘pkg.jenkins-ci.org’

解决方法:

vim /etc/resolv.conf 添加一行 nameserver 8.8.8.8

HTML Publisher Plugin 插件在新的Jenkins版本中,打开生成的网页中无法加载CSS、无法点击按钮等情况:

由于 CSP(Content Security Policy)所致,可在 系统管理→脚本命令行 中执行:

System.setProperty("hudson.model.DirectoryBrowserSupport.CSP","")


编辑页面
分享到:

上一篇
驼峰命名和下划线命名互相转化
下一篇
DevOps 之 GitLab 安装、汉化及常见错误处理