environmentVariables()不适用于Jenkins作业DSL和管道作业

environmentVariables()不适用于Jenkins作业DSL和管道作业,jenkins,continuous-integration,environment-variables,jenkins-pipeline,jenkins-job-dsl,Jenkins,Continuous Integration,Environment Variables,Jenkins Pipeline,Jenkins Job Dsl,我们在CI设置中使用。由于我们使用的是仅在传统语法中可用的,因此需要使用 在管道作业中,我们从Git检查我们的项目。我们将管道作业用于多个项目,因此我们希望将git url注入管道脚本 这是生成管道作业的脚本的简短版本: def createPipelineJob(def jobName, def gitUrl) { pipelineJob(jobName) { environmentVariables(GIT_URL: gitUrl) definitio

我们在CI设置中使用。由于我们使用的是仅在传统语法中可用的,因此需要使用

在管道作业中,我们从Git检查我们的项目。我们将管道作业用于多个项目,因此我们希望将git url注入管道脚本

这是生成管道作业的脚本的简短版本:

def createPipelineJob(def jobName, def gitUrl) {
    pipelineJob(jobName) {
        environmentVariables(GIT_URL: gitUrl)
        definition {
            cps {
                script('''
                    node {
                        sh 'env | sort' 
                    }
                ''')
                sandbox(true)
            }
        }       
    }   
}
这将创建以下XML配置:

<flow-definition>
    <actions/>
    <description/>
    <keepDependencies>false</keepDependencies>
    <properties>
        <EnvInjectJobProperty>
            <info>
                <propertiesContent>GIT_URL=my-git.url</propertiesContent>
                <loadFilesFromMaster>false</loadFilesFromMaster>
            </info>
            <on>true</on>
            <keepJenkinsSystemVariables>true</keepJenkinsSystemVariables>
            <keepBuildVariables>true</keepBuildVariables>
            <overrideBuildParameters>false</overrideBuildParameters>
            <contributors/>
        </EnvInjectJobProperty>
    </properties>
    <triggers/>
    <definition class="org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition">
        <script>
            node { sh 'env | sort' }
        </script>
        <sandbox>true</sandbox>
    </definition>
</flow-definition>

,GIT_URL环境变量打印得很好。手动创建作业几乎会创建相同的xml配置:

<flow-definition plugin="workflow-job@2.15">
    <actions>
        <io.jenkins.blueocean.service.embedded.BlueOceanUrlAction plugin="blueocean-rest-impl@1.3.1">
            <blueOceanUrlObject class="io.jenkins.blueocean.service.embedded.BlueOceanUrlObjectImpl">
                <mappedUrl>blue/organizations/jenkins/test-jobname</mappedUrl>
                <modelObject class="flow-definition" reference="../../../.."/>
            </blueOceanUrlObject>
        </io.jenkins.blueocean.service.embedded.BlueOceanUrlAction>
    </actions>
    <description/>
    <keepDependencies>false</keepDependencies>
    <properties>
        <com.sonyericsson.rebuild.RebuildSettings plugin="rebuild@1.27">
            <autoRebuild>false</autoRebuild>
            <rebuildDisabled>false</rebuildDisabled>
        </com.sonyericsson.rebuild.RebuildSettings>
        <EnvInjectJobProperty plugin="envinject@2.1.5">
            <info>
                <propertiesContent>GIT_URL=my-git.url</propertiesContent>
                <secureGroovyScript plugin="script-security@1.35">
                <script/>
                <sandbox>false</sandbox>
            </secureGroovyScript>
            <loadFilesFromMaster>false</loadFilesFromMaster>
        </info>
        <on>true</on>
        <keepJenkinsSystemVariables>true</keepJenkinsSystemVariables>
        <keepBuildVariables>true</keepBuildVariables>
        <overrideBuildParameters>false</overrideBuildParameters>
    </EnvInjectJobProperty>
        <org.jenkinsci.plugins.workflow.job.properties.PipelineTriggersJobProperty>
            <triggers/>
        </org.jenkinsci.plugins.workflow.job.properties.PipelineTriggersJobProperty>
    </properties>
    <definition class="org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition" plugin="workflow-cps@2.41">
        <script>
            node { sh 'env | sort' }
        </script>
        <sandbox>true</sandbox>
    </definition>
    <triggers/>
    <disabled>false</disabled>
</flow-definition>

蓝色/组织/詹金斯/测试工作名称
假的
假的
假的
GIT_URL=my-GIT.URL
假的
假的
真的
真的
真的
假的
节点{sh'env | sort'}
真的
假的
我们很迷路,因为我们是詹金斯的新手,这个问题已经困扰我们好几天了

编辑:

  • 作业在jenkins主节点上生成,但在从属节点上执行
  • 詹金斯2.37.3
  • 环境注入器插件2.1.5
  • 管道2.5

这与其说是答案,不如说是评论,但我修改并测试了您的DSL代码,它运行良好

我使用以下脚本创建了一个DSL作业:

def createPipelineJob(def jobName, def gitUrl) {
    pipelineJob(jobName) {
        environmentVariables(GIT_URL: gitUrl)
        definition {
            cps {
                script('''
                    node {
                        sh "echo $GIT_URL" 
                    }
                ''')
                sandbox(true)
            }
        }       
    }   
}
createPipelineJob('new-job-2','my-git.url')
生成的管道作业与您发布的作业具有相同的XML(减去shell脚本),构建管道作业将打印GIT_URL的值

[new-job-1] Running shell script
+ echo my-git.url
my-git.url
我的建议是:

  • 如果你发布的简短版本(或者试试我的)不起作用,我会尝试看看升级Jenkins或插件是否有什么不同
  • 如果你发布的或我发布的短版本有效,可能发布完整版本,可能有错误

由于环境注入器插件未成功安装,因此脚本无法正常运行。所以我所要做的就是重新启动詹金斯,一切正常。特别感谢您确保我的脚本确实正确。

我使用您的代码生成作业,但是我在开始工作时遇到了一个异常:
groovy.lang.MissingPropertyException:没有这样的属性:GIT_URL for class:groovy.lang.Binding
我将在原始问题中包括jenkins安装的版本以及所有插件的版本。但据我所知,它们都是最新的。我还在主节点上生成作业,同时在从节点上执行作业。这可能是个问题吗?