目录
4.1、安装Email Extension Plugin插件
4.5、Extended E-mail Notification配置
4)、Extended E-mail Notificati其他配置
本文主要介绍Jenkins自动打包、推送,发布,邮件通知,Jenkins具体配置参考之前文章
(一)Jenkins部署、基础配置
(二)Jenkins全局工具配置
1、前言
1 .1、插件简介
有很多插件都是选择的默认的安装的,Git plugin 和 Maven Integration plugin、publish over SSH、Deploy to container、Subversion
Git | 3.11.0 | 使用Git访问远程仓库 |
Git Push Plugin | 34 | 通过Git 插件执行 git push 作为构建后的步骤 |
Gitee Plugin | 1.2.7 | 允许 Gitee 在提交代码或打开/更新拉取请求时触发 Jenkins 中的构建。它还可以将构建状态发送回 Gitee。 |
Maven Integration plugin | 3.20 | 这提供Jenkins和Maven之间的深度集成。它增加了对基于SNAPSHOT的项目之间自动触发的支持,以及对Junit等各种Jenkins发布程序的自动配置。 |
publish-over-ssh | 1.20.1 | 用于将编译结果发布到远程服务器 |
Deploy to container | 成功构建后将战争到容器Tomcat等。 | |
Subversion | svn插件 | |
Xcode integration | 提供构建器来构建xcode项目,调用agvtool和包。ipa文 |
1.2、插件安装
1). 安装SSH插件
如果没有安装SSH插件的话,是不支持配置远程SSH的,这里可以去插件里面看下,是否安装了。
2). 新增全局配置
环境配置, 管理Jenkins-->Configure System 找到 Publish over SSH,点击新增,新增SSH Server,输入Hostname,Username,Password,点击Test Configuration,提示:Success 代表SSH连通远端服务器,保存即可。
2、创建Maven项目
2.1、新建一个全新的项目
1)点击【新建Item】
2)输入任务名称
3)选择【构建一个maven项目】
4)点击【确定】,进入配置页面
2.2、拷贝已有项目
1)点击【新建Item】
2)输入任务名称
3)复制输入需要复制项目的名称,可下拉快捷选择
4)点击【确定】,进入配置页面,此时配置页面带有复制的项目配置,根据本项目需要修改即可
3、项目配置
如果是新建任务,则直接进入配置页面修改配置;如果是已有任务,则右上角查找项目名称,回车后进入此项目空间,左侧点击【配置】按钮,进入配置页面;或者是列表直接找到项目名称,点击项目名称进入此项目;
3.1 、General
(1)、描述
纯文本,备注,项目简介、用途等
(2)、Discard old builds(丢弃旧的构建)
配置build保留的次数与天数;发布包保留次数、天数
Jenkins job执行build后,会在服务器上留下build记录及发布包,这些内容会占用磁盘空间;默认配置是不勾选Discard old builds的,此时默认值为365,显然这个值过大了;
Jenkins job在每次build结束后(无论成功还是失败),都会自动执行Discard old builds,释放磁盘空间;
因此根据磁盘空间来设置选项,如果磁盘空间充足,则均为15,如果磁盘空间不足,则均设置为3;当然也可根据实际需求来设置;
如图配置也可:
其中“发布包保留天数”和“发布包最大保留”,这两个选项是通过 Discard old builds右下角【高级】按钮控制显示的;
(3)、Gitee 链接
默认值为:https://gitee.com
3.2、源码管理
1、选择代码管理,比如git
2、输入地址
3、添加凭据,建议以ssh登录
4、指定分支,默认*/master
配置源码仓库地址及账号,下图为Gitee示例
3.3、构建触发器
当某个事件被触发时,自动重新构建项目;非必须,一般都通过build now手动执行构建;当然了解了触发器,可以根据触发器形式打造理想中的构建形式。
1)Build whenever a SNAPSHOT dependency is built
当job依赖的快照版本被build时,执行本job;即当代码有更新时就构建项目
2)Build after other projects are built
作用:配置关注的项目,当关注的项目构建后,构建本项目
3)Build periodically:隔一段时间定时build一次,不管版本库代码是否发生变化
日程表规则:
个人配置如图 ,每天中午12点定时构建一次:
4)Poll SCM:轮询构建
指定一段时间间隔去扫描代码仓库的代码是否有变更,如果有,则出发项目构建;
日程表的规则应该是遵循上述规则,未验证;
3.4、构建环境
非必须,但建议勾选Delete workspace before build starts。勾选此选项后,每次打包前jenkins会先删除工作区代码再打包;如果不勾选此选项,开发人员删除某些代码文件,但是此文件仍然在工作区保留,打包时仍然会带着打包,有可能会通过打包引起的bug;
每次重新构建时都会从配置的源码地址取到最新的项目代码放到工作区中,但是Jenkins只会将代码放到工作区中,而不执行删除操作,同样的文件会覆盖掉,但如果新的代码中有些文件已经删除了,则在工作区中还会保留。所此需要构造这个选项。
3.5、Pre Steps
构建前操作,一般不需要配置
3.6、Build
1)Root POM
对应的pom.xml路径,此路径是相对于workspace的相对路径;注意:是相对位置,如果该文件不存在,会有红色字提示。
2)Goals and options
打包命令,不要加mvn,默认前缀会加;一般为空即可,如果有需要再添加内容;可添加maven命令。
clean package -Dmaven.test.skip=true(清除以前的包,重新打包,并跳过测试)
3)【高级】
点击高级按钮,配置maven,若在安装Jenkins后已对系统配置maven,则无需每次新建项目再次配置maven
3.7、Pre Steps
构建后操作:如果需要实现自动构建自动发布,则需要配置,或在Post Steps选项下配置
3.8、构建环境
3.9、Post Steps⁎⁎⁎
配置Send files or execute commands over SSH,实现远程将自动构建的jar包上传至远程服务器
1)run only if build succeeds
只有在构建成功后再运行下面步骤,
2)send files or execute commands over ssh
表示在构建之后,执行向指定远程服务器发送文件或者在远程服务器执行脚本命令,点击按钮Add post-build step选择添加
3)send files or execute commands over ssh 配置
点击高级对 脚本相关信息配置
示例:
exec command文件传输后执行命令,启动服务
source /etc/profile
project=sendEmail-0.0.1-SNAPSHOT.jar
echo "文件目录"
dir=/home/dyt/
pid=`ps -ef | grep $dir$project | grep -v grep | awk '{print $2}'`
if [ -n "$pid" ]
then
kill - $pid
fi
echo "运行构建的jar包"
nohup java -jar $dir$project >/dev/null 2>&1 &
控制台输出查看结果:
Started by user administrator
Running as SYSTEM
Building in workspace C:\ProgramData\Jenkins\.jenkins\workspace\sendEmail
The recommended git tool is: NONE
using credential 0cdd1aa5-60b1-4f47-9bf8-dab98e3619dc
> git.exe rev-parse --resolve-git-dir C:\ProgramData\Jenkins\.jenkins\workspace\sendEmail\.git # timeout=10
Fetching changes from the remote Git repository
> git.exe config remote.origin.url https://toscode.gitee.com/dyt314569024/test.git # timeout=10
Fetching upstream changes from https://toscode.gitee.com/dyt314569024/test.git
> git.exe --version # timeout=10
> git --version # 'git version 2.39.0.windows.2'
using GIT_ASKPASS to set credentials
> git.exe fetch --tags --force --progress -- https://toscode.gitee.com/dyt314569024/test.git +refs/heads/*:refs/remotes/origin/* # timeout=10
> git.exe rev-parse "refs/remotes/origin/master^{commit}" # timeout=10
Checking out Revision b71f4fa4b13fa2cc65363ff4d0bea9e1fb31c4e0 (refs/remotes/origin/master)
> git.exe config core.sparsecheckout # timeout=10
> git.exe checkout -f b71f4fa4b13fa2cc65363ff4d0bea9e1fb31c4e0 # timeout=10
Commit message: "11"
> git.exe rev-list --no-walk b71f4fa4b13fa2cc65363ff4d0bea9e1fb31c4e0 # timeout=10
Parsing POMs
Modules changed, recalculating dependency graph
Established TCP socket on 11918
[sendEmail] $ java -cp C:\ProgramData\Jenkins\.jenkins\plugins\maven-plugin\WEB-INF\lib\maven35-agent-1.14.jar;F:\apache-maven-3.6.1\boot\plexus-classworlds-2.6.0.jar;F:\apache-maven-3.6.1/conf/logging jenkins.maven3.agent.Maven35Main F:\apache-maven-3.6.1 C:\ProgramData\Jenkins\war\WEB-INF\lib\remoting-3077.vd69cf116da_6f.jar C:\ProgramData\Jenkins\.jenkins\plugins\maven-plugin\WEB-INF\lib\maven35-interceptor-1.14.jar C:\ProgramData\Jenkins\.jenkins\plugins\maven-plugin\WEB-INF\lib\maven3-interceptor-commons-1.14.jar 11918
<===[JENKINS REMOTING CAPACITY]===>channel started
Executing Maven: -B -f C:\ProgramData\Jenkins\.jenkins\workspace\sendEmail\pom.xml -s F:\apache-maven-3.6.1\conf\settings.xml -gs F:\apache-maven-3.6.1\conf\settings.xml clean package -Dmaven.test.skip=true(清除以前的包,重新打包,并跳过测试)
[INFO] Scanning for projects...
[INFO]
[INFO] -----------------------< com.ykx.mail:sendEmail >-----------------------
[INFO] Building sendEmail 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:3.1.0:clean (default-clean) @ sendEmail ---
[INFO] Deleting C:\ProgramData\Jenkins\.jenkins\workspace\sendEmail\target
[INFO]
[INFO] --- maven-resources-plugin:3.1.0:resources (default-resources) @ sendEmail ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] Copying 5 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ sendEmail ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 25 source files to C:\ProgramData\Jenkins\.jenkins\workspace\sendEmail\target\classes
[INFO]
[INFO] --- maven-resources-plugin:3.1.0:testResources (default-testResources) @ sendEmail ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory C:\ProgramData\Jenkins\.jenkins\workspace\sendEmail\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ sendEmail ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-surefire-plugin:2.22.2:test (default-test) @ sendEmail ---
[INFO] No tests to run.
[JENKINS] Recording test results
[INFO]
[INFO] --- maven-jar-plugin:3.1.2:jar (default-jar) @ sendEmail ---
[INFO] Building jar: C:\ProgramData\Jenkins\.jenkins\workspace\sendEmail\target\sendEmail-0.0.1-SNAPSHOT.jar
[INFO]
[INFO] --- spring-boot-maven-plugin:2.2.6.RELEASE:repackage (repackage) @ sendEmail ---
[INFO] Replacing main artifact with repackaged archive
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 16.466 s
[INFO] Finished at: 2023-01-19T23:04:56+08:00
[INFO] ------------------------------------------------------------------------
Waiting for Jenkins to finish collecting data
[JENKINS] Archiving C:\ProgramData\Jenkins\.jenkins\workspace\sendEmail\pom.xml to com.ykx.mail/sendEmail/0.0.1-SNAPSHOT/sendEmail-0.0.1-SNAPSHOT.pom
[JENKINS] Archiving C:\ProgramData\Jenkins\.jenkins\workspace\sendEmail\target\sendEmail-0.0.1-SNAPSHOT.jar to com.ykx.mail/sendEmail/0.0.1-SNAPSHOT/sendEmail-0.0.1-SNAPSHOT.jar
SSH: Connecting from host [DYT]
SSH: Connecting with configuration [dytCS] ...
SSH: Creating session: username [root], hostname [192.168.6.77], port [22]
SSH: Connecting session ...
channel stopped
SSH: Connected
SSH: Opening SFTP channel ...
SSH: SFTP channel open
SSH: Connecting SFTP channel ...
SSH: Connected
SSH: cd [/home]
SSH: OK
SSH: cd [/home]
SSH: OK
SSH: cd [dyt/]
SSH: OK
SSH: put [sendEmail-0.0.1-SNAPSHOT.jar]
SSH: OK
SSH: Opening exec channel ...
SSH: EXEC: channel open
SSH: EXEC: STDOUT/STDERR from command [source /etc/profile
project=sendEmail-0.0.1-SNAPSHOT.jar
echo "文件目录"
dir=/home/dyt/
pid=`ps -ef | grep $dir$project | grep -v grep | awk '{print $2}'`
if [ -n "$pid" ]
then
kill - $pid
fi
echo "运行构建的jar包"
nohup java -jar $dir$project >/dev/null 2>&1 &] ...
SSH: EXEC: connected
鏂囦欢鐩綍
bash: 绗� 8 琛岋細kill: 锛氭棤鏁堢殑淇″彿澹版槑
杩愯鏋勫缓鐨刯ar鍖�
SSH: EXEC: completed after 213 ms
SSH: Disconnecting configuration [dytCS] ...
SSH: Transferred 1 file(s)
Finished: SUCCESS
备注:高级选项勾选:Verbose output in console,代表可以在控制台看到执行结果,不勾选虽然执行成功了那么看不到。
windows的服务器执行文件,python文件或者其他,需要使用execute windows batch commend 。liunx 下使用execute shell
4、配置邮件通知服务
4.1、安装Email Extension Plugin插件
安装路径:Manage Jenkins>Manage Plugins
4.2、获取邮箱授权码
测试用的QQ邮箱,确保POP3/SMTP/IMAP服务是开启的,点击生成授权码,发送短信获取授权码,用于后续配置登录凭证
4.3、配置Jenkins邮箱通知
Manage Jenkins > Configure System下,Jenkins Location中配置系统管理员的邮箱地址
拖动页面右侧滑块到页面最底部,接着进行邮件通知的相关配置
4.4、配置邮件通知
SMTP服务器:使用邮箱对应的服务器地址
用户默认邮件后缀:可不填,填了,代表其他创建的用户账号的默认邮箱后缀为填入的邮箱后缀
SMTP用户名/密码:发送邮件的账号,密码为获取的授权码
SMTP端口:SMTP对应服务器对应端口
通过发送测试邮件测试配置
Test e-mail recipient :接收测试邮件邮箱地址
Test configuration:测试配置,点击Test configuration按钮,为测试账号发送邮件,成功提示 Email was successfully sent
测试时若出现 javax.mail.MessagingException: Got bad greeting from SMTP host: smtp.163.com, port: 465, response: [EOF] 错误,则查看使用的端口是否需要使用SSL协议
4.5、Extended E-mail Notification配置
1)、配置SMTP服务器地址及其端口
常用邮箱 | SMTP服务器地址及端口 | POP3服务器地址及端口 |
QQ邮箱 | smtp.qq.com(端口:25) | pop.qq.com(端口:110) |
QQ企业邮箱 | pop.exmail.qq.com (SSL启用 端口:995) | smtp.exmail.qq.com(SSL启用 端口:587/465) |
126邮箱 | pop.126.com(端口:110) | smtp.126.com(端口:25) |
2)、配置邮件登录凭证
Credentials:添加凭证
密码重新获取授权码
凭证配置操作如图
3)、配置邮件通知标题、内容
由于邮件使用了Html编写,所以配置Default Content Type选择类型HTML (text/html),附邮件内容代码
<!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>
4)、Extended E-mail Notificati其他配置
4.5、项目配置
打开项目设置,找到选项卡构建后操作, 点击增加购进后操作步骤,选择Editable Email Notification。
Project Recipient List:填入收件人的邮箱账号,有多个账号时使用逗号隔开
Attachments:读取路径是主目录下的workspace文件夹 ,所以想要将报告以附件的形式发送的话,就需要在build文件中将报告的生成路径更改为项目的工作空间,
针对单个文件,直接填写相对路径;多个文件需要作为附件进行发送,可在Attachments中填入report/*.txt,如有多个文件的话,路径之间用英文逗号隔开,例如,项目根文件夹下有个文件1.txt,2.txt
Attach Build Log:选择是否发送构建日志
Content Type:内容类型,一般为html
Default Content:邮件内容,默认为系统设置
4.6、邮件效果
鸣谢:Jenkins配置邮件通知服务,完整教程(含发送成功无法接收邮件处理方案)_不定时总结的那啥的博客-CSDN博客_jenkins 邮件通知