【问题标题】:How to release specific branch with Jenkins如何使用 Jenkins 发布特定分支
【发布时间】:2017-07-17 19:13:28
【问题描述】:

我有一个带有 M2 发布插件的 Jenkins。 我有一份构建和发布的工作。

使用的存储库具有 master 和 feature/bugfix 分支。 该作业被配置为构建所有分支。另外部署了master分支。 所有稳定的更改都合并到主分支中,但最新的更改(尚未工作)在错误修复分支中进行。因此,最新版本(mvn install)是在这个 bugfix 分支上进行的。

如果我想发布这个项目,jenkins 会采用最新的构建版本(bugfix 分支)并尝试发布它。由于 SNAPSHOT 依赖关系,这将失败。

我当然可以在发布时将“要构建的分支”设置为“主”。但是a)我需要在发布后重置它,b)每次我想发布时都需要这样做。

我也可以使用分支选项使这个构建参数化,但是这个作业不会被 scm 提交执行。

所以我的问题是:有没有办法/插件告诉 jenkins 发布一个特定的分支?

编辑: 我添加了我的 pom.xml,以便您可以提供一个易于理解的示例

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<parent>
    <groupId>my.parent.gid</groupId>
    <artifactId>my.iarent.aid</artifactId>
    <version>1.0.0</version>
</parent>

<name>Project Name</name>

<groupId>my.project.gid</groupId>
<artifactId>my.project.aid</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging>

<url>${project_url}</url>

<ciManagement>
    <system>${project_ciManagement.system}</system>
    <url>${project_ciManagement.url}</url>
</ciManagement>

<scm>
    <!-- read access -->
    <connection>${project_scm.connection}</connection>
    <!-- write access (release-plugin) -->
    <developerConnection>${project_scm.developerConnection}</developerConnection>
    <!-- browser access -->
    <url>${project_scm.url}</url>
    <tag>HEAD</tag>
</scm>

<properties>
    <compiler.javaVersion>1.7</compiler.javaVersion>
    <scm.repo>repo_name</scm.repo>
</properties>

<modules>
    <module>Module1</module>
    <module>Module2</module>
    <module>Module3</module>
</modules>

【问题讨论】:

    标签: maven jenkins maven-release-plugin


    【解决方案1】:

    在 Jenkins 作业的配置中,您可以指定分支如下:

    release_*
    

    然后在每次构建时输入版本号作为 Build With Parameters 选项的一部分,然后将从 release_{number} 分支构建。

    这样,您不必每次都编辑 Jenkins 作业。

    【讨论】:

    • 实际上,我认为我没有解决您问题的自动化方面,抱歉!
    【解决方案2】:

    将 pom 保留在您的发布分支上:

    <groupId>my.project.gid</groupId>
    <artifactId>my.project.aid</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    

    当您执行 mvn release:prepare 时,它​​会将 SCM 标记为 1.0.0,并将 pom 中的版本更改为 1.0.1-SNAPSHOT,为下一次迭代做好准备。

    mvn release:perform 然后将获取标签 1.0.0,构建工件并将其推送到您的存储库、Nexus 或类似的。

    你的功能分支应该有类似的 pom:

    <groupId>my.project.gid</groupId>
    <artifactId>my.project.aid</artifactId>
    <version>1.0.0-SP123-SNAPSHOT</version>
    <packaging>pom</packaging>
    

    其中SP123的故事类似。您不会从此分支发布,因此版本并不重要。

    当您的发布经理将功能分支合并到发布分支时,他们应该修复版本。

    【讨论】:

    • 我不确定我是否理解正确。因此,我添加了我的 pom 作为示例。我将永远只发布主分支!能否请您更详细地解释一下标签的事情?
    • 更新了我的答案
    • 好的,我明白这一点。但这并不能解决我的问题:最新版本(即 mvn 安装)是在错误修复分支上进行的。当我按“执行 Maven 发布”时,詹金斯试图发布这个最新版本....但我想发布主分支。 :)
    • 那么那个版本应该是一个点发布,所以如果它来自分支 1.0.1(发布分支标签),它应该是标签 1.0.1 的签出,修复然后将版本更改为 1.0。 1.1 和 mvn 再次发布。这样你就知道它只是 1.0.1 加上设置更改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-23
    • 2016-07-25
    • 1970-01-01
    • 2020-01-08
    • 1970-01-01
    • 2016-08-15
    • 1970-01-01
    相关资源
    最近更新 更多