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

Stella981
• 阅读 950

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

1. 安装 Jenkins

准备工作

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

  2. 安装 maven

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

    1
    2
    3
    4
    5
    6
    7
    <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

配置镜像源地址

1
2
3
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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    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
    "

安装完毕后启动

1
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 邮件的内容,改为👇内容。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      53
      54
      55
      56
      57
      58
      59
      60
      61
      62
      63
      64
      65
      <!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. 常见错误解决

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

1
2
3
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","")

原文地址:https://xkcoding.com/2018/01/04/devops-jenkins.html
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
AndroidStudio封装SDK的那些事
<divclass"markdown\_views"<!flowchart箭头图标勿删<svgxmlns"http://www.w3.org/2000/svg"style"display:none;"<pathstrokelinecap"round"d"M5,00,2.55,5z"id"raphael
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这