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

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

  • 先看jenkinsfile
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组中设置为免密码
sudo vim /etc/sudoers

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

改后jenkinsfile如下

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()
    }
}

相关推荐

  1. 前端打包工具

    2024-03-27 05:36:06       41 阅读
  2. FreeBSD安装Jenkins(软件测试集成工具记录

    2024-03-27 05:36:06       59 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-27 05:36:06       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-27 05:36:06       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-27 05:36:06       87 阅读
  4. Python语言-面向对象

    2024-03-27 05:36:06       96 阅读

热门阅读

  1. 【node】Missing script start or file server.js

    2024-03-27 05:36:06       40 阅读
  2. 蓝桥杯:BFS

    2024-03-27 05:36:06       36 阅读
  3. Unity3D 主城角色动画控制与消息触发详解

    2024-03-27 05:36:06       39 阅读
  4. 约瑟夫环-递推公式的个人理解

    2024-03-27 05:36:06       40 阅读
  5. 计算机网络(04)

    2024-03-27 05:36:06       45 阅读
  6. C# get set 访问器

    2024-03-27 05:36:06       38 阅读
  7. 智能媒体api调用

    2024-03-27 05:36:06       43 阅读
  8. C#语言规范及特殊用法笔记

    2024-03-27 05:36:06       46 阅读
  9. Python中类(class)的使用方法

    2024-03-27 05:36:06       37 阅读
  10. React Native获取及监听网络状态

    2024-03-27 05:36:06       40 阅读