Jenkins管道无法在Jenkins节点上运行远程脚本

时间:2020-10-07 18:18:42

标签: docker ubuntu jenkins jenkins-pipeline pipeline

我正在尝试运行以下清理脚本,但是在特定的Jenkins节点上它始终失败:

def BUILDERS = [:].asSynchronized()
def NODE_NAMES = [
    'cleanuptooldean', //test
    ]

node('master') {
    stage('Prepare the Pipeline') {
        // get deploy pattern from params 
        for (NODE_NAME in NODE_NAMES) {
            // Groovy closures stuff, need to copy it over
            def FINAL_NODE_NAME = NODE_NAME
            BUILDERS[FINAL_NODE_NAME] = {
                node(FINAL_NODE_NAME) {
                    timeout(time:5, unit: "MINUTES") {
                        echo "Started Cleaning process of unused docker images from Jenkins Instance, Agent: "+env.NODE_NAME
                        sh "docker system prune -a --volumes -f"
                        echo "Cleaning up space from unused packages (orphaned dependencies), remove old kernels in Ubuntu, Agent: "+env.NODE_NAME
                        sh "sudo apt-get -y autoremove --purge"
                        echo "clean the apt cache on Ubuntu "+ env.NODE_NAME 
                        sh "sudo apt-get -y clean"
                        echo "Finished Cleaning process of unused docker images from Jenkins Instance, Agent: "+env.NODE_NAME
                    }
                }
            }
        }
    }
}

如果我在“ apt-get -y autoremove --purge” “ apt-get -y clean” 开头输入“ Sudo”,则会出现错误。 >是:“ sudo:不存在tty且未指定askpass程序” 不用说,我已经编辑了sudoers文件并添加了“ jenkins ALL =(ALL)NOPASSWD:ALL” ,以便在文件末尾对其进行测试。 如果删除“ Sudo”命令,我得到的错误是:“拨号Unix /var/run/docker.sock:连接:权限被拒绝” ,我尝试通过添加“ Jenkins”用户来解决进入“ docker”组。

**我必须说,当我在本地运行命令时,无论是否带有“ Sudo”,它们都可以从“ Jenkins”用户使用,但是当我尝试使用管道从Jenkins远程进行操作时,就会失败。

***此特定脚本可以在其他节点上完美运行

预先感谢

1 个答案:

答案 0 :(得分:0)

显然每个节点使用了一个不同的用户,因此我不得不将所有用户添加到Docker的组中,并将它们添加到visudo文件中。