记录下Jenkins调用docker打包前端项目后无法清理工作工具的问题

背景:最近经理要求前端新项目在Jenkins使用docker镜像来临时编译打包,本来是没有问题的;但Jenkins是在Ubuntu系统上二进制包安装的,使用的普通用户devops部署的,docker镜像内部是用的root用户,这就导致打包之后在.jenkins/workspace中产生的dist及node_modoules权限变成了root权限,在jenkins执最后一步清理工作空间时会提示 Operation not permitted,即无权限清理。

  • 先看jenkinsfile
Jenkinfile 复制代码
node {
   ......
    stage('部署') {
        if (env.target == 'prod') {
            sh "rsync -zcav -e ssh dist/* test:/data/www/web/dist"
            sh "sudo  chown -R devops:devops `pwd`"
        }
    }
    stage('清理'){
        deleteDir()
    }
}

一开始的想法修改workspace产生的目录权限,但由于jenkins所在服务器使用的用户devops设置了密码,单独使用sudo命令会提示sudo: no tty present and no askpass program specified

解决办法

  • 方法1.将devops用户在sudo组中设置为免密码
shell 复制代码
sudo vim /etc/sudoers

devops  ALL=(ALL:ALL) NOPASSWD:ALL
  • 方法2. 在使用sudo命令的时候将密码传入过去
shell 复制代码
echo PASSWROD | sudo -S chown -R devops:devops `pwd`

改后jenkinsfile如下

Jenkinfile 复制代码
node {
   ......
    stage('部署') {
        if (env.target == 'prod') {
            sh "rsync -zcav -e ssh dist/* test:/data/www/web/dist"
            sh "echo PASSWROD | sudo -S chown -R devops:devops `pwd`"
        }
    }
    stage('清理'){
        deleteDir()
    }
}
相关推荐
IT界的老黄牛5 小时前
Jenkins 监控一条龙:接入、看板 9964、11 条告警规则直接抄走
jenkins·grafana·prometheus·监控·ci-cd·告警规则
xhaxy6 小时前
docker
docker·容器·eureka
Johny_Zhao8 小时前
网络安全等级保护测评实施方案
linux·网络·人工智能·网络安全·信息安全·云计算·等保测评·系统运维·itsm
小袁拒绝摆烂8 小时前
Jenkins部署经验
运维·jenkins
落羽的落羽8 小时前
【AI】快速理解AI应用的相关名词概念
linux·c++·人工智能·python·计算机网络·算法
刚入门的大一新生9 小时前
Linux-进程控制
linux·运维·服务器·c++
上火的金鱼妹9 小时前
K8S基础组件作用和关系整理
linux·运维·服务器·kubernetes
Vcaker9 小时前
Linux学习25-harbor私有仓库部署
linux·运维·学习
刃神太酷啦9 小时前
Redis 进阶核心:持久化 (RDB/AOF)、事务与主从复制全解析----《Hello Redis!》(5)
linux·c语言·数据库·c++·redis·缓存·bootstrap
一技安身9 小时前
【信创】Docker‑Compose V2 两种离线部署(独立模式、插件模式)简易教程
java·docker·eureka