Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 获取jenkins build上的本地GIT分支_Shell_Maven_Jenkins - Fatal编程技术网

Shell 获取jenkins build上的本地GIT分支

Shell 获取jenkins build上的本地GIT分支,shell,maven,jenkins,Shell,Maven,Jenkins,我们正在开发多个功能,一个开发、发布和掌握GIT分支。我们为所有JIRA开发任务创建单独的特性分支。我需要让Jenkins构建作业来轮询所有特性分支,并构建那些最近有推送事件的特定分支。启动构建作业后,我希望提取特定的GIT功能分支名称(即JIRA-1234,而不是origin/feature/JIRA-1234),将其作为APP-0.0.1-JIRA-1234-SNAPSHOT包含在工件文件名中,并将其保存到Nexus 注意:POM.XML文件配置为APP-0.0.1-SNAPSHOT 对于每

我们正在开发多个功能,一个开发、发布和掌握GIT分支。我们为所有JIRA开发任务创建单独的特性分支。我需要让Jenkins构建作业来轮询所有特性分支,并构建那些最近有推送事件的特定分支。启动构建作业后,我希望提取特定的GIT功能分支名称(即JIRA-1234,而不是origin/feature/JIRA-1234),将其作为APP-0.0.1-JIRA-1234-SNAPSHOT包含在工件文件名中,并将其保存到Nexus

注意:POM.XML文件配置为APP-0.0.1-SNAPSHOT

对于每个功能分支构建,我们希望将单独的jar文件保存到Nexus。例如:JIRA-0101下的开发任务将在nexus中构建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}是无效的。

我不熟悉jgitflow流程,我将尝试阅读这方面的内容并调整我的答案,但现在我想让您看看这篇关于进行maven部署的非常棒的文章-。本文讨论了在pom文件中使用外部设置的版本——他们将“sane default”属性嵌入到代码库中

    <properties>
        <!-- Sane default when no revision property is passed in from the commandline -->
        <revision>0-SNAPSHOT</revision>
    </properties>
您可以更具体地使用需要ASDF-1234样式模式的正则表达式

$ echo $BRANCH | sed -e 's|.*/\([A-Z]*-[0-9]*\)$|\1|g'
JIRA-0101
如果您想将上述内容捕获到一个新变量中,可以直接在对maven的调用中使用子shell

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插件),则需要一个类似于environment injection插件的插件,如

中所述。我不熟悉jgitflow流程,我将尝试阅读并定制我的答案,但现在我想让你看看这篇关于maven部署的非常棒的文章-。本文讨论了在pom文件中使用外部设置的版本——他们将“sane default”属性嵌入到代码库中

    <properties>
        <!-- Sane default when no revision property is passed in from the commandline -->
        <revision>0-SNAPSHOT</revision>
    </properties>
您可以更具体地使用需要ASDF-1234样式模式的正则表达式

$ echo $BRANCH | sed -e 's|.*/\([A-Z]*-[0-9]*\)$|\1|g'
JIRA-0101
如果您想将上述内容捕获到一个新变量中,可以直接在对maven的调用中使用子shell

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插件),则需要一个类似于environment injection插件的插件,如

中所述。如果我没有弄错,您希望Jenkins自动基于推送事件构建,并在成功后将
目标
文件夹发布到您的nexus。如果是这样的话,我建议研究一种更高级的东西,叫做
JenkinsFile
(),它有两个jenkins插件作为
multi-branch pipeline
,可以自动检测存储库中的所有分支,并为每个分支设置一个作业。 然后你需要Webhook(bitbucket和github都有),这些钩子会通知你的jenkins推送事件(或者你想要的任何其他事件,比如commit/comment等),这些事件会触发构建作业。一些插件(如Bitbucket branch source plugin)提供了一种处理这些Webhook的服务,因此您不必手动操作(手动:您必须键入作业url和执行命令,如ci:port/yourJob/?build[无法回忆起我使用它以来的整个url),automatic POST ci:port/bitbucket scmsource hook/notify/这是通用的,插件会将钩子重定向到相应的作业。)。作为Jenkins文件管道的最后一步,您可以将push命令添加到nexus,这将在nexus中添加所需的文件


我希望我的回答能有所帮助:)

如果我答对了,您希望Jenkins能够根据推送事件自动构建,并在成功后将
target
文件夹发布到您的nexus。如果是这样的话,我建议研究一种更高级的东西,叫做
JenkinsFile
(),它有两个jenkins插件作为
multi-branch pipeline
,可以自动检测存储库中的所有分支,并为每个分支设置一个作业。 然后你需要Webhook(bitbucket和github都有),这些钩子会通知你的jenkins推送事件(或者你想要的任何其他事件,比如commit/comment等),这些事件会触发构建作业。一些插件(如Bitbucket branch source plugin)提供了一种处理这些Webhook的服务,因此您不必手动操作(手动:您必须键入作业url和执行命令,如ci:port/yourJob/?build[无法回忆起我使用它以来的整个url),automatic POST ci:port/bitbucket scmsource hook/notify/这是通用的,插件会将钩子重定向到相应的作业。)。作为Jenkins文件管道的最后一步,您可以将push命令添加到nexus,这将在nexus中添加所需的文件


我希望我的回答有帮助:)

嗨!我不太明白你到底在问什么。。您的Jenkins进程在特定分支发生更改时触发,因此您已经可以访问本地git分支,但您只是想知道如何正确地将其添加到用于发布的“版本”中,并且您必须使用jgitflow maven插件?还有,你在用什么