如何使用 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是相似的故事。您不会从此分支发布,因此版本并不重要。
当您的发布经理将功能分支合并到发布分支时,他们应该修复版本。
我有一个带有 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是相似的故事。您不会从此分支发布,因此版本并不重要。
当您的发布经理将功能分支合并到发布分支时,他们应该修复版本。