Jenkins构建状态邮件通知以及Jenkins结合Gitee、Github、Gitlab、SVN自动构建部署
Curl命令触发自动构建
配置构建触发器
给Jenkins项目特定的 URL 地址发送请求,并且以请求参数的形式携带一个特定值(身份验证令牌)
例如项目触发地址:JENKINS_URL/job/MyTest/build?token=TOKEN_NAME
请求:http://IP:8080/jenkins/view/all/job/MyTest/build?token=TOKEN_NAMEE
将触发Jenkins自动构建
获取crumb值
生成API TOKEN
从用户列表找到需要生成API TOKEN的用户
选择设置进行生成API TOKEN
生成crumb值
访问:http://admin:114f8c536957ba2cebc331e4399a27994c@112.74.96.150:8080/jenkins/crumbIssuer/api/xml
生成crumb值
curl命令触发自动构建
curl命令说明
curl 命令发送HTTP请求参数说明:
-X 参数:指定请求方式
-v 参数:显示响应结果
-u 参数:携带用户名:密码
-H 参数:携带请求消息头信息
curl -X post -v -u admin:3219fd02fd0c46c2b84fff9cc0fd730c -H "Jenkins-Crumb:a645f783207695c7e2c0869d10f71e6c86765e56672d917bab3a0dffb3482558" http://IP:8080/jenkins/job/MyTest/build?token=TOKEN_NAME
执行测试
响应结果:
* About to connect() to IP port 8080 (#0)
* Trying IP...
* Connected to IP (IP) port 8080 (#0)
* Server auth using Basic with user 'admin'
> post /job/MyTest/build?token=TOKEN_NAME HTTP/1.1
> Authorization: Basic YWRtaW46NTIwY2hlbi4u
> User-Agent: curl/7.29.0
> Host: IP:8080
> Accept: */*
> Jenkins-Crumb:a645f783207695c7e2c0869d10f71e6c86765e56672d917bab3a0dffb3482558
>
< HTTP/1.1 201 Created
< Date: Tue, 24 May 2022 13:40:55 GMT
< X-Content-Type-Options: nosniff
< Location: http://IP:8080/queue/item/59/
< Content-Length: 0
< Server: Jetty(9.4.43.v20210629)
<
* Connection #0 to host IP left intact
Jenkins构建状态邮件通知
前提是需要安装Email Extension Plugin
插件,当前版本默认已安装。
邮箱配置
配置系统管理员的邮箱地址
在系统管理->系统设置中
在Jenkins Location中配置系统管理员的邮箱地址,不进行配置的话将无法发送邮件
Failed to send out e-mail
com.sun.mail.smtp.SMTPSenderFailedException: 553 Mail from must equal authorized user
配置邮件通知
邮件通知测试
对Extended E-mail Notification模块进行配置
用于发送构建后的报告邮件,不进行配置的话,在之后的项目构建中,你就会看到构建成功,邮件也发送成功,哎但是邮箱就是没有收到邮件
Extended E-mail Notification模块,就在邮件通知模块的上方
邮件服务器相关配置
邮件发送内容类型与默认收件人配置
邮件发送主题与内容配置
<!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>
${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>
项目构建后配置Editable Email Notification
添加后只需要修改以下2处(邮件内容类型,是否发送构建日志),其他采用全局默认配置即可,有需要自行修改;
点击立即构建测试
附件发送
cd /root/.jenkins/workspace/MyTest
mkdir files
cd files
files2.txt files.txt
Attachments的读取路径是主目录下的workspace文件夹
Gitee通知Jenkins自动构建
安装Gitee插件
配置Gitee
生成API令牌
访问https://gitee.com/profile/personal_access_tokens
获取Gitee API V5 的私人令牌
执行测试
配置
新建Job任务,配置Gitee链接
源码管理配置
触发器配置
Gitee项目配置WebHook
推送测试
GitHub通知Jenkins自动构建
配置Access token
在GitHub个人设置中心找到Developer settings
点击Personal access tokens再点击 Generate new token
勾上 repo 和 admin:repo_hook
配置Jenkins的GitHub
配置SSH
源码管理配置
构建触发器配置
构造触发器选择:GitHub hook trigger for GITScm polling
构建环境配置
勾选Use secret text(s) or file(s),”凭据”选择之前配置过的凭证
配置webhook地址
推送测试
Gitlab通知Jenkins自动构建
安装gitlab插件
系统管理 —>> 插件管理 —>> 安装插件gitlab插件
生成Gitlab API令牌
输入令牌名称:Jenkins,到期时间:2023-01-01,根据实际需求勾选权限,最后创建令牌
新创建的access token
翻到最上,有访问令牌内容
配置访问gitlab的凭据
配置Gitlab
系统管理—>系统配置—>Gitlab—>输入自定义连接名称:GitLab,指定GitLab访问地址,创建或选择GitLab通信凭证,点击Test Connection测试
配置构建触发器
源码管理配置
配置Webhooks地址
gitlab对应的project上,创建Webhooks;将Jenkins的Secret token 与Build URL 复制到gitlab中
SSL验证根据需求开启,点击Add webhook进行添加
执行推送测试
SVN通知Jenkins自动构建
SVN的钩子程序
svn版本控制仓库下某个hooks
目录,里面有SVN 版本库的钩子程序
ls
post-commit.tmpl post-lock.tmpl post-revprop-change.tmpl post-unlock.tmpl pre-commit.tmpl pre-lock.tmpl pre-revprop-change.tmpl pre-unlock.tmpl start-commit.tmpl
钩子程序由 post-commit.tmpl 复制得到,且得到文件名不能有后缀,否则不能正常使用。
cp post-commit.tmpl post-commit
配置钩子程序
编辑钩子程序:vim post-commit
,注释原有内容,加入 第五步得到的curl 命令
# http://svn.apache.org/repos/asf/subversion/trunk/tools/hook-scripts/ and
# http://svn.apache.org/repos/asf/subversion/trunk/contrib/hook-scripts/
# REPOS="$1"
# REV="$2"
curl -X post -v -u admin:3219fd02fd0c46c2b84fff9cc0fd730c -H "Jenkins-Crumb:a645f783207695c7e2c0869d10f71e6c86765e56672d917bab3a0dffb3482558" http://IP:8080/jenkins/job/MyTest/build?token=TOKEN_NAME
# mailer.py commit "$REPOS" "$REV" /path/to/mailer.conf
配置源码管理
Jenkins pipeline
新建工程
编写pipeline脚本
node {
def mvnHome
stage('git checkout') {
checkout([$class: 'GitSCM', branches: [[name: '*/dev']],
doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [],
userRemoteConfigs: [[url: 'git@gitee.com:XXX/my-test.git']]])
}
stage('maven Build') {
echo "maven build........."
}
stage('deploy') {
echo "deploy..........."
}
stage('test') {
echo "test..........."
}
}
构建测试
从仓库中读取pipeline脚本
可以从代码仓库中读取pipeline脚本(把pipeline脚本放在仓库中)之后如果要更改步骤,不需要再更改jenkins的步骤,直接更改文件即可。
在项目根目录下编写Jenkinsfile
脚本文件并提交到Git仓库
node {
def mvnHome
stage('maven Build') {
echo "maven build........."
}
stage('deploy') {
echo "deploy..........."
}
stage('test') {
echo "test..........."
}
}
Jenkins流水线自动化发布Java项目
新建job
参数化构建
编写Jenkinsfile
git checkout: 拉取代码,${branch}:使用上数参数构建中的参数
maven build:指定JAVA_HOME,执行Maven清理打包跳过测试阶段
deploy:指定运行环境,判断与目录备份,解压war到指定目录,Kill进程,最后启动tomcat
test:访问服务
node () {
stage('git checkout') {
checkout([$class: 'GitSCM', branches: [[name: '${branch}']],
doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [],
userRemoteConfigs: [[url: 'git@gitee.XXX/my-test.git']]])
}
stage('maven build') {
sh 'export JAVA_HOME=/usr/local/jdk1.8'
sh '/usr/local/maven/bin/mvn clean package -Dmaven.test.skip=true'
}
stage('deploy') {
sh '''JENKINS_NODE_COOKIE=dontkillme
export JAVA_HOME=/usr/local/jdk1.8
export JRE_HOME=/usr/local/jdk1.8/jre
TOMCAT_NAME=tomcat
TOMCAT_HOME=/usr/local/$TOMCAT_NAME
WWWROOT=$TOMCAT_HOME/webapps/ROOT
if [ -d $WWWROOT ]; then
mv $WWWROOT /data/backup/${TOMCAT_NAME}-$(date +"%F_%T")
fi
unzip ${WORKSPACE}/target/*.war -d $WWWROOT
PID=$(ps -ef |grep $TOMCAT_NAME |egrep -v "grep|$$" |awk \'{print $2}\')
[ -n "$PID" ] && kill -9 $PID
/bin/bash $TOMCAT_HOME/bin/startup.sh'''
}
stage('test') {
sleep 5
sh "curl http://IP:8081"
echo "test success ..."
}
}
传入参数进行构建
1.构建阶段错误,参考tomcat/logs/catalina.out
日志进行排查
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/136963.html