首页 > 解决方案 > 为什么将动态变量作为代码插件注入自定义管道时无法正确解析?

问题描述

在我的公司,我正在运行一个管道即代码项目,其中我的 Jenkinsfile 从 shell 脚本获取动态 IP,并将其注入到 PrivateIP 环境变量中。下一步调用一个自定义(内部开发)插件,该插件接受一个“服务器”参数作为 IP,虽然据说没有正确解析它,但导致错误输出表明主机无法解析。

我在插件步骤的正上方回显了 PrivateIP 变量,它肯定会输出正确的值。

如果给定 IP 的硬值,则该插件可以工作,但如果给定任何动态值,则该插件会失败。诸如此类的内置插件dir不会产生类似的问题。我没能联系到插件开发者来报告这个问题,我也没有得到任何关于我的问题的回复。这对于自定义插件来说是典型的吗?我在插件开发人员文档中看到了一些文档,这些文档表明在管道插件中只尊重初始环境阶段,否则@StepContextParameter需要 a 来获得上下文环境。

stage('Provision') {
      environment {
          PrivateIP = """${sh(
             returnStdout: true,
             script: '${WORKSPACE}/cicd/parse-ip.sh'
          )}"""
      }

      steps {
        echo "Calling Playbook. PrivateIP: ${PrivateIP}"

        customPluginName env: 'AWS',
        os: 'Linux',
        parameter: '',
        password: '',
        playbook: 'provision.yaml',
        servers: PrivateIP,
        gitBranch: '{my branch}',
        gitUrl: '{URL}',
        username: '{custom user}'
      }
    }

我希望该变量受到尊重并成功执行 Ansible Playbook。

错误

>>> 致命:[ansible_ssh_user={custom user}]:无法访问!=> {"changed": false, "msg": "无法通过 ssh 连接到主机:ssh: 无法解析主机名ansible_ssh_user={custom user} : Name or service not known\r\n", "unreachable" : 真的}

如果这实际上是自定义插件的默认行为(不一定是错误),那么有什么好的解决方法?

标签: jenkinsjenkins-pipelinejenkins-groovy

解决方案


推荐阅读