Bootstrap

Windows系统下搭建Jenkins服务和邮件配置

目录

前言

前置条件

具体步骤

一、安装 Tomcat

二、部署 Jenkins.war 包

三、启动 Tomcat

四、初始化Jenkins

五、配置和使用 Jenkins

一、插件安装

二、Gitee配置

三、Allure测试报告配置

四、项目创建及Gitee代码获取

五、发送邮件配置

六、项目配置邮件

相关问题

一、启动tomcat服务DOS窗口乱码问题

二、无法将位于***的资源添加到Web应用程序[/jenkins]的缓存中,因为在清除过期缓存条目后可用空间仍不足 - 请考虑增加缓存的最大空间

三、Jenkins中的告警


前言

        一、此文章仅记录Windows系统下搭建Jenkins服务和邮件配置,本文使用的是QQ邮箱,其他邮箱配置方法基本一致。

        二、从 Jenkins 2.357(2022 年 6 月 28 日发布)以及 2022 年 9 月发布的 LTS(长期支持)版本开始,官方要求使用 Java 11。如果想要使用 JDK 1.8,就需要安装 Jenkins 2.357 版本之前的版本,因为这些旧版本是基于 Java 8 构建和测试的,能够在 Java 8 环境下正常运行。(老版本镜像下载https://mirrors.aliyun.com/jenkins/)。

前置条件

        Jenkins 是基于 Java 开发的,所以需要先安装 Java 运行环境(JRE)或开发工具包(JDK);传送门:Java环境搭建

具体步骤

一、安装 Tomcat

  1. 下载 Tomcat访问 Apache Tomcat 官方网站,在Download中选择适合 Windows 系统的版本进行下载,我选择的是Tomcat9,选择64位下载压缩包。(可能会比较慢:通过网盘分享的文件:tomcat 和 jenkins
    链接: https://pan.baidu.com/s/1xNz7xFIaRDCdzccQ98OUYA 提取码: agti)

  2. 安装 Tomcat:解压下载的压缩包到一个合适的位置(没有中文并且建议路径短一点),例如C:\Jenkins\apache-tomcat-9.0.97。

二、部署 Jenkins.war 包

  1. 获取 jenkins.war 包:可以从 Jenkins 官方网站下载 jenkins.war 文件

  2. 点击Download,选择LTS版本下载,注意别直接选最新的war应该要对应的版本,点击Past Release

  3. 进入页面后,上方会告诉你对应war包版本需要的java版本,我本地的是java11版本的,选择2.462.3版本进行下载

  4. 点击进入下载页面,选择jenkins.war包进行下载,下载完成后可能是个zip文件,直接修改后缀为.war就可以了

  5. 将 jenkins.war 包放入 Tomcat 的 webapps 目录

三、启动 Tomcat

  1. 进入 Tomcat 安装目录下的bin文件夹
  2. 找到startup.bat双击,等待一段时间,让他自动部署下

四、初始化Jenkins

  1. 可以在命令提示符窗口中看到 Tomcat 的启动日志。如果出现错误,可以根据日志信息进行排查。
  2. 访问 Jenkins
    1. 打开浏览器,输入http://localhost:8080/jenkins(如果 Tomcat 使用了默认端口 8080)

    2. 首次访问时,Jenkins 会进行一些初始化设置,需要等待一段时间。
    3. 根据页面提示,复制路径,然后使用资源管理器中输入路径,回车,选择记事本打开,复制密码到输入框中

    4. 输入密码后,点击继续 -----(保持格式)

    5. 选择安装推荐插件(可能会安装失败,没有关系),等待一段时间即可。

    6. 耐心等待插件安装完成,可能比较久,也可以选择不安装插件

    7. 按照提示创建管理员用户,输入用户名密码等字段,点击保存并完成。

    8. Jenkins Url选择默认的即可

    9. 保存之后,点击开始使用Jenkins

五、配置和使用 Jenkins

一、插件安装

  1. 点击“Manage Jenkins”

  2. 点击‘Plugins’

  3. 点击'available plugins(可选插件)' ,分别输入gitee,allure,email extension,html publish,勾选后点击安装;(说明:我的项目是在gitee上的,报告由allure生成,email是用来发送邮件的后面会有配置说明)

  4. 等待安装完成后,需要重启tomcat才会生效;重启操作回到tomcat/bin目录下,双击shutdown.bat,然后再双击startup.bat(startup.sh是linux下的启动项),刷新Jenkins页面

二、Gitee配置

     PS: 本地记得安装git

  1. 点击manage jenkins,在configure system点击system

  2. 在Gitee配置中,Gitee链接,Gitee 域名 URL与项目名最好一致

  3. 证书令牌,点击jenkins,弹窗选择Gitee API令牌,复制下方的网址进行令牌生成
  4. 点击生成新令牌,输入令牌名称,验证密码后会生成一个令牌,点击复制

  5. 输入Gitee APIV5 私人令牌:刚刚生成复制的,点击添加

  6. 返回到证书令牌界面后,点击无-选择刚刚创建的令牌

三、Allure测试报告配置

  1. 在manage jenkins 中,System Configuration选择Tools
  2. 在最后取消自动下载,填写自己的安装路径

四、项目创建及Gitee代码获取

  1. 回到首页,新建item输入名称,选择自由风格 free style project,确定

  2. 源码管理中,选择git,输入源码链接

  3. 点击“添加”,点击jenkins
  4. 类型默认选择Username with password;输入gitee账号:gitee绑定的邮箱和gitee登录密码,然后点击确定

  5. 在 Credentials,选择刚刚增加的gitee账号

  6. 在构建触发器中-勾选‘Build periodically’,输入日程表

  7. 日程表参数说明:
  8. 一、基本语法

    Jenkins 使用的是类似于 Unix 系统中 cron 的语法来定义日程表。基本格式为:MINUTE HOUR DOM MONTH DOW。

    MINUTE(分钟):取值范围是 0 - 59,表示每个小时的哪一分钟开始执行任务。例如,0表示整点,30表示每个小时的 30 分。

    HOUR(小时):取值范围是 0 - 23,用于指定一天中的哪个小时执行任务。比如,9表示上午 9 点,20表示晚上 8 点。

    DOM(日期):代表一个月中的第几天,取值范围是 1 - 31。需要注意的是,并不是所有的月份都有 31 天,所以要谨慎设置,避免无效的日期。例如,1表示每月的 1 号,15表示每月的 15 号。

    MONTH(月份):取值范围是 1 - 12,1 代表 1 月,12 代表 12 月。

    DOW(星期几):取值范围是 0 - 7,其中 0 和 7 都代表星期日,1 代表星期一,以此类推。

    二、特殊字符及用法

     *(星号):这是一个通配符,表示“所有可能的值”。例如,在MINUTE字段中使用*,意味着任务会在每个小时的每一分钟都有可能被触发。如果在HOUR字段使用*,那么任务将在一天中的每一个小时都有可能执行,具体还要看其他字段的配置。

    /(斜杠):用于表示频率。例如,在MINUTE字段写*/10,这表示从 0 分钟开始,每隔 10 分钟执行一次任务。也就是在 0、10、20、30、40、50 分钟的时候执行。同样,如果在HOUR字段写*/2,表示每隔 2 个小时执行一次任务。

     -(连字符):用于指定一个范围。例如,在HOUR字段写9 - 17,表示任务会在上午 9 点到下午 5 点(17 点)之间的每个整点执行。

     ,(逗号):用于列举多个值。例如,在DOW字段写1,3,5,表示任务会在星期一、星期三和星期五执行。

    三、示例说明

    0 0 * * *:这个日程表表示每天午夜(0 点 0 分)执行一次任务。因为MINUTE为 0,HOUR为 0,DOM(日期)为*(代表每个月的每一天),MONTH为*(代表每一个月),DOW为*(代表一周的每一天)。

     */15 8 - 17 * * 1 - 5:表示在周一到周五(1 - 5),从上午 8 点(8)到下午 5 点(17),每隔 15 分钟(*/15)执行一次任务。

    H :用于分散服务器负载,不需要整点执行,我们希望在任意区间执行.H可以帮我们找一个最佳的时间点,分散服务器压力


  9. 在构建中,选择增加构建步骤,选择‘execute windows batsh commands,输入命令: 

    修改:增加了个run.py文件

    import pytest
    import os
    
    if __name__ == '__main__':
        pytest.main([
            '-s',
            '-v',
            '-k', 'login4',
            '--alluredir', './result',
            '--clean-alluredir',
            'test_cases'
                     ])
        # 生成Allure报告
        os.system("allure generate ./result -o ./report --clean")
        # 本地查看测试结果
        # os.system("allure serve ./result")

  10. 点击‘’增加构后步骤,“新增allure report,把allure-reports 改成项目中生成allure数据的路径(是指存储json文件的目录),项目中是result(改了之后在workspace中还是显示allure-results,不知道为啥是这样的)
  11. 点击‘保存’,到了时间就会自动执行。

五、发送邮件配置

  1. 点击Manage Jenkins,选择system configuration中的system


  2. Jenkins location 填写系统管理员邮箱地址


  3. 下滑滚动到Extended E-mail Notification,以qq邮箱为例

  4. 在SMTP server中输入:stmp.qq.com;SMTP Port中输入 465


  5. 添加凭证之前需要在邮箱中获取授权码:进入邮箱,点击设置,点击账号,POP3/IMAP/SMTP等服务开启服务,获取授权码


  6. 如果已经开启了服务,点击继续获取授权码,按照提示获取授权码,复制授权码后面需要使用


  7. 在SMTP server下面,点击高级,点击添加,弹窗选择:Domain 类型,范围全部默认;用户名输入管理员邮箱,密码输入刚刚获取的凭证,点击添加


  8. 选择刚刚添加的用户,并且勾选Use SSL-----(保持格式)

  9. 在Default user e-mail suffix(默认电子邮箱后缀)中:输入@qq.com;点击高级:在SMTP Port输入465,Charset 输入 UTF-8


  10. 在Default Content Type选择HTML(text/html)


  11. Default Recipients:默认收件人可输入多个使用英文逗号隔开


  12. 勾选发送邮件Enable Debug Mode:方便查看邮件发送失败原因


  13. 点击Default Triggers:勾选Always、Failure - Any、Success(学习咱勾选这几个)


  14. 配置邮件通知中:SMTP服务器中:smtp.qq.com,用户默认邮件后缀:@qq.com;点击高级输入邮箱和授权码,选择Use SSL,SMPT Port 输入465,字符集输入UTF-8


  15. 通过发送测试邮件测试配置,查看是否能正常在邮箱中收到,点击应用保存即可。


六、项目配置邮件

  1. 点击左上角Jenkins图标,回到首页,点击项目


  2. 点击配置----------------------------------------(保持格式)


  3. 点击构建后操作(可能不会自动锚点,滚动鼠标吧),点击新增构建后操作步骤,选择Editable Email Notification(可编辑电子邮件通知)


  4. 在Project Recipient List 输入需要接收邮件用户的邮箱,同理多个邮箱英文逗号隔开;Content Type:选择HTML(text/html)

  5. Default Subject(默认主题): 输入【构建通知】:${BUILD_STATUS} - ${PROJECT_NAME} - Build # ${BUILD_NUMBER};第一个参数输构建状态,第二个是项目名称,第三个是构建次数

  6. Default Content(默认文本):下面有两个模板,不会前端都是网上找的

    # 这个是第一个
    <!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>
    
    
    # 这是第二个
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title>
        <style>
            /* 设置全局字体大小和家族,但可以通过类覆盖 */
            body, table, td, font {
                font-family: Tahoma, Arial, Helvetica, sans-serif;
            }
            .title-font {
                font-size: 14px; /* 标题字体大小设置为14px */
            }
            .content-font {
                font-size: 12px; /* 内容字体大小设置为12px */
            }
            /* 如果需要,可以为其他元素设置样式 */
        </style>
    </head>
    <body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" offset="0">
        <table width="95%" cellpadding="0" cellspacing="0">
            <tr>
                <td>
                    本邮件由系统自动发出,无需回复!<br/>
                    各位同事,大家好,以下为${PROJECT_NAME}项目构建信息<br/>
                    <!-- 使用类来设置字体大小 -->
                    <span class="content-font" color="#CC0000">构建结果 - ${BUILD_STATUS}</span>
                </td>
            </tr>
            <tr>
                <td><br />
                    <!-- 这里可以添加一个标题,并使用类来设置字体大小 -->
                    <b class="title-font"><font color="#0B610B">构建信息</font></b>
                    <hr size="2" width="100%" align="center" />
                </td>
            </tr>
            <tr>
                <td>
                    <!-- 其他内容,使用类来统一设置字体大小(如果需要) -->
                    <ul class="content-font">
                        <li>项目名称 : ${PROJECT_NAME}</li>
                        <li>构建编号 : 第${BUILD_NUMBER}次构建</li>
                        <li>触发原因: ${CAUSE}</li>
                        <li>构建状态: <span class="content-font" color="#000000">${BUILD_STATUS}</span></li> <!-- 这里可以省略class,因为已经在ul上设置了 -->
                        <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>
                        <li>美化的测试报告 : <a href="${PROJECT_URL}allure/#/">${PROJECT_URL}/allure/#/</a></li>
                    </ul>
    
                    <!-- 其他部分,如失败用例和最近提交,也可以根据需要添加类 -->
                    <h4 class="title-font"><font color="#0B610B">失败用例</font></h4>
                    <hr size="2" width="100%" />
                    <span class="content-font">$FAILED_TESTS<br/></span>
    
                    <h4 class="title-font"><font color="#0B610B">最近提交(#$SVN_REVISION)</font></h4>
                    <hr size="2" width="100%" />
                    <ul class="content-font">
                        ${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>

  7. 后面几个参数没研究,搜下了大概就是下面这个样子

 
  • Attachments(附件)
    • 作用:在 Jenkins 任务执行过程中,“Attachments” 用于将额外的文件附加到构建通知或者构建产物中。这些文件可以是测试报告(如 JUnit 测试报告)、文档(如项目文档、需求文档)、配置文件等任何与构建相关或者需要一起分发的文件。它方便了团队成员查看完整的构建相关信息,而不仅仅是构建的结果。
    • 使用方法:具体的使用方式取决于构建步骤和插件。以一些常见的插件为例,在构建后操作步骤(Post - build Actions)中,可能会有一个 “Archive the artifacts”(归档产物)的选项,在这里可以指定要附加的文件路径。例如,如果你想附加一个位于项目目录下 “reports” 文件夹中的测试报告文件 “test - report.html”,可以在 “Files to archive” 字段中输入 “reports/test - report.html”。这样,当构建完成后,这个文件就会作为附件与构建相关的通知或者存储的构建产物关联在一起。
  • Attach Build Log(附加构建日志)
    • 作用:构建日志记录了构建过程中的详细信息,包括每个构建步骤的执行情况、命令输出、错误信息等。是将这个构建日志作为附件添加到构建相关的通知或者存储位置。这对于调试构建失败的原因、查看构建过程中的详细操作以及审计构建过程非常有用。团队成员(如开发人员、运维人员)可以通过查看构建日志快速了解构建的具体情况,而不需要登录到 Jenkins 服务器去查找日志文件。
    • 使用方法:通常,在构建后的操作设置中,有专门的选项来启用 “Attach Build Log”。例如,在一些邮件通知插件的设置中,会有一个选项,如 “Attach build log to the email”(将构建日志附加到邮件),勾选这个选项后,当构建完成并且触发邮件通知时,构建日志就会作为附件添加到邮件中发送给收件人 
  • Content Token Reference(内容令牌引用)
    • 作用:主要用于在构建通知或者其他构建相关的输出内容中引用特定的内容令牌。这些令牌代表了构建过程中的各种信息,如构建编号、构建状态、项目名称、环境变量等。通过引用这些令牌,可以动态地生成构建通知的内容,使其更加个性化和准确。例如,可以在邮件通知中使用令牌来显示当前构建的编号和状态,让收件人快速了解构建的关键信息。
    • 使用方法:不同的插件和构建输出场景下使用方式略有不同。以邮件通知插件为例,在编辑邮件内容时,可以使用类似$BUILD_NUMBER(代表构建编号)、$BUILD_STATUS(代表构建状态)这样的令牌。这些令牌在邮件发送时会被替换为实际的构建信息。具体的令牌列表和语法通常由插件提供文档说明。例如,要在邮件主题中显示构建编号和状态,可以将主题设置为 “Build #$BUILD_NUMBER - $BUILD_STATUS”,当邮件发送时,就会显示如 “Build #123 - SUCCESS” 这样的实际内容。
  • 接收到邮件大概长这个样子

相关问题

一、启动tomcat服务DOS窗口乱码问题

  • 原因:Tomcat 在启动过程中会输出大量的日志信息,这些信息包含了中文等非 ASCII 字符。当 DOS 窗口(命令提示符)的字符编码与 Tomcat 输出信息的编码不一致时,就会出现乱码。例如,Tomcat 默认使用 UTF - 8 编码输出日志,而 DOS 窗口可能采用的是 GBK 编码
  • 解决方法:
    • 1、找到tomcat-conf-下的logging.properties文件,打开找到51行修改为
      • java.util.logging.ConsoleHandler.encoding = GBK
    • 2、修改conf\server.xml配置文件,打开找到第71行,根据实际的来:在后面增加一行,保存重启服务即可
      • URIEncoding="UTF-8"

二、无法将位于***的资源添加到Web应用程序[/jenkins]的缓存中,因为在清除过期缓存条目后可用空间仍不足 - 请考虑增加缓存的最大空间

  • 解决方法:
    • 找到tomcat/conf/context.xml文件,打开增加资源最大可缓存大小即可,记得重启
    • <Resources cachingAllowed="true" cacheMaxSize="100000" />

三、Jenkins中的告警

通过以上步骤,就可以在 Windows 系统下使用 Tomcat 和 jenkins.war 包成功搭建 Jenkins 服务

器,并开始使用 Jenkins 进行持续集成和持续部署等任务。

  • 解决方法:
    • 进入到system configuration- system,下滑找到管理监控配置,点击管理监控
    • 进入Security到隐藏安全警告,取消勾选,三个都可以取消

    最后大概就这样子

    反向代理及分布式构建暂时就不处理了,直接不在提示,Dismiss后续有需要在配置

    通过以上步骤,就可以在 Windows 系统下使用 Tomcat 和 jenkins.war 包成功搭建 Jenkins 服务器,并开始使用 Jenkins 进行持续集成和持续部署等任务。

;