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