笔记内容:jenkins配置邮件通知功能以及破解管理员密码
笔记日期:2018-02-27
- 26.6 jenkins邮件设置
- 26.7 插件email-ext
- 26.8 破解jenkins管理员密码
26.6 jenkins邮件设置
打开Jenkins的web页面,点击 系统管理 -> 系统设置 -> Jenkins Location ,先设置系统管理员邮件地址,这里的系统管理员邮件地址需要和后续要设置的发送邮件的地址一致:
然后再往下拉,找到 “邮件通知” 那一栏,填写SMTP服务器地址,我这里使用的是163的服务器:
点右侧的高级,打勾“使用SMTP认证”,填写用户名以及smtp服务的密码,这里的用户名需要与我们之前设置的系统管理员邮件地址一致,如果使用的是ssl协议,还需要在这里打勾,smtp端口默认为25:
打勾 “通过发送测试邮件测试配置” ,然后填写接收邮件的地址,点右侧的Test configuration,测试发送邮件:
然后收件邮箱就会收到一封这样的邮件:
测试完邮件能够正常发送后,点击保存,接着就是到已经构建过的任务里去配置接收邮件的地址了:
在最下面 “构建后操作” 那一栏,找到E-mail Notification,Recipients填写收邮件人:
注:这个收件人邮箱只会在任务构建失败时才能收到Jenkins发送的邮件。
然后我手动的将代码发布的目录加上一个 i 权限,目的是为了让任务构建的时候失败:
[root@client ~]# cd /tmp/
[root@client /tmp]# rm -rf jenkins_test/*
[root@client /tmp]# chattr +i jenkins_test/
[root@client /tmp]#
可以看到构建这个任务失败了:
这时去收件人邮件里,看看是否已经收到了Jenkins发送的邮件:
如上,可以看到成功的收到了,Jenkins发送的邮件,这样我们就完成了Jenkins发送邮件功能的配置。
26.7 插件email-ext
虽然我们已经配置了Jenkins内置的发送邮件的功能,但是也看到了有个小缺点,就是只有在任务构建失败时才会发送邮件进行通知,而如果有需求希望任务构建成功也发送邮件进行通知,那么Jenkins内置的这个发送邮件的功能就满足不了了。
所以这种情况就需要使用插件来完成,这里我们使用到的插件是 Email Extension Plugin ,这个插件是默认安装的,所以我们直接配置使用就可以了。系统管理 -> 系统设置 -> 找到Extended E-mail Notification一栏,填写SMTP server,点击Use SMTP Authentication,填写用户名、密码、SMTP port等:
基本和之前的配置一样:
然后往下拉,配置Default Triggers:
最后把之前的 “邮件通知” 的配置内容删除掉 ,接着点击保存即可。
完成以上这一步配置后,同样的还得去配置任务中的 “构建后操作” ,点击“增加构建后操作步骤”,选择“Editable Email Notification” :
其中Project Recipient List为接收邮件的收件人,可以在默认内容后面增加额外的收件人邮箱,用逗号分隔:
点击右下角的“Advanced settings”,找到 “Triggers ”,然后点击下方的 “Add Trigger” ,可以增加发邮件的条件:
因为之前测试Jenkins的 “邮件通知” 时给发布代码的目录增加了 i 权限,现在得先改回来:
[root@client /tmp]# chattr -i jenkins_test/
然后点击任务的立即构建,可以看到构建成功了:
收件人邮箱也正常收到了通知邮件:
这个邮件通知的插件就先介绍到这,关于这个插件的更多内容,可参考以下文章:
26.8 破解jenkins管理员密码
人总是不经意间丢三落四,例如经常会忘记自己设置的密码,当你不小心忘记了jenkins的管理员密码,可以通过以下方法重置:
[root@server ~]# cd /var/lib/jenkins/users/admin/
[root@server /var/lib/jenkins/users/admin]# ls
config.xml
[root@server /var/lib/jenkins/users/admin]# vim config.xml
然后定位到 passwordHash 那一行,这一行存的就是加密后的密码,删除该行,改为以下内容:
<passwordHash>#jbcrypt:$2a$10$nhq0VvaBetttj7rsLn3POuqsblkpa2S550MFW9wanc0YAd7A9De8G</passwordHash>
接着重启一下jenkins服务:
systemctl restart jenkins.service
重启完成后,此时admin的密码为 123456 ,这是因为在配置文件里替换了之前的密码。
有小伙伴在问这个 123456 加密后的密文是怎么来的,所以在此增加一段内容说明一下Jenkins的加密方式:
Jenkins的密码采用的是Java加解密工具 JBcrypt 来进行加密的,而且这种加密方式有点意思,因为同一个密码它每次加密后的密文都是不一样的,由于这种加密方式也是采用hash算法进行实现的,所以是不可逆的,无法通过去解密密文得到明文。
而它的解密方式则是需要 明文 + 密文 去重新生成一串密文来进行判断是否能够解密。所以bcrypt和其他对称或非对称加密方式不同的是,不是直接解密得到明文,也不是二次加密比较密文,而是把明文和存储的密文一块运算得到另一个密文,如果这两个密文相同则验证成功。
那么如何利用这个 JBcrypt 工具进行加密呢?这就需要使用Java代码完成了,创建一个Java工程,导入 JBcrypt 的jar包,我这里使用的是Maven工程,所以只需要配置pom.xml文件的依赖如下:
<dependency>
<groupId>org.mindrot</groupId>
<artifactId>jbcrypt</artifactId>
<version>0.3m</version>
</dependency>
编写代码如下:
package org.zero01;
import org.mindrot.jbcrypt.BCrypt;
public class TestJbcrypt {
public static void main(String[] args) {
// 调用BCrypt类的hashpw方法进行加密,gensalt方法会得到一个BCrypt内置的默认值
String hashed = BCrypt.hashpw("7654321", BCrypt.gensalt());
System.out.println("加密后的密文:" + hashed);
// 这是解密方式,需要传递密文和明文
if (BCrypt.checkpw("7654321", hashed)) {
System.out.println("解密成功");
} else {
System.out.println("解密失败");
}
}
}
运行结果如下:
加密后的密文:$2a$10$ZqYglmkG74uZwOw1INrXceCF/EUxScyHUkXG9DP0pMSdHNb9a0Rw2
解密成功
然后和上面一样删除config.xml文件里 Jenkins 原本的密码,把加密后的密文粘贴上去,记得不要漏掉前缀 #jbcrypt:
,例如:
<passwordHash>#jbcrypt:$2a$10$ZqYglmkG74uZwOw1INrXceCF/EUxScyHUkXG9DP0pMSdHNb9a0Rw2</passwordHash>
接着重启Jenkins服务,让密码生效。
需要这个jar包的话可以到maven的中央仓库去下载,地址如下:
转载于:https://blog.51cto.com/zero01/2073548