jenkins - 从 Maven 调用生成 Artifactory 构建信息

标签 jenkins artifactory continuous-delivery

总体目标:

我目前正在寻找一种合理的方法来处理(短期)功能分支的 Maven SNAPSHOT Artifactory 的自动 CI 构建。所有生成的 Artifactory 都​​应该具有可追溯性(JIRA => Git => Jenkins build => Artifact + Artifactory 中的构建信息)。

当前设置:

Jenkins 的任务是构建由 Web Hook 触发的所有相关项目的主分支,并且无需为功能分支构建 CI。

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

我们使用 Artifactory Professional 4.7.5 作为存储库管理器。

目标设置:

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

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

问题:

我们没有获得使用 Jenkins Artifactory plugin 时生成的构建信息。 Jenkins Artifactory 插件绑定(bind)到 install 阶段,因此 maven-branch-extension 不会启动。

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

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,但它也会再次上传 Artifactory 。

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

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

最佳答案

你可以做maven build using Artifactory Jenkins plugin而不是运行 Maven,然后使用通用上传 DSL 上传文件。

更多使用示例可以查看 JFrog jenkins-pipeline-examples .

关于jenkins - 从 Maven 调用生成 Artifactory 构建信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41855389/

相关文章:

maven - Jenkins Pipeline 和 SonarQube 设置

jenkins - 尝试为 Jenkins 配置 androidLint 插件时出现 404

Spring Boot和Continuous Delivery简单管道

使用 powershell 进行带有校验和的人工上传

Azure 网站持续交付

jenkins - 让 Ansible 和 Rundeck 一起工作是一个好主意,还是使用任何一个就足够了?

svn - jenkins/svn 外部的问题 - 授权错误

java - Gradle Artifactory 插件 - 如何自动部署 Spring Boot Fatjar

nginx - 状态405- docker - Artifactory

bitbucket - 如何使用 BitBucket Pipelines 通过 FTP 部署网站