使用 Jenkins 中的 Artifactory 和 Jenkins Job DSL 配置作业



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

配置如下所示:

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)
}
}

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

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

这里有一个重要的细节:如果在生成作业后,我转到此作业的 Jenkins 配置页面,并在不更改任何内容的情况下保存配置,则此配置有效。我想我只是对所有选项使用了错误的默认值.

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

我一直在查看插件的源代码,虽然我可以找到错误消息的一些上下文,但我无法诊断 DSL 脚本中的确切问题。

我只是在研究作业DSL示例。

您需要在工件插件配置中配置工件服务器。 然后,在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 中,我们进行了一些更改,使此配置更容易一些。例如,现在不需要动态模式。有关更多信息,请参阅我们的项目示例。

最新更新