如何更改 Jenkins Docker Pipeline 插件中 docker run 的默认参数?

问题描述 投票:0回答:1

我正在尝试为此管道设置一个 docker 代理,但在管道内运行其中一个命令时出现此错误:

+ poetry shell
Spawning shell within /root/.cache/pypoetry/virtualenvs/python-project-template-nESIvdvh-py3.11

(25, 'Not a tty')

据我所知,这是因为 jenkins 默认使用 -t 参数执行 docker run 。我知道删除 -t 标志可以解决这个问题,但我找不到办法。我到处寻找禁用此功能的方法(加上一些其他默认标志),但我还没有找到解决方法。

这就是我当前的 Jenkinsfile 的样子

pipeline {
    agent { docker {
        image 'matiasch/python3.11-poetry1.7'
        args '-u root --privileged'
    } }
    stages {
        stage('Install Dependencies') {
            steps {
                timeout(time: 5, unit: 'MINUTES') {
                    sh 'poetry install'
                    sh 'poetry shell'
                }
            }
        }
    }
}

这是 jenkins 执行的 docker run 命令,如您所见,在我在 Jenkinsfile 中添加的标志之前,我还没有指定一些默认标志, -t 就是其中之一。

docker run -t -d -u 1001:1001 -u root --privileged -w /home/jenkins/workspace/Python_Project_Template_main -v ...

我尝试从声明式管道切换到脚本化管道,使用不同的 docker 映像,试图找到一些“否定”-t 的命令,在 jenkins/plugin 配置中查找默认标志,但我找不到将解决其核心问题,即禁用默认标志。

docker jenkins jenkins-pipeline jenkins-plugins jenkins-docker
1个回答
0
投票

我认为是因为在 docker run 命令中添加了 -t 标志,这导致了 Poetry shell 命令出现问题。由于删除 -t 标志似乎是解决方案,但您在找到方法时遇到困难,让我们尝试一个解决方法。

直接在 Jenkins 管道脚本中使用 docker 工具,而不是依赖声明性语法。这使您可以更好地控制正在执行的 Docker 命令。

首先声明agent none,表示我们不会使用任何默认代理。然后,在 Run Docker 阶段的步骤块中,我们使用

docker.image('image_name').inside
语法在指定的 Docker 容器内运行命令。这应该绕过 Jenkins 自动添加 -t 标志。

试试这个:

pipeline {
    agent none
    stages {
        stage('Run Docker') {
            agent {
                docker {
                    image 'matiasch/python3.11-poetry1.7'
                    args '-u root --privileged'
                }
            }
            steps {
                script {
                    // Run poetry commands within the Docker container
                    docker.image('matiasch/python3.11-poetry1.7').inside {
                        sh 'poetry install'
                        sh 'poetry shell'
                    }
                }
            }
        }
    }
}

© www.soinside.com 2019 - 2024. All rights reserved.