Jenkins - Tips

01 - 05

01 - RPM包安装方式

默认路径

  • 配置文件:/etc/sysconfig/jenkins
  • 日志文件:/var/log/jenkins/jenkins.log
  • 执行文件:/usr/lib/jenkins/jenkins.war

默认变量

  • JENKINS_HOME:/var/lib/jenkins
  • JENKINS_USER:jenkins
  • JENKINS_PORT:8080

02 - JENKINS_HOME 目录结构

实例

bash-4.4# ls -l var/jenkins_home/
total 68
-rw-r--r--   1 root root  1647 Dec  3 08:18 config.xml
-rw-r--r--   1 root root  3972 Dec  3 08:00 copy_reference_file.log
-rw-r--r--   1 root root   156 Dec  3 08:00 hudson.model.UpdateCenter.xml
-rw-r--r--   1 root root   370 Dec  3 08:00 hudson.plugins.git.GitTool.xml
-rw-------   1 root root  1712 Dec  3 08:00 identity.key.enc
-rw-r--r--   1 root root     7 Dec  3 08:18 jenkins.install.InstallUtil.lastExecVersion
-rw-r--r--   1 root root     7 Dec  3 08:18 jenkins.install.UpgradeWizard.state
-rw-r--r--   1 root root   184 Dec  3 08:18 jenkins.model.JenkinsLocationConfiguration.xml
-rw-r--r--   1 root root   171 Dec  3 08:00 jenkins.telemetry.Correlator.xml
drwxr-xr-x   2 root root     6 Dec  3 08:00 jobs
drwxr-xr-x   4 root root    37 Dec  3 08:00 logs
-rw-r--r--   1 root root   907 Dec  3 08:00 nodeMonitors.xml
drwxr-xr-x   2 root root     6 Dec  3 08:00 nodes
drwxr-xr-x 109 root root 16384 Dec  3 08:17 plugins
-rw-r--r--   1 root root    64 Dec  3 08:00 secret.key
-rw-r--r--   1 root root     0 Dec  3 08:00 secret.key.not-so-secret
drwx------   4 root root   237 Dec  3 08:18 secrets
drwxr-xr-x   2 root root   182 Dec  3 08:17 updates
drwxr-xr-x   2 root root    24 Dec  3 08:00 userContent
drwxr-xr-x   3 root root    58 Dec  3 08:18 users
drwxr-xr-x  11 root root  4096 Dec  3 08:00 war
drwxr-xr-x   2 root root     6 Dec  3 08:00 workflow-libs
bash-4.4# 

目录结构说明

--- config.xml  # jenkins 的主配置文件
--- copy_reference_file.log
--- hudson.model.UpdateCenter.xml
--- hudson.plugins.git.GitTool.xml
--- identity.key.enc
--- jenkins.install.InstallUtil.lastExecVersion
--- jenkins.install.UpgradeWizard.state
--- jenkins.model.JenkinsLocationConfiguration.xml
--- jenkins.telemetry.Correlator.xml
d --- jobs  # 作业的配置信息、构建信息、生成的artifacts数据,所有任务的配置都必须在主节点的jobs目录下进行统一管理
d --- logs  # 任务日志信息,但详细的运行日志存放在/var/log/jenkins
--- nodeMonitors.xml
d --- nodes  # 所有绑定的从节点的信息
d --- plugins  # 存放插件文件,jpi是安装文件,bak是上一个版本的安装备份文件用于版本回退
--- secret.key
--- secret.key.not-so-secret
d --- secrets  # 系统和用户的认证和秘钥信息
d --- updates  # 系统和插件的更新信息
d --- userContent  # 存放用户自定义的文件,可以通过web页面直接访问或通过“http://192.168.16.102:8080/userContent”方式下载
d --- users  # 当使用 jenkins自己的本地用户数据库时,用户信息会存放在此目录
d --- war  # 存放扩展的 web 应用程序,当以单机应用程序的形式运行 jenkins 时,会把 web 应用程序解压到这个目录
d --- workflow-libs

03 - 任务队列

不要先为任务分配好资源再去执行
而是应该将任务保持到队列中,然后在资源条件满足时,自动从这个任务队列获取任务并执行。

04 - 设置界面显示语言

以设置中文界面为例:
系统管理--》插件管理--》可选插件--》选择安装locale和“Localization: Chinese (Simplified)"插件,然后根据提示操作

系统管理--》系统设置--》Locale--》Default Language填入“zh_CN”,并勾选---》应用保存

切换回英文界面

系统管理--》系统设置--》Locale--》Default Language填入“zh_US”,并勾选---》应用保存

05 - Jenkins页面本地化之后,界面显示中英文混杂

原因及处理方式

  1. 某些版本识别浏览器默认语言以后的本地化处理存在问题。升降级到一个稳定可用的LTS版本
  2. 旧版本插件干扰。卸载并重新安装中文显示插件,并在系统设置中配置中文Locale(Default Language=zh_CN),然后重启jenkins服务。
  3. 获得最新TLS版本的plugins目录,然后覆盖到旧版本的jenkins目录下。
  4. 设为”简体中文“后restart Jenkins发生部分简体中文不显示。将语言设定为zh_US,Jenkins切换为英文,重启Jenkins后再次语言设定为zh_CN。

特别注意:
操作前必须做好目录和文件备份,以便出现问题时能够及时回滚。
备份plugins目录、users目录和config.xml文件。
如果出现登录提示用户名或密码不正确,可以考虑把备份的users目录替换回去。

06 - 10

06 - Jenkins官网资源下载

http://mirrors.jenkins.io/
Updates:http://mirrors.jenkins.io/updates/
war包下载:http://mirrors.jenkins.io/war-stable/
插件下载:http://mirrors.jenkins.io/plugins/
镜像地址查询:http://mirrors.jenkins-ci.org/status.html/

07 - 添加Jenkins的执行脚本权限

方式1:使用sudo授权
使用命令“visudo”编辑授权,或者直接编辑“vi /etc/sudoers”文件,将Jenkins用户权限提升为管理员权限

[root@localhost ~]# vim /etc/sudoers
[root@localhost ~]# 
[root@localhost ~]# cat /etc/sudoers |grep -v ^# |grep  -Ev "^$"
Defaults   !visiblepw
Defaults    always_set_home
Defaults    match_group_by_gid
Defaults    env_reset
Defaults    env_keep =  "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS"
Defaults    env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults    env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults    env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults    env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin
root	ALL=(ALL) 	ALL
jenkins	ALL=(ALL) 	ALL
%wheel	ALL=(ALL)	ALL
[root@localhost ~]# 

方式2:
让jenkins以root或对应用户执行:https://www.jianshu.com/p/fa546f723724

08 - Jenkins问题处理汇总

09 - Jenkins的升级

官网Jenkins LTS 升级指导:https://jenkins.io/zh/doc/upgrade-guide/
Jenkins在可以连通外网的情况下,如果有新版本,会在页面给出提示信息,可以直接根据页面提示进行在线升级。

如果无法连接外网,可以采用替换文件的方式。
先停止当前的Jenkins服务,备份原有的jenkins.war文件或jenkins.jar文件、配置和数据文件夹,替换jenkins.war文件或jenkins.jar文件,然后重启Jenkins服务。

10 - Jenkins备份与还原

手工(版本之间差异不要太大,防止不兼容)

  • 备份:停止Jenkins服务---》压缩整个JENKINS_HOME目录并备份---》重启Jenkins服务
  • 还原:停止Jenkins服务---》备份当前JENKINS_HOME目录,防止还原失败---》解压JENKINS_HOME目录到对应位置---》重启Jenkins服务

自动(通过ThinBackup插件)

安装后,系统管理---》ThinBackup---》Settings,进行全局设置并保存---》开始备份或还原

jenkins备份脚本

https://github.com/sue445/jenkins-backup-script

11 - 15

11 - 忘记Jenkins用户密码

编辑用户的config.xml文件,替换passwordHash行的内容,然后重启jenkins,使用更改后的密码登录即可。
密码123456对应的加密内容为:#jbcrypt:$2a\(10\)MiIVR0rr/UhQBqT.bBq0QehTiQVqgNpUGyWW2nJObaVAM/2xSQdSq

[root@test102 users]# pwd
/tmp/jenkins-data/users
[root@test102 users]# 
[root@test102 users]# tree
.
├── Anliven_1239557570388740263
│   └── config.xml
└── users.xml
1 directory, 2 files
[root@test102 users]# 
[root@test102 users]# vim Anliven_1239557570388740263/config.xml
[root@test102 users]# 
[root@test102 users]# cat Anliven_1239557570388740263/config.xml |grep password
      <passwordHash>#jbcrypt:$2a$10$MiIVR0rr/UhQBqT.bBq0QehTiQVqgNpUGyWW2nJObaVAM/2xSQdSq</passwordHash>
[root@test102 users]# 

12 - Jenkins 插件中心国内镜像源

清华大学开源软件镜像站:https://mirrors.tuna.tsinghua.edu.cn/jenkins/
Jenkins 是通过解析 update-center.json 文件的方式来获取插件版本和下载插件。
只有通过了公钥验证的 update-center.json 文件才会被使用:https://gitee.com/jenkins-zh/update-center-mirror/blob/master/tsinghua/update-center.json

Manage Jenkins --》 Manage Plugins (系统管理--》插件管理)--》升级站点---》提交
旧地址:https://updates.jenkins.io/update-center.json

新地址:https://gitee.com/jenkins-zh/update-center-mirror/blob/master/tsinghua/update-center.json

13 - Jenkins中文本地化插件

Jenkins 简体中文插件:https://plugins.jenkins.io/localization-zh-cn

14 - Jenkins任务分类与查找

在Jenkins中,可以通过视图(标签页)来直观地对任务类型进行分类和查找。

添加视图名称和选择视图类型,如无特别要求,选择“列表视图”并直接使用默认配置即可。

也可以选择添加所需要的列信息。

可以直接通过URL方式直接访问视图页面
视图创建完成后,就可以根据提示来添加现有的任务到该视图中,或者在该视图中创建一个新的任务。
在视图页面,可以编辑和删除视图

特别说明:Jenkins必须要有一个job存在,否则无法在Jenkins查看到View的页面信息。

15 - Jenkins任务邮件提醒

任务界面---》配置---》构建后操作---》

E-mail Notification:基础配置

Editable E-mail Notification:高级的自定义配置

  • 收件人地址(逗号隔离)
  • 邮件内容的格式
  • 邮件的标题
  • 邮件默认内容
  • 是否附加构建日志
  • 邮件发送的触发条件

16 - 20

16 - 项目权限控制

通过Authorize Project插件: https://plugins.jenkins.io/authorize-project/

第1步:系统管理 -- Configure Global Security:授权策略 (选“ 项目矩阵授权策略 ”),添加用户/组(一定要添加管理员账号,全选所有权限)

第2步:在JOB设置界面中,启用项目安全

17 - 内置变量

获取内置变量:https://<jenkins-server-url>/env-vars.html/
示例:https://jenkins.ap.manulife.com/blueocean/env-vars.html/
一些内置变量

    echo "#########"
    sh "echo 1 ${JENKINS_HOME}  2 ${JENKINS_URL}"
    sh "echo 3 ${JOB_NAME}  4 ${JOB_URL} 5 ${BUILD_URL}"
    echo "6 ${JOB_NAME}"
    echo "7 ${JOB_NAME} \n 8 ${BUILD_URL}"

对应的结果

[Pipeline] echo
12:50:19  #########
[Pipeline] sh
12:50:19  + echo 1 /var/lib/jenkins 2 https://jenkins.ap.manulife.com/blueocean/
12:50:19  1 /var/lib/jenkins 2 https://jenkins.ap.manulife.com/blueocean/
[Pipeline] sh
12:50:20  + echo 3 REG-RELEASE-MG/dev/Release-MGT-Release/release 4 https://jenkins.ap.manulife.com/blueocean/job/REG-RELEASE-MG/job/dev/job/Release-MGT-Release/job/release/ 5 https://jenkins.ap.manulife.com/blueocean/job/REG-RELEASE-MG/job/dev/job/Release-MGT-Release/job/release/20/
12:50:20  3 REG-RELEASE-MG/dev/Release-MGT-Release/release 4 https://jenkins.ap.manulife.com/blueocean/job/REG-RELEASE-MG/job/dev/job/Release-MGT-Release/job/release/ 5 https://jenkins.ap.manulife.com/blueocean/job/REG-RELEASE-MG/job/dev/job/Release-MGT-Release/job/release/20/
[Pipeline] echo
12:50:20  6 REG-RELEASE-MG/dev/Release-MGT-Release/release
[Pipeline] echo
12:50:20  7 REG-RELEASE-MG/dev/Release-MGT-Release/release 
12:50:20   8 https://jenkins.ap.manulife.com/blueocean/job/REG-RELEASE-MG/job/dev/job/Release-MGT-Release/job/release/20/	

18 - Jenkins代理设置

当前Jenkins的代理是在"插件管理"中设置的, 用于插件的下载与安装

19 - 禁止"由scm更改触发的自动构建"

If you're using a Multibranch Pipeline, you should be able to do this on the job's Configure page:

  1. Scroll down to "Branch Sources"
  2. Under "Property strategy", choose "Named branches get different properties"
  3. Click "Add exception", enter "master" as the branch name
  4. Click "Add property", choose "Suppress automatic SCM triggering"
  5. Save

That would prevent changes to the master branch from triggering a build of the corresponding job.

20 - Jenkins CheatSheet

21 - 25

21 - JenkinsX

22 - Jenkins 插件 Office 365 Connector

Plugin is used to send actionable messages in Outlook, Office 365 Groups, and Microsoft Teams.

23 - 步骤参考

基于Jenkins Pipeline的Devops

Jenkins实践

24 - 官方Pipeline文档

25 - Jenkins镜像和war包

26 - 30

26 - 参考Groovy脚本

27 - 一些plugins

28 - Components for DevOps platform

Note: 相应的插件!

  • Gitlab 集成
  • Sonar 集成
  • Artifacotry 集成
  • LDAP server 集成
  • Ansible 集成
  • 监控: Jenkins + Prometheus + Grafana

29 - Jenkins 插件开发

30 - 通过yum安装的Jenkins目录

  • jar文件目录 /usr/share/java/jenkins.war
  • webroot目录 /var/cache/jenkins/war
  • jenkins的数据目录 /var/lib/jenkins 配置信息、系统日志等数据以XML文件格式存储
[root@localhost jenkins]# java -jar /usr/share/java/jenkins.war --version
2.462.1
[root@localhost jenkins]# 
[root@localhost jenkins]# pwd
/var/lib/jenkins
[root@localhost jenkins]# 
[root@localhost jenkins]# ls -l
total 60
-rw-r--r--  1 jenkins jenkins 1729 Sep  2 12:57 config.xml    # 系统配置文件
-rw-r--r--  1 jenkins jenkins  156 Sep  2 11:06 hudson.model.UpdateCenter.xml  # 插件更新源配置文件
-rw-------  1 jenkins jenkins 1680 Sep  2 10:55 identity.key.enc  # 实例标识
-rw-r--r--  1 jenkins jenkins    7 Sep  2 11:06 jenkins.install.InstallUtil.lastExecVersion  # 当前版本
-rw-r--r--  1 jenkins jenkins    7 Sep  2 10:56 jenkins.install.UpgradeWizard.state  # 当前状态
-rw-r--r--  1 jenkins jenkins  184 Sep  2 10:56 jenkins.model.JenkinsLocationConfiguration.xml  # 本地化配置
-rw-r--r--  1 jenkins jenkins  357 Sep  2 12:57 jenkins.security.apitoken.ApiTokenPropertyConfiguration.xml  # api token 配置
-rw-r--r--  1 jenkins jenkins  169 Sep  2 12:57 jenkins.security.QueueItemAuthenticatorConfiguration.xml  # queue 认证配置
-rw-r--r--  1 jenkins jenkins  162 Sep  2 12:57 jenkins.security.UpdateSiteWarningsConfiguration.xml  # 更新站点警告配置
-rw-r--r--. 1 jenkins jenkins  171 Sep  2 10:35 jenkins.telemetry.Correlator.xml  # 数据收集配置
drwxr-xr-x. 2 jenkins jenkins    6 Sep  2 10:35 jobs  # 项目目录
drwxr-xr-x  3 jenkins jenkins   20 Sep  2 11:15 logs  # 日志信息目录
-rw-r--r--  1 jenkins jenkins 1037 Sep  2 11:06 nodeMonitors.xml  # 
drwxr-xr-x  3 jenkins jenkins   34 Sep  2 11:15 nodes  # 节点信息目录
drwxr-xr-x. 9 jenkins jenkins 4096 Sep  2 11:05 plugins  # 插件目录
-rw-r--r--  1 jenkins jenkins  258 Sep  2 11:06 queue.xml.bak
-rw-r--r--. 1 jenkins jenkins   64 Sep  2 10:35 secret.key  # 秘钥信息 
-rw-r--r--. 1 jenkins jenkins    0 Sep  2 10:35 secret.key.not-so-secret  # 秘钥信息
drwx------. 2 jenkins jenkins 4096 Sep  2 11:15 secrets
drwxr-xr-x. 2 jenkins jenkins   67 Sep  2 10:48 updates  # 更新目录
drwxr-xr-x. 2 jenkins jenkins   24 Sep  2 10:35 userContent
drwxr-xr-x. 3 jenkins jenkins   56 Sep  2 10:56 users  # 系统用户目录
[root@localhost jenkins]# 

31 - 35

31 - Pipeline 中自定义构建 ID 和描述

Jenkins 中默认构建ID 是从1开始的迭代数字

  • 通过赋值 currentBuild.displayName 修改构建 ID,可以赋值为字符串
  • 通过赋值 currentBuild.description 定义当前作业的简短描述
posted @ 2017-02-07 23:23  Anliven  阅读(854)  评论(0编辑  收藏  举报