我们正在开发多种功能,其中之一是开发,发布和掌握GIT分支。我们为所有JIRA开发任务创建单独的功能分支。我需要让Jenkins建立工作来轮询所有功能分支,并建立那些具有最近PUSH事件的特定分支。启动构建作业后,我希望获取特定的GIT功能分支名称(即JIRA-1234,而不是origin / feature / JIRA-1234),并将其作为APP-0.0.1-JIRA-包含在工件文件名中。 1234-SNAPSHOT,并将其保存到Nexus。
NB:POM.XML文件使用APP-0.0.1-SNAPSHOT配置。
对于每个功能分支版本,我们希望将单独的jar文件保存到Nexus。例如:JIRA-0101下的开发任务将在jar中将jar生成并保存为APP-0.0.1-JIRA-0101-SNAPSHOT
我在POM.xml中包含了$ {branch}参数,如下所示: APP-0.0.1 $ {branch}-快照
并通过Jenkins build命令将该值传递为-mvn clean install -Dbranch = -JIRA-0101
然后我对jenkins构建任务进行了参数化,之后我可以将功能分支名称命名为“ origin / feature / JIRA-0101”,但是我无法在Jenkins中解析整个字符串以仅选择JIRA任务。
其次,mvn jgitflow:release-start和mvn jgitflow:release-finish命令会在POM.xml中产生带有“ APP-0.0.1 $ {branch} -SNAPSHOT”的并发症。因此,在POM中使用$ {branch}无效。
答案 0 :(得分:0)
我对jgitflow流程并不熟悉,因此我将尝试阅读并定制答案,但是现在我想向您指出这篇关于进行Maven部署的非常好的文章-{{3} }。这篇文章讨论了在pom文件中使用外部设置的版本-他们在代码库中嵌入了“默认的”属性。
<properties>
<!-- Sane default when no revision property is passed in from the commandline -->
<revision>0-SNAPSHOT</revision>
</properties>
然后,他们在其<build>
描述中引用该属性
<build>
<plugins>
<plugin>
<artifactId>maven-scm-plugin</artifactId>
<version>1.9.4</version>
<configuration>
<tag>${project.artifactId}-${project.version}</tag>
</configuration>
</plugin>
</plugins>
</build>
调用Maven时,他们从CI服务器-mvn deploy scm:tag -Drevision=$BUILD_NUMBER
我敢肯定,使用jgitflow插件,您可以拥有与上述配置类似的内部属性,但可以将其用作jgitflow版本的一部分,并将分支信息传递到构建中。
---对反馈的响应---
如果您只是尝试提取分支标识符的最后一部分,则有几种方法可以执行。如果仅是最后一个/
之后的所有内容,则可以使用basename
实用程序。
$ BRANCH="origin/feature/JIRA-0101"
$ basename $BRANCH
JIRA-0101
您可以使用期望ASDF-1234样式模式的正则表达式来更具体
$ echo $BRANCH | sed -e 's|.*/\([A-Z]*-[0-9]*\)$|\1|g'
JIRA-0101
如果要将以上内容捕获到一个新变量中,则可以使用子外壳,直接在对maven的调用中
mvn clean install -Dbranch=$(echo $BRANCH | sed -e 's|.*/\([A-Z]*-[0-9]*\)$|\1|g')
或将其存储在您可以测试以验证其为非零长度的中间变量中
JIRA_ID=$(echo $BRANCH | sed -e 's|.*/\([A-Z]*-[0-9]*\)$|\1|g')
[[ -z "${JIRA_ID}" ]] && echo "Unable to determine JIRA_ID" && exit 1
mvn clean install -Dbranch=${JIRA_ID}
如果您需要将变量传递到其他步骤(如果直接使用maven插件),则将需要类似于Maven Release Plugin: Dead and Buried
envinject环境注入插件的插件。 >答案 1 :(得分:0)
如果我做对了,您希望您的Jenkins自动建立在推送事件上,并成功地将target
文件夹发布到您的关系中。如果是这种情况,我建议您使用一些JenkinsFile
https://jenkins.io/doc/book/pipeline/jenkinsfile/的jenkins插件,研究一种更高级的名为Multibranch pipeline
(https://wiki.jenkins.io/display/JENKINS/Pipeline+Multibranch+Plugin)的东西,该插件可以自动检测所有存储库中的分支,并为每个分支设置一个作业。
然后,您将需要webhooks(bitbucket和github都有),这些钩子将通知jenkins有关push事件(或您想要的任何其他事件,例如commit / comment等),它们将触发构建作业。某些插件(例如Bitbucket分支源插件https://wiki.jenkins.io/display/JENKINS/Bitbucket+Branch+Source+Plugin)提供了处理这些Webhooks的服务,因此您不必手动进行操作(manual:您必须输入作业url和exec命令,例如ci:port / yourJob / ?build [无法回忆起我使用过以来的整个网址],自动POST ci:port / bitbucket-scmsource-hook / notify /是通用的,插件会将挂钩重定向到适当的工作。)。作为jenkinsfile管道的最后一步,您可以将push命令添加到nexus,这将在您的nexus中添加您想要的文件。 !
我希望我的回答有帮助:)