Jenkins 从Maven调用生成Artifactory构建信息

Jenkins 从Maven调用生成Artifactory构建信息,jenkins,artifactory,continuous-delivery,Jenkins,Artifactory,Continuous Delivery,总体目标: 我目前正在寻找一种合理的方法来处理(短期)功能分支的Maven快照工件的自动CI构建。所有生成的工件都应该具有可跟踪性(JIRA=>Git=>Jenkins build=>artifacty中的工件+构建信息) 当前设置: Jenkins与jobs一起构建所有相关项目的主分支,这些项目由web钩子触发,没有针对功能分支的CI构建 在合并到master之后,我们有很多损坏的构建。 我同意您的观点,PR创建者有责任确保分支编译和(集成)测试通过,受让人有责任在合并到master之前拉分支

总体目标:

我目前正在寻找一种合理的方法来处理(短期)功能分支的Maven快照工件的自动CI构建。所有生成的工件都应该具有可跟踪性(JIRA=>Git=>Jenkins build=>artifacty中的工件+构建信息)

当前设置:

Jenkins与jobs一起构建所有相关项目的主分支,这些项目由web钩子触发,没有针对功能分支的CI构建

在合并到master之后,我们有很多损坏的构建。 我同意您的观点,PR创建者有责任确保分支编译和(集成)测试通过,受让人有责任在合并到master之前拉分支并在本地测试所有内容,但不幸的是,现实情况有所不同。 此外,正如大家所知,快照版本是不可复制的,如果两个开发人员使用相同的版本号,他们将覆盖彼此的工件

我们使用ArtifactoryProfessional4.7.5作为存储库管理器

目标设置:

我在GitHub Enterprise中设置了一个Jenkins 2实例并设置了一个组织,GitHub组织文件夹插件可以轻松扫描该组织。所有作业配置都已移动到文件中。每当推送一个功能分支时,它将触发一个构建,结果将在GitHub企业Web GUI中可见。不过,这并不能解决功能分支的快照不能相互隔离的问题

我做了一些研究,发现了绑定到Maven构建的
deploy
阶段的。我使用自定义布局设置了一个新的功能分支存储库,并可以通过调用
sh'mvn clean deploy-Pfeature-Dgit.branch=${env.branch_NAME}
(需要使用
git.branch
参数,因为在使用Jenkins管道scm步骤时,我们处于分离头状态,因此插件无法推断分支名称)

问题:

我们无法获得使用时生成的构建信息。Jenkins Artifactory插件绑定到
安装
阶段,因此maven分支扩展不会启动

我尝试在构建阶段后添加一个单独的步骤:

stage('Publish build-info') {
    def artifactoryServer = Artifactory.server('myrepo.mycompany.se')
    def buildInfo = Artifactory.newBuildInfo()
    buildInfo.env.capture = true
    buildInfo.env.collect()
    def target = (env.BRANCH_NAME != 'master') ? "myproject-snapshot-feature-local/${env.BRANCH_NAME}/" : "myproject-snapshot-local/"

    def uploadSpec = """{
        "files": [{
            "pattern": "target/(.*).(jar|war|ear)",
            "target": "${target}",
            "recursive": "false",
            "regexp": "true"
        }]

    }"""

    artifactoryServer.upload(uploadSpec)
    artifactoryServer.publishBuildInfo(buildInfo)
}
这将向Artifactory发布一些构建信息,但也将再次上传工件

我想知道如果Jenkins Artifactory插件没有执行构建,是否有可能生成元数据

另外,如果您认为我使用单独的功能分支存储库的方法一开始不是一个好的解决方案,请告诉我。

您可以不运行maven,然后使用通用上载DSL上载文件


有关更多用法示例,请查看JFrog。

这是一个老问题,但我现在正在做类似的事情,并浏览了一些问题

你试过使用吗?我只是为了一个项目而尝试,他们看起来很有希望

在我的例子中,我默认修订我的版本(例如1.0.0),更改列表为“-SNAPSHOT”。pom版本设置为${rivision}${changelist},因此我的本地版本生成常规的快照版本,但在jenkins中,我可以生成并将更改列表设置为“${timestamp}”


类似的东西应该适合您。

如果我只使用Artfactoy Jenkins插件,这些工件将不会像存储库规范中定义的那样附加任何唯一的时间戳:(f/[jiraKey]/)[orgPath]/[module]/[baseRev]([folderItegRev]/[module]-[baseRev]([fileItegRev]([classifier])。[ext]这与Maven标准布局相同,但它将所有内容放在一个名为feature branch(如f/ISSUE-1234)的文件夹中.
maven metadata.xml
看起来是这样的,所以看起来没有根据布局解析任何内容:f.ISSUE-1234.se.mycompany fire 2.0.0-SNAPSHOT 2.0.0-SNAPSHOT 2.0.0-SNAPSHOT 20170127101515看起来像是repository布局完全被忽略了。如果我不得不在Artifactory Jenkins插件的deployer属性中的“某处”再次描述它,那将非常恼人(但我找不到该选项)。我注意到它也没有附加唯一的时间戳(即使选择了该选项)当我使用自定义布局时,会立即添加到文件名。出于好奇,我更改了自定义repo布局模式,使其看起来像Maven 2布局。但它仍然不会附加时间戳。看起来Jenkins Artifactory插件必须以某种方式配置为使用该布局,而不是从配置的存储库本身推断出来使用该布局。