jenkins发送邮件功能二——mail_content.html

本文提供了一个持续集成质量报告的HTML模板,包含项目构建状态、自动化测试结果等关键信息,并附带了各种测试的总结及详细链接。

<!DOCTYPE html>
<html lang="en">
<head>
    <h1 id="top" style="color: #880000; text-align: center; font-size: 40px">$project_name项目持续集成质量报告</h1>
    <meta charset="UTF-8">
    <title>$project_name项目持续集成质量报告</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="initial-scale=1.0,maximum-scale=1,minimum-scale=1,user-scalable= no,target-densitydpi =medium-dpi">

    <style>
        table{border:3px solid #1405b2
        }
        tr td{height: 50px;line-height: 40px;border: 1px solid #BACEE1;border-top: 0;border-right: 0}
        tr.tit td{border-bottom: 0;border-top: 3px solid #000}
        tr.tit td.emLine{border-top: 0}
        /*td span{display: block}*/
        .firstC,.secC,.thirdC{}
        .firstC{background: rgb(186, 206, 225)
        }
        .secC{background: rgb(186, 206, 225)
        }
        .thirdC{background: rgb(186, 206, 225)
        }
        .forthC{background: rgb(186, 206, 225)
        }
        .info,td b{font-weight: bold}
    </style>
</head>

<body>

    <!--<div style="width:10%; min-height:300px; float:left; background-color: #eeeeee; margin: 0px 20px 0px 10px;">-->
        <!--<ul width="100%" height="100%">-->
            <!--<li><a href="#$subproject_name1">$subproject_name1</a></li>-->
            <!--<li><a href="#$subproject_name2">$subproject_name2</a></li>-->
            <!--<li><a href="#$subproject_name3">$subproject_name3</a></li>-->
        <!--</ul>-->
    <!--</div>-->

    <div style="width:100%">
        <table id="$subproject_name1" border="5" width="100%" cellpadding="0" cellspacing="0" bgcolor="#f0f8ff">
            <tr align="left">
                <td colspan="5" bgcolor="#BACEE1" style="font-size: 25px; color: #1b1ad5">
                    <b>$subproject_name工程总览</b>
                    <a href="#top" style="float:right">返回顶部</a>
                </td>
            </tr>
            <tr align="left" class="tit">
                <td class="firstC" style="font-size: 20px;color: #05077d"><b>[编译,打包,部署]</b></td>
                <td class="firstC" style="font-size: 20px;color: #05077d"><b>[版本检查]</b></td>
                <td class="firstC" style="font-size: 20px;color: #05077d"><b>[自动化测试]</b></td>
                <td class="firstC" style="font-size: 20px;color: #05077d"><b>[代码覆盖率]</b></td>

            </tr>
            <tr align="left" class="tit">
                <td class="firstC emLine" style="border-bottom: 3px solid #000;">构建时间:$build_date</td>
                <td class="firstC emLine" style="border-bottom: 3px solid #000;">SONAR扫描耗时:$sonar_time</td>
                <td class="firstC emLine" style="border-bottom: 3px solid #000;">全量单元测试耗时:$ut_time<br>自动化测试耗时:$at_time</td>
                <td class="firstC emLine" style="border-bottom: 3px solid #000;">全量自动化+单元测试覆盖率: $ust_line<br>全量代码行覆盖率: $total_line</td>
               

            </tr>

            <tr align="left">
                <td colspan="5" class="info" style="border-bottom: 3px solid #000; font-size: 20px; color: #05077d">[摘要信息]</td>
            </tr>

            <tr align="left">
                <td>SONAR扫描概况:</td>
                <td colspan="5"><span>$sonar_report</span><br><span> SONAR统计:<a href="$sonar_url" target="_blank">详细信息</a></span> </td>

            </tr>

            <tr align="left">
                <td>全量单元测试:</td>
                <td colspan="5"><span>$ut_coco_summary</span><br><span>详细见:<a href="$ut_coco_detail" target="_blank">详细信息</a></span></td>

            </tr>

            <tr align="left">
                <td>全量自动化:</td>
                <td colspan="5"><span>$at_coco_summary</span><br><span>详细见:<a href="$at_coco_detail" target="_blank">详细信息</a></span></td>

            </tr>

                <tr align="left">
                <td>全量自动化+单元+手动测试:</td>
                <td colspan="5"><span>$total_coco_summary</span><br><span>详细见:<a href="$total_coco_detail" target="_blank">详细信息</a></span></td>

            </tr>


            <tr align="left">
                <td>全量自动化+单元测试:</td>
                <td colspan="5"><span>$ust_coco_summary</span><br><span>详细见:<a href="$ust_coco_detail" target="_blank">详细信息</a></span></td>

            </tr>
            <tr align="left">
                <td>手动自动化:</td>
                <td colspan="5"><span>$mt_coco_summary</span><br><span>详细见:<a href="$mt_coco_detail" target="_blank">详细信息</a></span></td>

            </tr>

            <tr align="left">
                <td>增量单元测试:</td>
                <td colspan="5"><span>$ut_incoco_summary</span><br><span> 详细见:<a href="$ut_incoco_detail" target="_blank">详细信息</a></span></td>

            </tr>

                <tr align="left">
                <td>增量自动化+单元+手动测试:</td>
                <td colspan="5"><span>$total_incoco_summary</span><br><span>详细见:<a href="$total_incoco_detail" target="_blank">详细信息</a></span></td>

            </tr>


            


        </table>

        

        <a href="#top" style="float:right">返回顶部</a>
    </div>

</body>
</html>

docker logs信息如下 INSTALL WARNING: User: missing rw permissions on JENKINS_HOME: /var/jenkins_home touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions? INSTALL WARNING: User: missing rw permissions on JENKINS_HOME: /var/jenkins_home touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions? INSTALL WARNING: User: missing rw permissions on JENKINS_HOME: /var/jenkins_home touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions? INSTALL WARNING: User: missing rw permissions on JENKINS_HOME: /var/jenkins_home touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions? INSTALL WARNING: User: missing rw permissions on JENKINS_HOME: /var/jenkins_home touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions? INSTALL WARNING: User: missing rw permissions on JENKINS_HOME: /var/jenkins_home touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?
最新发布
08-16
<think>我们正在解决Jenkins容器启动时因权限问题导致的日志错误,具体错误是`/var/jenkins_home Permission denied`。根据之前的知识,这是一个常见的挂载目录权限问题。 原因分析: Jenkins镜像默认使用用户`jenkins`(UID 1000)运行。如果我们将宿主机的目录挂载到容器的`/var/jenkins_home`,而宿主机的目录权限没有给UID 1000足够的权限,就会导致此错误。 解决方案: 1. **修改宿主机目录权限**(推荐) 将宿主机挂载目录的拥有者改为UID 1000(或直接赋予777权限,但不够安全): ```bash # 创建目录(如果不存在) sudo mkdir -p /your/jenkins/home # 更改目录拥有者为UID 1000(注意:宿主机上可能没有jenkins用户,所以直接指定UID) sudo chown -R 1000:1000 /your/jenkins/home # 或者,如果不想改变拥有者,可以赋予所有用户读写执行权限(简单粗暴,但安全性较低) sudo chmod -R 777 /your/jenkins/home # 不推荐在生产环境使用 ``` 2. **在Docker run命令中指定用户**(不推荐,因为Jenkins镜像已经指定了用户) 如果挂载目录在宿主机上属于其他用户,可以尝试在运行容器时指定用户: ```bash docker run -u root ... # 以root用户运行,但会带来安全隐患 ``` 注意:以root运行容器可能会解决权限问题,但会带来安全风险,且Jenkins官方不建议这样做。 3. **使用Docker volume管理数据**(推荐) 使用Docker volume可以避免权限问题,因为volume由Docker管理,会自动设置合适的权限: ```bash # 创建volume docker volume create jenkins-data # 运行容器时使用该volume docker run -d -v jenkins-data:/var/jenkins_home -p 8080:8080 jenkins/jenkins:lts-jdk11 ``` 4. **检查SELinux设置**(如果宿主机启用了SELinux) 在SELinux开启的环境下,即使权限正确也可能被阻止。可以尝试: ```bash # 临时禁用SELinux(不推荐) setenforce 0 # 或者为挂载目录添加SELinux上下文规则 chcon -Rt svirt_sandbox_file_t /your/jenkins/home ``` 5. **使用Docker Compose时的权限设置** 在`docker-compose.yml`中,可以通过指定用户和权限: ```yaml version: '3' services: jenkins: image: jenkins/jenkins:lts-jdk11 user: root # 不推荐,临时解决权限问题 volumes: - /your/jenkins/home:/var/jenkins_home ports: - "8080:8080" ``` 但同样,以root运行不安全。更好的做法是确保宿主机目录权限正确。 步骤总结: 1. 创建挂载目录(如果不存在)。 2. 使用`chown`将目录拥有者改为UID 1000(或使用`chmod`赋予足够权限)。 3. 启动容器。 验证方法: 启动容器后,查看日志: ```bash docker logs <container_name> ``` 如果没有权限错误,且容器状态为`Up`,则问题解决。 相关问题: 1. 如何查看Jenkins容器的日志以排查其他错误? 2. 如何安全地备份Jenkins数据? 3. 在Kubernetes中部署Jenkins时如何避免权限问题? 4. Jenkins容器中默认用户的UID和GID是多少? 5. 如何修改已存在容器的挂载目录权限? 注意:以上方法适用于大多数情况,如果问题仍然存在,请检查挂载目录的父目录权限以及SELinux等安全设置。</think>以下是解决 Jenkins 容器启动时 `/var/jenkins_home Permission denied` 权限错误的完整方案,基于 Docker 官方最佳实践和 Jenkins 容器特性: --- ### 🔧 根本原因分析 Jenkins 官方镜像使用 **UID 1000** 的 `jenkins` 用户运行。当挂载宿主机目录时,若该目录权限与容器用户不匹配,则会出现权限错误: ```bash touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied ``` --- ### ✅ 终极解决方案(分步操作) #### 1️⃣ 创建专用数据目录(推荐) ```bash # 创建目录并设置正确权限 sudo mkdir -p /srv/jenkins sudo chown -R 1000:1000 /srv/jenkins # 关键:匹配容器UID ``` #### 2️⃣ 启动容器时使用正确挂载 ```bash docker run -d \ --name jenkins \ -p 8080:8080 \ -v /srv/jenkins:/var/jenkins_home \ # 使用预配置目录 jenkins/jenkins:lts-jdk11 ``` #### 3️⃣ 若需使用现有目录,修复权限 ```bash # 递归修改所有权 sudo chown -R 1000:1000 /your/existing/path # 或添加组写入权限 sudo chmod -R g+rwx /your/existing/path ``` #### 4️⃣ 紧急情况临时方案(不推荐) ```bash docker run -d \ --name jenkins_temp \ -u root \ # 以root运行(安全风险!) -v /your/path:/var/jenkins_home \ jenkins/jenkins:lts-jdk11 ``` > ⚠️ 仅用于调试,长期使用需回归正常权限[^1] --- ### 🔍 验证步骤 ```bash # 检查目录权限 ls -ld /srv/jenkins # 应显示:drwxr-xr-x 4 1000 1000 ... # 查看容器日志 docker logs --tail 50 jenkins # 成功标志:Jenkins initial setup is required... ``` --- ### 📝 最佳实践总结 1. **专用目录原则** 始终为 Docker 卷创建专用目录,避免与系统文件混杂 2. **权限继承方案** 在 Dockerfile 中预先设置目录权限: ```dockerfile FROM jenkins/jenkins:lts-jdk11 USER root RUN mkdir -p /custom_volume && \ chown -R jenkins:jenkins /custom_volume USER jenkins ``` 3. **SELinux 环境特殊处理** 若宿主机启用 SELinux,添加 `:Z` 标志: ```bash -v /srv/jenkins:/var/jenkins_home:Z ``` --- ### 🧩 相关问题 1. 如何查看 Docker 容器内用户的 UID/GID? 2. Jenkins 容器升级后如何迁移数据卷? 3. 在 Kubernetes 中如何为 Jenkins Pod 配置持久卷权限? 4. 如何通过 Docker Compose 实现自动权限修复? 5. Jenkins 容器日志中 `Can not write to ...` 错误的其他解决方案? > 通过以上方案可彻底解决 99% 的 Jenkins 权限问题。若仍有异常,建议检查磁盘空间、inode 使用量及文件系统类型(如 NFS 需额外配置)[^2]。 [^1]: Docker 官方安全指南:容器应以非 root 用户运行 [^2]: Jenkins 文档:持久化数据卷配置要求
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值