记录下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()
    }
}
相关推荐
Sumlll_8 小时前
Ubuntu系统下QEMU的安装与RISC-V的测试
linux·ubuntu·risc-v
猫头虎8 小时前
2025最新OpenEuler系统安装MySQL的详细教程
linux·服务器·数据库·sql·mysql·macos·openeuler
晚风吹人醒.10 小时前
SSH远程管理及访问控制
linux·运维·ssh·scp·xshell·访问控制·远程管理
Uncertainty!!11 小时前
Linux多用户情况下个别用户输入密码后黑屏
linux·远程连接
necessary65311 小时前
使用Clion查看linux环境中的PG源码
linux·运维·服务器
江湖有缘12 小时前
Jump个人仪表盘Docker化部署教程:从0到 搭建专属导航页
运维·docker·容器
小猪佩奇TONY12 小时前
Linux 内核学习(14) --- linux x86-32 虚拟地址空间
linux·学习
Lam㊣13 小时前
Centos 7 系统docker:更换镜像源
linux·docker·centos
FL162386312913 小时前
win11+WSL+Ubuntu-xrdp+远程桌面闪退+黑屏闪退解决
linux·运维·ubuntu
石头53013 小时前
Kubernetes监控全栈解决方案:从零搭建Prometheus+Grafana监控体系
linux