锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

Jenkins构建状态邮件通知以及Jenkins结合Gitee、Github、Gitlab、SVN自动构建部署

时间:2023-09-19 06:07:02 3cg610b三极管

Jenkins建设状态邮件通知和建设状态邮件通知Jenkins结合Gitee、Github、Gitlab、SVN部署自动构建

  • Curl命令触发自动构建
    • 配置构建触发器
    • 获取crumb值
      • 生成API TOKEN
      • 生成crumb值
    • curl命令触发自动构建
      • curl命令说明
      • 执行测试
  • Jenkins构建状态邮件通知
    • 邮箱配置
    • 配置系统管理员的邮箱地址
    • 配置邮件通知
    • 电子邮件通知测试
    • 对Extended E-mail Notification配置模块
    • 项目建成后配置Editable Email Notification
    • 附件发送
  • Gitee通知Jenkins自动构建
    • 安装Gitee插件
    • 配置Gitee
    • 生成API令牌
    • 执行测试
    • 配置
    • Gitee项目配置WebHook
    • 推送测试
  • GitHub通知Jenkins自动构建
    • 配置Access token
    • 配置Jenkins的GitHub
    • 配置SSH
    • 源管理配置
    • 构建触发器配置
    • 构建环境配置
    • 配置webhook地址
    • 推送测试
  • Gitlab通知Jenkins自动构建
    • 安装gitlab插件
    • 生成Gitlab API令牌
    • 配置访问gitlab的凭据
    • 配置Gitlab
    • 配置构建触发器
    • 源管理配置
    • 配置Webhooks地址
    • 执行推送试验
  • SVN通知Jenkins自动构建
    • SVN的钩子程序
    • 配置钩子程序
    • 源码管理的配置
  • Jenkins pipeline
    • 新建工程
    • 编写pipeline脚本
    • 构建测试
    • 读取仓库pipeline脚本
  • Jenkins自动发布流水线Java项目
    • 新建job
    • 参数化构建
    • 编写Jenkinsfile
    • 构建传入参数

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插件,当前版本默认已安装。

邮箱配置

使用163邮箱作为测试

开启POP3/SMTP/IMAP服务与添加授权密码

配置系统管理员的邮箱地址

在系统管理->系统设置中

在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}consolea>li>    
                    <li>构建  Url : <a href="${BUILD_URL}">${BUILD_URL}a>li>    
                    <li>工作目录 : <a href="${PROJECT_URL}ws">${PROJECT_URL}wsa>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] %mli>"}
ul>
详细提交: <a href="${PROJECT_URL}changes">${PROJECT_URL}changesa><br/>
 
            td>    
        tr>    
    table>    
body>    
html>

启用DeBug和触发条件

项目构建后配置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的凭据



API token: 在gitlab中创建的token

配置Gitlab

系统管理—>系统配置—>Gitlab—>输入自定义连接名称:GitLab,指定GitLab访问地址,创建或选择GitLab通信凭证,点击Test Connection测试

配置构建触发器


生成token

源码管理配置

GitLab配置SSH

配置源码地址及对应凭证

配置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..........."
        }
}

选择git

脚本路径的配置,一定要和仓库中的路径相一致

Jenkins流水线自动化发布Java项目

新建job

参数化构建

参数化构建就是在构建项目时传入一个参数,该参数可以在JenkinsFile中使用

编写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日志进行排查

2.编写Jenkinsfile时,Test阶段访问服务需要sleep 5给予一定时间

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章