使用Jenkins Job DSL在Jenkins中使用Artifactory配置作业

时间:2018-01-26 15:28:13

标签: jenkins gradle groovy artifactory jenkins-job-dsl

我正在尝试在使用Artifactory生成的Jenkins作业中设置Job DSL plugin

配置如下所示:

  wrappers {
    colorizeOutput 'xterm'
    buildName '#${BUILD_NUMBER}-release'
    artifactoryGenericConfigurator {
      // Repository to deploy to.
      details {
        artifactoryName('artifactory.foo.bar.com')
        artifactoryUrl('https://artifactory.foo.bar.com/artifactory')
        deployReleaseRepository {
          keyFromSelect('')
          keyFromText('')
          dynamicMode(false)
        }
        deploySnapshotRepository {
          keyFromSelect('')
          keyFromText('')
          dynamicMode(false)
        }
        resolveReleaseRepository() {
          keyFromText('')
          keyFromSelect('')
          dynamicMode(false)
        }
        resolveSnapshotRepository() {
          keyFromText('')
          keyFromSelect('')
          dynamicMode(false)
        }
        userPluginKey('')
        userPluginParams('')

        useSpecs(true)
        uploadSpec {
          spec('''{
            "files": [
              {
                  "pattern": "app.tar.gz",
                  "target": "myrepo/app/${BUILD_NUMBER}-release",
                  "flat" : "false"
              }
            ]
          }''')
          filePath(null)
        }
        downloadSpec {
          spec('')
          filePath(null)
        }
      }

      deployPattern('')
      deployBuildInfo(true)
      includeEnvVars(false)
      discardOldBuilds(false)
      discardBuildArtifacts(false)
      multiConfProject(false)
      deployerCredentialsConfig(null)
      resolverCredentialsConfig(null)
      resolverDetails(null)
      resolvePattern(null)
      matrixParams(null)

      envVarsPatterns {
        includePatterns('*')
        excludePatterns('*PASSWORD*,*password*,*secret*,*key*')
      } 
      asyncBuildRetention(false)
      artifactoryCombinationFilter(null)
      customBuildName(null)
      overrideBuildName(false)
    }
  }

然而,这个配置总是导致这个错误,这有点令人困惑,因为我不知道我的配置的哪一部分在这里是错误的。

  

致命错误:没有为null配置Artifactory服务器。请检查你的   组态。 java.io.IOException:未配置Artifactory服务器   为null。请检查您的配置。在   org.jfrog.hudson.util.RepositoriesUtils.validateServerConfig(RepositoriesUtils.java:191)     在   org.jfrog.hudson.generic.ArtifactoryGenericConfigurator.setUp(ArtifactoryGenericConfigurator.java:325)     在hudson.model.Build $ BuildExecution.doRun(Build.java:157)at at   hudson.model.AbstractBuild $ AbstractBuildExecution.run(AbstractBuild.java:504)     在hudson.model.Run.execute(Run.java:1724)at   hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)at at   hudson.model.ResourceController.execute(ResourceController.java:97)     在hudson.model.Executor.run(Executor.java:421)

这是一个重要的细节: if ,在生成我的工作后,我转到Jenkins配置页面查看此工作,并保存配置而不更改任何内容,然后此配置工作。我想我只是为所有选项使用了错误的默认值。

注意:我必须指定所有这些,因为它们在API查看器中被列为“必填”... http://jenkins.foo.bar.com/plugin/job-dsl/api-viewer/index.html

我一直在查看source code for the plugin,虽然我可以找到错误消息的上下文,但我无法诊断DSL脚本中的确切问题。

1 个答案:

答案 0 :(得分:7)

我正在处理Job DSL示例。

您需要在Artifactory Plugin Configuration中配置Artifactory服务器。 然后,在artifactoryName字段中,输入服务器ID。 artifactoryUrl字段不是必需的。所有其他字段(例如useSpecs)应位于detail范围之外。

如果要在种子作业中配置存储库,请将dynamicMode更改为true。

最后,请注意,没有快照存储库,因为Jenkins中的Artifactory Gradle作业不支持它们。

最后,你会有这样的事情:

details { // This is the Artifactory deployer details
    artifactoryName SERVER_ID // The server ID from Artifactory Plugin Configuration
    deployReleaseRepository {
        keyFromText 'libs-release-local' // The deploy release repository
        dynamicMode true // true if you want to use `keyFromText`
    }

} // This is the Artifactory resolver details
resolverDetails {
    artifactoryName SERVER_ID // The server ID from Artifactory Plugin Configuration
    resolveReleaseRepository {
        keyFromText 'libs-release' // The resolve release repository
        dynamicMode true // true if you want to use `keyFromText`
    }
}
useSpecs true
...

<强>更新

在最新版本v2.15.0中,我们进行了一些更改,使这种配置更容易一些。例如,现在不需要dymamicMode。有关详细信息,请参阅我们的project examples

相关问题