Jenkins 安装

Jenkins 使用 JAVA 语言编写,首先需要安装好 JDK,配置好 java 环境变量。

export JAVA_HOME=/opt/java/jdk1.8.0_211
export JRE_HOME=$JAVA_HOME/jre
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib

export JENKINS_HOME=/mnt2/JenkinsHome

Jenkins的安装包可以使用war包,Jenkins下载地址

win10配置jenkins使用shell jenkins配置jdk_git


推荐使用 tomcat 运行 Jenkins,安装好 tomcat,把 Jenkins.war 放到 tomcat的 webapp/ 目录下。

记得给tomcat/bin目录下的sh文件执行权限。chmod a+x -R ./bin/*.sh

把java软链接到相应的目录下,这个在创建节点的时候会用到,按下不表。

ln -s /mnt2/opt/java/jdk1.8.0_211/bin/java /usr/local/bin/java

运行tomcat /bin/start.sh 即可。一般访问地址就是ip:port/jenkins/

端口更换

如果出现端口占用的情况,使用 netstat -pant | grep portnumber 查看。更改 Jenkins 端口或者 kill 掉占用端口的进程。

  • 推荐更换端口,默认是8080。 修改tomcat的 conf/server.xml 文件。这里port选择了 9999
  • 如果希望配置成 https访问的话可以参考 tomcat 配置成 https访问。

插件安装

浏览器第一次进入 Jenkins 会提示安装一些插件,可以安装或者跳过。

win10配置jenkins使用shell jenkins配置jdk_java_02


自行安装插件的话可以在这里下载。

下载 .hpi 文件 到本地,在 Jenkins =>系统管理=>管理插件=>高级=>上传插件中,选择相应的 .hpi 文件,再点击上传,就会自动安装。安装会有依赖顺序,安装错误会提示缺少相应的插件,先安装缺少的那个即可。

win10配置jenkins使用shell jenkins配置jdk_Jenkins_03

Jenkins 安装完成后的配置

要实现 gitlab 和 Jenkins的连接需要进行一些配置。首先是要安装一些插件。安装配置过程遇到的问题放在后边的章节。

常用插件

  • gitlab plugin(依赖git plugin、git client plugin等多个插件)
  • gitlab merge request builder plugin
  • ssh slaves plugin
  • multijob plugin(多任务构建时必须)。
  • Role-based Authorization Strategy (登录用户的权限访问控制)
  • Build Timeout (构建超时可以进行一定的操作)
  • Email Extension Plugin(支持邮件定制)
  • Parameterized Trigger plugin(传参触发其他构建)
  • deploy plugin(部署 ear/war 文件 到一个远程应用服务器)
  • delivery pipeline plugin(可视化 delivery pipeline)
  • build pipeline plugin(构建流水线)
  • poll mailbox trigger plugin(邮件触发Job)
  • Build monitor view plugin(Job状态展示)

Jenkins 配置步骤

进入 Jenkins,系统管理,系统设置,里面有很多配置项目、

  • Jenkins Location 配置项
    填入访问Jenkins的URL以及管理员的邮箱地址。注意这里的邮箱地址和 mail等插件里填写的发送地址需要一样。
  • gitlab 配置项
    添加名称、URL、以及认证凭据,凭据可以在这个页面新建,也可以在 Jenkins 主页的凭据里添加。
    这里实际上的用处是让 Jenkins 能够调用 gitlab 的 API,比如发送构建的状态给 gitlab,gitlab-plugin 的介绍
  • win10配置jenkins使用shell jenkins配置jdk_java_04

  • Gitlab API token 在 gitlab 里用户头像,注意这个用户至少应该是项目的 'Developer’以上权限的拥有者。
    点击 setting,在这里创建一个 access token,然后给 Jenkins 使用。注意这里的 token 关闭或者刷新这个页面就没了,所以抓紧拷贝。
  • win10配置jenkins使用shell jenkins配置jdk_Jenkins_05

  • git 配置
    填入git plugin的 user.name 以及 user.email

Jenkins 创建项目节点

multijob 插件允许项目可以在同一个服务器上设置不同节点,并发构建不同的项目,在新建一个
multijob 项目前,需要先建立要项目运行的节点(系统管理-管理节点-新建节点)。
创建好后 launch一下就可以了。可能的连接问题见下文。

Host 填写节点服务器的 IP。Credential 填写该节点服务器的登录用户及其密码。

win10配置jenkins使用shell jenkins配置jdk_Jenkins_06

Jenkins 新建 Job

这部分的变量来自 gitlab webhook 发送过来的信息。需要 gitlab 那边开启 webhook,做相应的设置。

  • 源码管理部分

这里的 Credential 选择 SSH Username with private key。使用过 github 的应该都知道访问仓库有添加公钥到用户的这一步操作。本质上是使用 SSH 公钥登录的方式登录到 gitlab。该用户需要有访问代码仓库的权限。
这里的Username填什么无所谓,可以填写生成密钥对的用户,方便区分。
私钥部分填写生成的私钥,公钥上传到gitlab相应的用户。密码的话如果生成密钥对的时候有的话就填写一下。

win10配置jenkins使用shell jenkins配置jdk_java_07

  • 构建触发器部分
    很多选项可以配置,比如 trigger 的事件包含哪些。
  • win10配置jenkins使用shell jenkins配置jdk_Jenkins_08

  • 构建结束
    可以添加很多构建结束的动作,比如归档生成的东西、给 gitlab 返回构建状态(信息可定制)、发送构建状态等信息的邮件,邮件内容可定制。构建结束注意这里应当添加一项 Publish build status to GitLab,把构建状态发送回 gitlab。
  • win10配置jenkins使用shell jenkins配置jdk_java_09


  • win10配置jenkins使用shell jenkins配置jdk_Jenkins_10

  • gitlab 上的就能显示出构建状态。可以看到是外部的CI构建成功。
  • win10配置jenkins使用shell jenkins配置jdk_git_11

注意这里不要选择 Gitlab commit status publisher,这个会导致一个关于 ruby 的错误。如果有这种情况的话去掉即可。

win10配置jenkins使用shell jenkins配置jdk_java_12

Jenkins 用户权限控制

win10配置jenkins使用shell jenkins配置jdk_git_13


选中 Role-Based Strategy 后在系统管理中会出现 Manage and Assign Roles。这里面首先进行角色权限的管理,然后给每个用户赋予一个角色。角色包括:Global roles , Project roles 以及 Slave roles

win10配置jenkins使用shell jenkins配置jdk_Jenkins_14


顾名思义,分别对应全局的权限控制,某个 project 的权限控制以及 slave 节点的权限控制。

win10配置jenkins使用shell jenkins配置jdk_Jenkins_15


创建了上面的 role 以后就可以分别给用于赋予不同的 role 了。

win10配置jenkins使用shell jenkins配置jdk_git_16

Jenkins 安装问题汇总

web界面出现jenkins实例似乎已离线问题

修改 JenkinsHome 下的 hudson.model.UpdateCenter.xml,插件更新源地址由https://更改为http://
位置也可能在/var/lib//jenkins/hudson.model.UpdateCenter.xml;或者改为国内的镜像http://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/current/update-center.json

URL没有开启 UTF-8 解码

win10配置jenkins使用shell jenkins配置jdk_git_17

解决方案:在 tomcat目录下conf/server.xml文件中增加 URIEncoding="UTF-8"

Jenkins 设置 gitlab 插件时由于启用了 https 访问,需要导入受信任的证书

如果在Test Connection 时返回错误码:sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target。
Java在访问 SSL 加密的网站时,需要从 JDK 的 KeyStore 里面去查找相对应得可信证书,如果不能从默认或者指定的 KeyStore 中找到可信证书,就会报这个错误。另外,Java 所使用的证书仓库并不是 Windows 系统自带的证书管理。所以即使系统中包含此证书也不可以使用。解决方案:借助 keytool 将 SSL 的证书添加到 KeyStore 中即可。
进入到 JAVA JDK 下的jre\lib\security目录,运行命令:
keytool -import -file your_certification.cer [or xxx.crt] -keystore cacerts -alias [server or other name] 会提示输入密码,默认密码为 changeit,选择 “yes” 将其安装到 JDK 可信证书库中。之后测试可以看到 success。

创建新节点后登录不上,报错:大意是找不到 JAVA版本,而实际上 Jenkins 所在的服务器已经正确安装了 JDK。

Checking java version fails - SSH slave not connecting
Java not found on hudson.slaves.SlaveComputer
解决方案: 查看出错的日志,可以看到默认是从 /usr/local/bin/ 目录下去找 java的,所以建一个软链接过去就可以了。
ln -s path/to/jdk1.8.0.211/java /usr/local/bin/java

向本机发送 webhook时出现错误,从GitLab 10.6起 gitlab 默认不允许向本机发送 webhook requests。

解决方案: https://docs.gitlab.com/ee/security/webhooks.html 以管理员身份登录 gitlab,进入 Admin Area->Settings->Network

win10配置jenkins使用shell jenkins配置jdk_java_18

Jenkins pdf 无法打开,系统管理-脚本命令行-运行指令。

System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "default-src 'none'; img-src 'self'; style-src 'unsafe-inline'; child-src 'self'; frame-src 'self'; object-src 'self';") 或者配置 Jenkins启动执行 groovy 脚本,在 JenkinsHome下新建一个文件夹 init.groovy.d,新建文件 *.groovy,这样每次Jenkins启动都会完成预定的动作。
https://issues.jenkins-ci.org/browse/JENKINS-33195?filter=10244https://wiki.jenkins.io/display/JENKINS/Post-initialization+script

You can create a Groovy script file $JENKINS_HOME/init.groovy, 
or any .groovy file in the directory $JENKINS_HOME/init.groovy.d/,
to run some additional things right after Jenkins starts up. 
This script can access classes in Jenkins and all the plugins.

groovy脚本如下

import jenkins.model.*

System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "default-src 'none'; img-src 'self'; style-src 'unsafe-inline'; child-src 'self'; frame-src 'self'; object-src 'self';")
Jenkins 邮箱发送失败,Client dose not have permissions to send as this sender

这里填写的邮箱和测试邮箱需要是同一个。

win10配置jenkins使用shell jenkins配置jdk_Jenkins_19