记录下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()
    }
}
相关推荐
UP_Continue2 分钟前
Linux--OS和认识进程
linux·运维·服务器
IT摆渡者4 分钟前
Rocky Linux 10.1中找不到传统的 /etc/sysconfig/network-scripts 目录是正常现象。
linux·运维·服务器·网络·经验分享
xzl0413 分钟前
小智服务器intent_type 初始化为function_call过程
linux·前端·数据库
猫猫的小茶馆16 分钟前
【Linux 驱动开发】二. linux内核模块
linux·汇编·arm开发·驱动开发·stm32·嵌入式硬件·架构
HalvmånEver22 分钟前
Linux:信号保存下(信号二)
linux·运维·服务器·c++·学习·信号
想进部的张同学26 分钟前
RK3588 + Docker + GStreamer 实现 RTSP 推流(MJPEG AVI → H.264),VLC 成功拉流
docker·音视频·h.264
独断万古他化26 分钟前
Docker 入门前置:容器虚拟化基础之Namespace 空间隔离
linux·docker·容器
SMF191936 分钟前
【Vmware】windows物理机共享文件给vm虚拟机中的Centos系统
linux·运维·centos
本妖精不是妖精37 分钟前
CentOS 7 安装 Node.js v18.x 完整教程
linux·centos·node.js
txinyu的博客37 分钟前
静态库 & 动态库
linux·运维·服务器