如何使用 Jenkins 发布特定分支

How to release specific branch with Jenkins

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

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

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

我当然可以在发布时将"branch to build"设置为"master"。但是 a) 我需要在发布后重置它,b) 每次我想发布时都需要这样做。

我也可以使用分支选项使此构建参数化,但此作业将不会由 scm 提交执行。

所以我的问题是:是否有 way/plugin 告诉 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>

在 Jenkins 作业的配置中,您可以像这样指定分支:

release_*

然后在每次构建时输入版本号作为“使用参数构建”选项的一部分,然后从 release_{number} 分支构建。

这样就不用每次都去编辑Jenkins作业了

将 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是相似的故事。您不会从此分支发布,因此版本并不重要。

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