Jenkins 系统管理与配置
1. Jenkins 安装插件的两种方式
2. 添加凭据(Credentials)
3. 系统管理——全局工具配置
4. 系统管理——系统设置
5. 常用插件说明
6. 环境变量
7. 用户登录与权限设定
8. 使用视图
9. 归档构建产物
10. Jenkins 使用小技巧
1. Jenkins 安装插件的两种方式
方式一:通过插件管理下载指定的插件
进入 Jenkins 首页-->系统管理-->插件管理-->可选插件页面,在右上角的过滤框中输入插件部分或全部名称并回车,在搜索出的内容中查找待安装的插件。
按照以下步骤在 filter 中输入想要安装的插件部分命名,比如我们想安装 GitHub Branch Source,输入 github 后回车,在筛选后的页面中找到想要的插件,勾选左侧的方框后,选择 install without restart 或者 Download now and install after restart。
(若已经安装过该插件,则显示不出来 github 的插件)如下提示表示安装成功:
方式二:上传已下载好的 .hpi 文件
进入 Jenkins 首页-->系统管理-->插件管理-->高级,将页面拉到最后,按如下操作:
如下提示表示安装成功:
2. 添加凭据(Credentials)
Jenkins 访问 tomcat 或者 github 是有可能会需要这些工具能够识别的凭证才能访问,Jenkins 也提供了设置 Credentials 的功能,有 2 种方法添加凭据:
方法一:在 Jenkins 首页的凭据中进行添加
进入 Jenkins 首页-->单击凭据:
如果之前添加过的话会显示所有添加的凭据,类似于以下内容:
添加新的凭据
凭据类型说明
- Secret text:例如 API token(例如 GitHub 的个人 access token)。
- Username with password:用户名和密码 ,可以作为单独的组件处理,也可以作为 username:password 格式的冒号分隔字符串来处理(请参阅处理凭据中的更多信息)。
- Secret file:包含密钥的文件 SSH Username with private key:一个 SSH 密钥对。注意:直接选择回车可以复制私钥的文本并将其粘贴到生成的密钥文本框中。
- Certificate:一个 PKCS#12 证书文件 和可选的密码。
为 github 添加 Username with password 类型的凭据
- 用户名和密码:如果该凭证是为 Jenkins 访问 github 使用的话,那么用户名和密码就是 github 登录的用户名和密码。
- ID:在 Jenkins 中使用的一个变量名。
方法二:新建任务后,配置过程中出现类似的操作按钮
直接单击 Add 添加凭据即可,出现如下的对话框,和方法一的一致:
3. 系统管理——全局工具配置
以上工具都有自动安装的选项,不过建议手动安装。
以上配置完成后,将页面拉到最后,单击 Save 保存即可。
4. 系统管理——系统设置
主目录
默认的主目录如下,可以点开右上角的问号,按照提示信息修改,一般不用改。
系统消息
可以点开右侧的问号,看到系统消息的作用就是显示在首页顶部的一些公告信息,比如输入内容如下:
单击保存后,回到 Jenkins 首页,可以看到如下内容:
该内容默认是纯文本形式的,如果想要更高级的可以使用 HTML 格式控制显示内容的格式,但是需要切换到设置-->Configure Global Security 中,标记格式器,选择 Safe HTML,如下:
再进入到系统管理-->系统设置,输入 HTML 格式的文本,保存。
在 Jenkins 首页显示的内容如下:
Maven 项目配置
执行者数量
默认值为 2,表示最多可以同时跑 2 个 job(有的版本叫 item)。
用法
有两个选项:
当 Jenkins 有多个执行节点情况下的使用规则:
- 尽可能的使用这个节点:这是默认和常用的设置。在这种模式下,Jenkins 会尽可能地使用这个节点。任何时候如果一个构建能使用这个节点构建,那么 Jenkins 就会使用它。
- 只允许运行绑定到这台机器的 Job:这种模式下,Jenkins 只会构建哪些分配到这台机器的 Job。这允许一个节点专门保留给某种类型的 Job。例如,在 Jenkins 上连续的执行测试,你可以设置执行者数量为 1,那么同一时间就只会有一个构建,一个实行者不会阻止其它构建,其它构建会在另外的节点运行。
生成等待时间
默认值是 5 秒,表示创建一个 job 或 item 中的构建在开始之前需要等待的秒数,一般不做修改。
SCM 签出重试次数
默认为 0,表示 Jenkins 从 git 或者其他源代码管理工具中拉取代码失败时的尝试次数,也可以在具体的项目中进行设置。
工程命名限制
如果勾选了此项,并且选择的是 Pattern,那么创建 job(或者 item)时要满足此规则才能创建成功。如下:
创建项目时不满足以上规则会提示以下信息:
Jenkins Location
- Jenkins URL:我们只是演示用,不做修改,实际工作中 Jenkins URL 是需要改成具体的 IP 地址,这样才能让别人访问。
- 管理员邮箱:测试完成后用来发送邮件或者一些警告信息,还有更灵活的发邮件规则需要借助第 3 方的插件。
配置 Jenkins 自带的邮件功能
保存
配置完成后,单击页面最下方的保存按钮:
5. 常用插件说明
Extended E-mail Notification
Jenkins 默认的邮件通知,能在构建失败、构建不稳定等状态后发送邮件。但是它本身有很多局限性,比如邮件通知无法提供详细的邮件内容、无法定义发送邮件的格式、无法定义灵活的邮件接收配置等等。而 Jenkins Email Extension Plugin 能允许你自定义邮件通知的方方面面,比如在发送邮件时你可以自定义发送给谁,发送具体什么内容等等。
这里的发件人邮箱地址切记要和系统管理员邮件地址保持一致。
注意事项:
- 如果设置 QQ 邮箱的话,密码必须为授权码,开启方法:登录 QQ 邮箱,在”设置”-->“帐户”里开启“POP3/SMTP”并获取授权码(否则报错 535)。
- 必须勾选【Use SMTP Authentication】【Use SSL】。
- 用户名必须与系统管理员邮件地址保持一致(否则报错 501)。
- 设置接收人(Recipients),多个接收人时用英文空格分隔。
1)Job 中使用 Extended E-mail
在任务的配置中,“构建后操作”中选择“Editable Email Notification”选项即可使用 Extended E-mail Notification 插件。
基本配置
参数说明(这里只列出常用的参数):
- Project Recipient List:这是一个以逗号(或者空格)分隔的收件人邮件的邮箱地址列表。如果想在默认收件人的基础上添加收件人:$DEFAULT_RECIPIENTS,<新的收件人>
- Default Subject:邮件主题,默认为 Extended E-mail Notification 配置的主题。
- Default Content:跟 Default Subject 的作用一样,但是是替换邮件内容。
- Attach Build Log:将构建日志作为附件发送
- Compress Build Log before sending:发送压缩格式的日志(zip 格式)
高级配置
单击 Advanced Settings...,可以用来进行更细化的设置,比如:执行成功和执行失败分别发送给不同的邮箱。
注意:默认情况下是没有配置触发器的,任务构建成功后会提示:No emails were triggered.。
参数说明:
在每个 Trigger 中都有高级配置项目,可以配置的内容和 Extended E-mail Notification 配置项目类似,这里修改的话会覆盖之前的默认设置,具体不再赘述,配置项如下:
触发器类型
注意:触发器都只能配置一次。
- Aborted:终止时发邮件,比如构建过程中手动停止构建,配置后就会给指定邮箱发邮件。
- Always:不管什么构建情况都会发邮件。
- Before Build:当构建开始时发送邮件。
- Failure - 1st:第 1 次构建失败时发送构建失败的邮件。如果“Still Failing”触发器已配
- 置,而上一次构建的状态是“Failure”,那么“Still Failing”触发器将发送一封邮件来替代(它)。
- Failure Still :如果两次或两次以上连续构建的状态为“Failure”,发送该邮件。
- Unstable:即时发送构建不稳定的邮件。如果”Still Unstable”触发器已配置,而上一次构建的状态是“Unstable”,那么“Still Unstable”触发器将发送一封邮件来替代(它)。
- Success:如果构建的状态为“Successful”发送邮件。如果“Fixed”已配置,而上次构建的状态为“Failure”或“Unstable”,那么”Fixed”触发器将发送一封邮件来替代(它)。
- Fixed:当构建状态从“Failure”或“Unstable”变为“Successful”时发送邮件。
- Still Unstable:如果两次或两次以上连续构建的状态为“Unstable “,发送该邮件。设置好以上内容后,点击保存。即 Job 中使用 Extended E-mail 设置完成。
2)全局设置
进入系统管理- 系统设置 - Extended E-mail Notification
SMTP 基础设置
- SMTP server:邮件协议服务器。如 qq 邮箱则为 smtp.qq.com。
- Default user E-mail suffix:邮箱的后缀名。如 qq 邮箱则为 @qq.com。
- Default Content Type:默认的发送的邮件内容类型,默认是 text,我们选择 HTML(test/html)。
- Default Recipients:默认的收件人列表,多个的话用逗号隔开。如果没有被项目中的配置覆盖的话,该插件会使用这个列表。可以在项目配置使用$ DEFAULT_RECIPIENTS,其参数包括此默认列表,也可以根据实际需要添加新的地址。
- Reply To List:回复列表。
- Emergency reroute:如果不为空的话,所有的邮件将只发送到指定的邮箱列表。
- Allowed Domains:允许发送的域名。比如:@domain1.com,domain2.com,那么任何匹配*@domain1.com 和*@*.domain2.com 都可以发送。
- Excluded Recipients:禁止发送邮件的邮箱地址Default Subject:默认的邮件主题。可以使用 Jenkins 自带的一些全局变量。
- Maximum Attachment Size:最大的附件大小。
- Default Content:默认的邮件内容。
- Default Pre-send Script:默认发送前执行的脚本。
- Default Post-send Script:默认发送后执行的脚本。
- Default Triggers:当任务构建完成后选择 Editable Email Notification 的话,满足以下触发的条件就会发送邮件。
- Content Token Reference:邮件中可以使用的变量。点击右侧的问号可以查看:
高级设置
- Use SMTP Authentication:勾选后才能看到用户名和密码。
- User Name:qq 邮箱用户名(@qq.com 可以不写)。
- Use SSL:使用安全连接。
- SMTP port:qq 邮箱 SSL 启用就是 465/587,不启用 ssl 就是 25。
设置好以上内容后,点击保存。即全局设置完成。
3)Default Content
以下是网上找的 Default Content,供参考:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>${ENV, var="JOB_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> 本邮件由系统自动发出,无需回复!<br/> 各位同事,大家好,以下为${PROJECT_NAME }项目构建信息</br> <td><font color="#CC0000">构建结果 - ${BUILD_STATUS}</font></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>构建状态: ${BUILD_STATUS}</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> <h4><font color="#0B610B">失败用例</font></h4><hr size="2" width="100%" /> $FAILED_TESTS<br/> <h4><font color="#0B610B">最近提交(#$SVN_REVISION)</font></h4><hr size="2" width="100%" /><ul> ${CHANGES_SINCE_LAST_SUCCESS, reverse=true, format="%c", changesFormat="<li>%d [%a] %m</li>"}</ul> 详细提交: <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a><br/> </td> </tr> </table> </body> </html>
效果如下:
Deploy war/ear to a container
这种方式能够将生成的 war 包自动发布到指定 IP 的 Tomcat 中,前提是需要 Tomcat 已经启动。
Tomcat Manager 是 Tomcat 自带的、用于对 Tomcat 自身以及部署在 Tomcat 上的应用进行管理的 web 应用。Tomcat Manager 需要以用户角色进行登录并授权才能使用相应的功能,由于 Tomcat Manager 在默认的情况下是禁用的,因此需要我们进行相应的用户配置之后才能使用 Tomcat Manager。用户角色如下:
- manager-gui:允许访问 html 接口(即 URL 路径为 /manager/html/*)。
- manager-script:允许访问纯文本接口(即 URL 路径为 /manager/text/*)。
- manager-jmx: 允许访问 JMX 代理接口(即 URL 路径为 /manager/jmxproxy/*)。
- manager-status:允许访问 Tomcat 只读状态页面(即 URL 路径为 /manager/status/*)。
1)添加角色
新安装的 tomcat,访问 tomcat 的 Server Status、Manager App、Host Manager 三个页面均显示 403,需要在 conf/tomcat-users.xml 里添加配置。
如果想要访问 manager 页面,需要添加配置项:
<role rolename="manager-gui"/> <user username="admin"password="password" roles="manager-gui"/>
如果需要使用到远程部署等功能,需要添加配置项:
<role rolename="manager-script" /> <user username="admin" password="password" roles="manager-gui,manager-script"/>
2)限制远程访问的解决方案
(Tomat7 不需要修改下面这两个文件,只有 Tomcat7 以上才需要修改)
在 webapps 下的 host-manager 和 manager,都有名为 META-INF 的文件夹,里面都有 context.xml 文件,部分内容为:
<Context antiResourceLocking="false" privileged="true" > <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127.d+.d+.d+|::1|0:0:0:0:0:0:0:1" />
<Value> 此代码的作用是限制来访 IP 的,127.d+.d+.d+|::1|0:0:0:0:0:0:0:1 是正则表达式,表示 IPv4 和 IPv6 的本机环回地址,所以这也解释了,为什么我们本机可以访问管理界面,但是其他机器访问返回 403。要修改为所有人都可以访问,可以直接注释掉或者改成这样:
<Context antiResourceLocking="false" privileged="true" > <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" /> </Context>
3)配置示例
如果 tomcat 在 linux 下的话,需要做如下配置,然后重启 tomcat 即可。
在 tomcat/conf/tomcat-users.xml 追加以下内容:
<role rolename="tomcat" /> <role rolename="role1" /> <role rolename="manager-gui" /> <role rolename="manager-script" /> <role rolename="manager-status" /> <user username="tomcat" password="tomcat" roles="tomcat" /> <user username="both" password="tomcat" roles="tomcat,role1" /> <user username="role1" password="tomcat" roles="role1" /> <user username="deploy" password="tomcat" roles="admin,manager,manager-gui,manager-script,manager-status" />
tomcat/webapps/manager/META-INF/context.xml 如下图所示,注释掉 <valve> 标签:
如果发布过程中提示:Caused by: org.codehaus.cargo.container.tomcat.internal.TomcatManagerException: The username you provided is not allowed to use the text-based Tomcat Manager (error 403)
则检查以上 2 个文件是否正确配置。
Publish over SSH
- 利用此插件可以将编译好的 war/jar 文件上传到远程 linux 指定的目录下,在远程执行脚本将拷贝的文件复制到 tomcat 的 webapps 文件夹下,重启 tomact。
- 可以采用用户名和密码的方式登录,也可以采用公钥认证的方式。
1)插件说明
进入 Jenkins 主页,系统管理 --> 全局工具配置,下拉到最后。
主配置项
- Passphrase:linux 下生成 ssh key 时加密使用的密码,没有的话不用填。
- Path to file:Jenkins 所在主机上保存 ssh 私钥文件的路径,可以是绝对路径也可以是相对于 Jenkins_HOME 的路径。
- Key:ssh 私钥(包含头尾----的内容),如果 key 和 path to file 均填写了,那么以 key 中的内容为准。
- Disable exec:勾选此项后,此插件将不能执行指定的命令,默认即可。
Add an SSH Server:单击“新增”按钮
- Name:标识的名字,随便写,能方便区分即可。
- Hostname:需要连接 ssh 的主机名或 ip 地址(建议 ip)。
- Username:远程主机登录的用户名,点击高级后才能填写密码。
- Remote Directory:远程目录,指的是 ssh 文件上传后,文件在远程服务器上的保存路径,路径需要预先建立好。同时,如果上传了文件后,需要执行命令的话,这也是 bat、shell 等命令的工作目录。
高级配置项:单击高级...按钮
- Use password authentication, or use a different key:可以替换公共配置(选中展开的就是公共配置的东西,这样做扩展性很好,不同的服务器有不同的密钥)。
- Passphrase / Password:如果 Path to key 和 key 两项有一个配置的话,此配置项表示密钥加密时使用的 passphrase,如果 key 对应的输入框是空的话,此配置项表示登录的密码。
- Path to key:同上。
- Key:同上。
- Port:端口(默认 22)。
- Timeout (ms):超时时间(毫秒)默认即可。
- Disable exec:同上。
- Test Configuration:测试是否可以链接到远程服务器。
- Add more server configurations (if required):添加更多的服务器配置。
2)系统配置
用户名和密码方式连接
ssh 私钥认证方式登录
登录 linux 系统,生成 SSH-key,SSH-key 是一对密钥,一个公钥,一个私钥,用来在不同的电脑之间通过安全的连接进行数据交换。命令如下:
cd /root ls -al ~/.ssh //查看 id_rsa.pub 或 id_dsa.pub 是否存在 ssh-keygen //连续三次回车,即在本地生成了公钥和私钥,在生成过程中可以根据需要设置一个 passphrase,也可以不设置,生成的公钥私钥在~/.ssh 目录下,id_rsa 是私钥,d_rsa.pub 是公钥 cat id_rsa.pub //可以看到生成的公钥
补充:Linux CentOS 7 下 ssh 操作相关命令
重启服务不再通过 service 操作,而是通过 systemctl 操作:
- systemctl status sshd.service:查看 sshd 服务是否启动
- systemctl start sshd.service:如果没有启动,则需要启动该服务
- systemctl restart sshd.service:重启 sshd 服务
- systemctl enable sshd.service:设置服务开机自启
3)项目配置
构建后操作→增加构建后操作步骤→Send build artifacts over SSH
- SSH Server Name:选一个在系统设置里配置的配置的名字。
- Transfer Set Source files:需要上传的文件(注意:相对于工作区的路径。看后面的配置可以填写多个,默认用,分隔)。
- Remove prefix:移除目录(只能指定 Transfer Set Source files 中的目录)。
- Remote directory:远程目录(根据你的需求填写,默认会继承系统配置)。
- Exec command:把你要执行的命令写在里面,脚本内容示例如下:
#替换 tomcat 中的旧文件 cp -r /tmp/myapp/interface_proj.war /usr/local/apache-tomcat-8.5.38/webapps # 关闭 tomcat sh /usr/local/apache-tomcat-8.5.38/bin/shutdown.sh sleep 15s #启动 tomcat sh /usr/local/apache-tomcat-8.5.38/bin/startup.sh #验证 tomcat 启动 ps -ef|grep tomcat|grep start|grep -v 'grep'|awk '{print $2}'
高级设置
- Exclude files :排除的文件(在传输目录的时候很有用,使用通配 符,例 如:**/*.log,**/*.tmp,.git/)。
- Pattern separator:分隔符(配置 Transfer Set Source files 的分隔符。如果这儿更改了,上面的内容也需要更改)。
- No default excludes:禁止默认的排除规则(具体的自己看帮助)。
- Make empty dirs:此选项会更改插件的默认行为。默认行为是匹配该文件是否存在,如果存在则创建目录存放。选中此选项会直接创建一个目录存放文件,即使是空目录。(个人理解)
- Flatten files:只上传文件,不创建目录(除了远程目录)。
- Remote directory is a date format:远程目录建立带日期的文件夹(需要在 Remote directory 中配置日期格式),具体格式参考下表:
Remote directory | Directories created |
'qa-approved/'yyyyMMddHHmmss | qa-approved/20101107154555 |
'builds/'yyyy/MM/dd/'build-${BUILD_NUMBER}' |
builds/2010/11/07/build-456 (if the build was number 456) |
yyyy_MM/'build'-EEE-d-HHmmss | 2010_11/build-Sun-7-154555 |
yyyy-MM-dd_HH-mm-ss | 2010-11-07_15-45-55 |
- Exec timeout (ms):脚本运行的超时时间(毫秒)。
- Exec in pty:模拟一个终端执行脚本。
- Add Transfer Set:增加配置。
其他
Jenkins 第一次启动时会有推荐安装的插件,以下插件不包含在推荐安装列表中。
序号 | 插件名称 | 作用 |
1 | Maven Integration | 用来创建 Maven 项目,不安装的话不能创建 Maven 项目 |
2 | Deploy to container | 用来将 war 包部署到 tomcat 服务器上 |
3 | Generic Webhook Trigger | 用来创建 webhook,获取源码仓库改动信息,自动触发部署 |
4 | Email Extension | 邮件的扩展插件,可以定义不同构建结果情况下收件人,邮件 内容等 |
5 | Publish Over SSH | 用来实现远程的自动部署 |
6 | Role-based Authorization Strategy |
实现基于角色的安全机制 |
7 | Performance | 将 jtl 文件展示为图表 |
8 | HTML Publisher | 用来将 HTML 的测试结果展示到项目首页 |
9 | Startup Trigger | 用来在 Jenkins 节点(master/slave)启动时触发构建,做一些 初始化工作 |
10 | Groovy | 用来在项目构建步骤中直接执行 Groovy 代码 |
11 | Pipeline Utility Steps | pipeline 中类似于的 jdk 的插件,提供一些常用的方法 |
12 | Docker-build-step | 用来集成 Docker 相关操作 |
13 | Docker | 用来将 Docker 配置为云 |
6. 环境变量
环境变量这个词我们并不陌生,安装完 java 或者 python 之后,为了在任意位置使用都需要将其安装路径加入到系统的环境变量中。类似的,Jenkins 也有环境变量,而且还可以分为内置的和自定义的环境变量。
1)内置环境变量
Jenkins 通过一个名为 env 的全局变量可以访问内置的环境变量。在构建配置项下方,有项目可以使用的环境变量超链接,如下:
点击之后,可以看到如下页面内容(注意,不同的项目类型可以使用的环境变量会有些差异):
环境变量使用格式:
- windows:%变量名%,如 echo "%BUILD_NUMBER%",echo "%Jenkins_URL%"
- linux:$变量名或者${变量名},如 echo "{env.BUILD_NUMBER}",echo "$Jenkins_URL"
2)自定义全局环境变量
如果内置的环境变量不能满足项目的需要,也可以自定义全局的环境变量。进入 Manage Jenkins-->Configure System 页,下拉查找全局属性,选中“Environment variables”,单击 Add 按钮可以在出现的框中添加变量名和变量值。如下所示:
自定义的全局变量也会被加入到 env 属性列表中,像使用内置的环境变量一样去使用。
7. 用户登录与权限设定
一个项目涉及到的人员有多个,比如开发、测试和运维,测试又有测试经理和普通测试工程师,他们的权限一般都是不一样的,而且如果 Jenkins 集成的项目很多很复杂的时候,可能需要使用更细粒度的方式进行授权,不同的角色拥有不同的权限,如全局角色拥有所有项目的增删改查权限;项目角色只是针对参与的项目有特定的权限。
Jenkins 默认的权限管理体系不支持用户组或角色的配置,因此需要安装第三发插件来支持角色的配置,我们采用的是 Role-based Authorization Strategy 插件(https://github.com/Jenkinsci/role-strategy-plugin/blob/master/README.md)。
1)安装插件
Jenkins 首页-->系统管理-->插件管理-->可选插件页面,搜索 Role-based Authorization Strategy:
安装成功后再已安装的标签页就可以看到此插件:
2)添加用户
需要先添加用户,才能给用户分别权限。
1)进入 Jenkins 首页-->系统管理-->Manage Users:
2)创建新用户:
3)配置全局安全策略
进入 Jenkins 首页,单击系统管理-->Configure Global Security,勾选 Role-Based Strategy:
开启授权策略后,可以在系统管理页面看到 Manage and Assign Roles 选项:
4)配置 Manage and Assign Roles 策略
使用 admin 登录,进入 Jenkins 首页,单击系统管理-->Manage and Assign Roles,可以看到以下界面:
需要进行 Global roles、Project roles 两个配置:
- Global roles 是一个整体权限的配置;Project roles 是项目权限的配置,类似于从大到小的原则进行分配。
- 项目角色与全局角色的区别就是:项目角色是用来管理项目的,没有对 Jenkins 的管理权限;而全局角色更加侧重于对于 Jenkins 的管理。
Manage Roles
global roles
可以看到 admin 是超级用户,拥有所有的权限。点击 Add 按钮添加用户,然后对该用户的权限进行配置。注意:一般用户要有 Overall 的 read 权限,不添加的话使用该用户登录,则 Jenkins 会提示:用户没有 Overall/read 权限。
Project roles
- Role to add:要添加的角色,相当于一个组名。
- Pattern:匹配的规则,支持正则表达式。比如:
- test_.*:表示以 test_开头的所有项目。
- (?i):表示大小写不敏感,如 (?i)roger-.* 可以匹配 Roger-.* 和 roger-.*。
- ^foo/bar.*:用来匹配文件夹。
- |:匹配多个,比如 abc|bcd|efg”直接匹配多个项目。
单击 Add 添加完成后,再分配权限:
Assign Roles
将定义好的规则分配给具体的用户。在 Manage Roles 只是对不同的角色分配了不同的权限,这一步是将这个权限和具体的用户匹配起来。
单击 Assign Roles,进入之后可以看到有两个和 Manage Roles 对应的配置项:Global roles 和 Item roles。
global roles
Item roles
- 将 dev 规则分配给用户 kongsh,也就是只有对 pipe 开头的项目的读权限。
- 将 test 规则分配给用户 test,也就是对所有以 test_ 开头的项目有 Build、Configure、Create、Read、Workspace 权限。
5)权限验证
以 test 用户登录:
- 能看到所有以 test_ 开头的项目,而且有执行权限:
以 kongsh 用户登录:
- 只能看到以 pipe 开头的项目:
- 进入项目后,只有 read 的权限,没有修改和执行的权限:
8. 使用视图
默认情况下创建的项目都是在 Jenkins 首页一个名为 ALL 的视图中,当项目很多或者所有团队共用一个 Jenkins 的话,想找到目标项目就会很吃力,要么使用浏览器自带的搜索功能,要么使用 Jenkins 的搜索功能。这时我们就可以使用视图来对项目进行分类管理。未使用视图分类时的项目组织情况:
1)新建视图
单击左侧的 New View 或者 All 后面的 + 号都可以用来创建视图:
单击后的配置页面如下:
单击确定后进入视图配置页面,如下:
勾选“使用正则表达式在视图中显示任务”,然后输入正则表达式:test.*,表示所有以 test 开头的项目,和正则表达式匹配的项目就会出现在此视图中,如下:
如果不想使用正则表达式的话,也可以手动选择指定的项目到此视图中。
2)设置默认视图
如果有多个视图的话,可以把某一个设置为默认视图,方法如下:
进入 Manage Jenkins-->Configure System 页,下拉找到默认视图配置项:
可以根据需要选择默认的值。
9. 归档构建产物
这个是指将每次构建之后会在当前的工作空间中产生 war 包、jar 包、apk 或者一些日志文件等二进制文件展示到项目的构建首页中,方便需要时下载或者查看。Jenkins 提供了 Archive the Artifacts 的插件以满足以上要求。
在项目中构建后操作配置中选择 Archive the Artifacts:
Archive the artifacts 配置中,输入归档产物的目录。
构建后在项目首页看到的结果:
10. Jenkins 使用小技巧
1)查看帮助信息
点击右侧的蓝色问号,这是 Jenkins 的上下文帮助按钮,可以查看详细的帮助信息。
2)变量的使用
内置环境变量可以在配置 Jenkins Job 的时候用得到,也可以用在 Execute shell、Execute Windows batch command、文本框等加上编辑好的 shell 脚本。
- Windows:%BUILD_NUMBER% %变量名%
- Linux:${BUILD_NUMBER} ,也可以直接使用 $BUILD_NUMBER
自己定义的参数化(Parameter)在调用时可以直接用 $参数名,比如调用这个时直接 $endPoint。
在 Maven 中使用(参考 Jenkins 内置环境变量的使用):
- Maven:直接使用:${env.WORKSPACE}
- Ant:需要增加 <property environment="env"/> 节点,再使用 ${env.WORKSPACE}
3)工作空间
在 Jenkins 节点机器的运行目录为:C:\Users\G\.Jenkins\workspace\项目名,如果 Jenkins 的任务上没有用 github 方式拉取代码,而是直接构建运行代码的话,所有运行 job 不会自动在 Jenkins 机器上创建当前这个 Jenkins job 名称的文件夹路径。
4)永久解决 HTML 文件样式丢失的问题
Jenkins 为了避免受到恶意 HTML/JS 文件的攻击,默认的配置下只允许加载 Jenkins 服务器上托管的 CSS 文件和图片文件 。 默认的安全策略 CSP 设置为 :sandbox; default-src 'none'; img-src 'self'; style-src 'self';
也有一种解决方法是在 Jenkins 的脚本命令行执行一条关闭默认的设置。但是这种方法的缺点就是 Jenkins 关闭之后就会失效,必须重新执行一次该命令。本节介绍一种永久性的解决方法,即使 Jenkins 重启也不用担心。
需要提前安装好以下 2 个插件:
- Startup Trigger:用来在 Jenkins 节点(master/slave)启动时触发构建。
- Groovy:用来在项目构建步骤中直接执行 Groovy 代码。
新建一个自由风格的项目,在构建触发器选项中选中 Build when job nodes start:
在构建步骤中选择 Execute Groovy script,输入以下命令:
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP","script-src 'unsafe-inline'")
保存即可。相当于把脚本的执行集成在项目中,这样就不用担心 Jenkins 重启了。
5)忘记管理员密码
如果不小心忘记了管理员密码,我们该怎么办呢?过程如下:
5.1)修改<passwordHash>
进入到 C:\Users\kongsh\.Jenkins\users\admin 目录下,打开 config.xml 文件,找到 <passwordHash> 所在的行,如下:
将其替换为一个已知密码的值,比如:<passwordHash>#jbcrypt:$2a$10$eJAMBW3qb/ijrFsSxkJnDOB747e0mFWSR03UmLCn96E4N7vL5BYzC</passwordHash>,这样密码就会被重置为 123456。
5.2)重启 Jenkins 服务
5.3)进入浏览器界面修改新的管理员密码
Manage Jenkins → Manage Users → admin 右侧设置齿轮图标,设置新的管理员密码,应用、保存即可。