带有dir和ansiblePlaybook的docker.image…内部会导致java.lang.ArrayIndexOutOfBoundsException 问题

带有dir和ansiblePlaybook的docker.image…内部会导致java.lang.ArrayIndexOutOfBoundsException 问题,docker,ansible,jenkins-pipeline,jenkins-docker,Docker,Ansible,Jenkins Pipeline,Jenkins Docker,如果我将docker.image…inside与dir和ansiblePlaybook结合起来,我会得到一个java.lang.ArrayIndexOutOfBoundsException,因为我的jenkins代理没有使用-XX:-省略StackTraceInFastThrow,这就是我得到的全部 关于为什么这是一个问题,以及如何在不重新处理所有dir调用的情况下解决它,有什么想法吗 环境 詹金斯2.223 Ansible插件1.0 Docker插件1.1.9 Docker管道1.22 错

如果我将docker.image…inside与dir和ansiblePlaybook结合起来,我会得到一个java.lang.ArrayIndexOutOfBoundsException,因为我的jenkins代理没有使用
-XX:-省略StackTraceInFastThrow
,这就是我得到的全部

关于为什么这是一个问题,以及如何在不重新处理所有dir调用的情况下解决它,有什么想法吗

环境
  • 詹金斯2.223
  • Ansible插件1.0
  • Docker插件1.1.9
  • Docker管道1.22
错误 java.lang.ArrayIndexOutOfBoundsException

失败代码 成功代码 附加成功代码
docker命令行和环境是上下文差异。先拿出来检查一下。Jenkins credential插件将屏蔽一些环境变量,因此您可能需要将它们引导到本地文件中,以绕过
sh“env>file.txt”

注意:只在这种罕见的调试情况下使用,然后彻底清理,因为这是泄露秘密的一种方式

这个问题更复杂,因为它不仅仅涉及这些代码,还涉及我遗漏的一些代码。这是根本原因

我有一个withArtifactoryEnvAuth函数,它允许构建执行以下操作:

withArtifactoryEnvAuth('mycreds') {
    sh 'docker pull image'
}
此代码使用了以下代码。现在,当我们使用withCredentials时,它会将cred值注入到环境中(也许它总是这样,也许自从我写这篇文章以来,情况发生了变化——可能是前者)。因此,这段代码设置了两次违反DRY原则的环境变量,并覆盖了在linux上非常重要的用户变量

失败代码 固定代码
docker命令行和环境是上下文差异。先拿出来检查一下。Jenkins credential插件将屏蔽一些环境变量,因此您可能需要将它们引导到本地文件中,以绕过
sh“env>file.txt”

注意:只在这种罕见的调试情况下使用,然后彻底清理,因为这是泄露秘密的一种方式

这个问题更复杂,因为它不仅仅涉及这些代码,还涉及我遗漏的一些代码。这是根本原因

我有一个withArtifactoryEnvAuth函数,它允许构建执行以下操作:

withArtifactoryEnvAuth('mycreds') {
    sh 'docker pull image'
}
此代码使用了以下代码。现在,当我们使用withCredentials时,它会将cred值注入到环境中(也许它总是这样,也许自从我写这篇文章以来,情况发生了变化——可能是前者)。因此,这段代码设置了两次违反DRY原则的环境变量,并覆盖了在linux上非常重要的用户变量

失败代码 固定代码
dir('backend') {
    ansiblePlaybook(
            playbook: 'deploy/kafka-topics/test.yml',
            extras: '-vv'
    )
}
withArtifactoryEnvAuth('mycreds') {
    sh 'docker pull image'
}
def withArtifactoryEnvAuth(def credentialsId, closure) {

    def message = ""
    withCredentials([usernamePassword(
            credentialsId: credentialsId, passwordVariable: 'PASSWORD', usernameVariable: 'USER')]) {
        List envList = [
                "ARTIFACTORY_USER=${env.USER}",
                "ARTIFACTORY_PASSWORD=${env.PASSWORD}"
        ]
        withEnv(envList) {
            message = closure()
        }
    }

    return message
}
def withArtifactoryEnvAuth(def credentialsId, closure) {

    def message = ""
    withCredentials([usernamePassword(
            credentialsId: credentialsId, passwordVariable: 'ARTIFACTORY_PASSWORD', usernameVariable: 'ARTIFACTORY_USER')]) {
        message = closure()
    }

    return message
}