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页面本地化之后,界面显示中英文混杂
原因及处理方式
- 某些版本识别浏览器默认语言以后的本地化处理存在问题。升降级到一个稳定可用的LTS版本
- 旧版本插件干扰。卸载并重新安装中文显示插件,并在系统设置中配置中文Locale(Default Language=zh_CN),然后重启jenkins服务。
- 获得最新TLS版本的plugins目录,然后覆盖到旧版本的jenkins目录下。
- 设为”简体中文“后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问题处理汇总
- Jenkins插件安装失败处理方法:https://www.cnblogs.com/sxdcgaq8080/p/10489326.html
- 安装和使用Jenkins时遇到的问题:https://www.jianshu.com/p/62cc8605b4e3
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:
- Scroll down to "Branch Sources"
- Under "Property strategy", choose "Named branches get different properties"
- Click "Add exception", enter "master" as the branch name
- Click "Add property", choose "Suppress automatic SCM triggering"
- Save
That would prevent changes to the master branch from triggering a build of the corresponding job.
20 - Jenkins CheatSheet
- https://github.com/DennyZhang/cheatsheet-jenkins-groovy-A4
- https://intellipaat.com/blog/tutorial/devops-tutorial/jenkins-cheat-sheet
- https://www.edureka.co/blog/cheatsheets/jenkins-cheat-sheet
21 - 25
21 - JenkinsX
- Jenkins与JenkinsX的区别: https://jenkins-x.io/
- jenkins X实践系列: https://www.cnblogs.com/xiaoqi/category/1398096.html
- 从 Jenkins 迁移到 Jenkins X:一场持续交付之旅 :https://www.infoq.cn/article/YWkOx7t4gQyO-64KZ186
22 - Jenkins 插件 Office 365 Connector
Plugin is used to send actionable messages in Outlook, Office 365 Groups, and Microsoft Teams.
- https://plugins.jenkins.io/Office-365-Connector/
- https://github.com/jenkinsci/office-365-connector-plugin/
23 - 步骤参考
- Jenkins+Maven+Git(GitLab)持续集成Java项目 https://cloud.tencent.com/developer/article/1484869
- Jenkins+Docker+Git+Harbor流水线打包 https://www.cnblogs.com/Dev0ps/p/10502803.html
- Jenkins+Ansible+Gitlab自动化部署三剑客:https://blog.csdn.net/weixin_38657051/category_9248883.html
基于Jenkins Pipeline的Devops
- Blog: https://blog.csdn.net/zbbkeepgoing/category_7969146.html
- GitHub: https://github.com/zbbkeepgoing/containerization
Jenkins实践
- Jenkins: http://www.idevops.site/jenkins
- GitHub: http://github.com/zeyangli
24 - 官方Pipeline文档
- https://www.jenkins.io/doc/book/pipeline/syntax/
- https://www.jenkins.io/doc/pipeline/steps/
- https://www.jenkins.io/doc/pipeline/steps/core/
- https://www.jenkins.io/doc/pipeline/steps/workflow-basic-steps/
- https://www.jenkins.io/doc/pipeline/steps/pipeline-utility-steps/
- https://www.jenkins.io/doc/pipeline/steps/email-ext/
25 - Jenkins镜像和war包
26 - 30
26 - 参考Groovy脚本
- https://github.com/Statemood/jenkins
- https://github.com/Statemood/jenkins-library
- https://github.com/RoyWang-CI/groovy
27 - 一些plugins
-
JUnit: 单元测试报告 https://plugins.jenkins.io/junit
-
JaCoCo:代码覆盖率 https://plugins.jenkins.io/jacoco pom文件中引入
-
Sonarqube Scanner: 持续代码质量检查 https://plugins.jenkins.io/sonar pom文件中引入
-
Credentials Binding Plugin : 凭证绑定 https://plugins.jenkins.io/credentials-binding
-
Workspace Cleanup:清理工作空间 https://plugins.jenkins.io/ws-cleanup/
-
Copy Artifact:从另一个pipeline中拷贝制品 https://plugins.jenkins.io/copyartifact
-
Email Extension : 邮件通知 https://plugins.jenkins.io/email-ext/
-
Resource Disposer https://plugins.jenkins.io/resource-disposer/
-
Green Balls: 构建成功的状态图标显示绿色 https://plugins.jenkins.io/greenballs/
-
Build Monitor View: 任务状态监控 https://plugins.jenkins.io/build-monitor-plugin/
-
Monitoring: Jenkins状态监控 https://plugins.jenkins.io/monitoring/
-
Periodic Backup: Jenkins备份 https://plugins.jenkins.io/periodicbackup/
-
Ansible: 执行ansible命令 https://plugins.jenkins.io/ansible
28 - Components for DevOps platform
Note: 相应的插件!
- Gitlab 集成
- Sonar 集成
- Artifacotry 集成
- LDAP server 集成
- Ansible 集成
- 监控: Jenkins + Prometheus + Grafana
29 - Jenkins 插件开发
- https://www.jenkins.io/doc/developer/tutorial/extend/
- https://javadoc.jenkins.io/
- https://javadoc.jenkins.io/index-core.html
- https://javadoc.jenkins.io/plugin/
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 定义当前作业的简短描述
行动是绝望的解药!
欢迎转载和引用,但请在明显处保留原文链接和原作者信息!
本博客内容多为个人工作与学习的记录,少数内容来自于网络并略有修改,已尽力标明原文链接和转载说明。如有冒犯,即刻删除!
以所舍,求所得,有所获,方所成。