繁体   English   中英

Jenkins 中的多分支管道与 SVN

[英]Multibranch Pipeline in Jenkins with SVN

我有 SVN 作为我的 SCM。 SVN Root URL 结构如下。 https://svn.domain.com/orgName

在此之下,我有一个名为“test”的文件夹。 然后我有标签、树枝和树干。 例如, https://svn.domain.com/orgName/test/trunk
https://svn.domain.com/orgName/test/branches

在主干和分支下,我有各种模块。 一个模块是平台,它是核心模块。 我的项目在 Platform 下的 URL 结构如下。

https://svn.domain.com/orgName/test/trunk/Platform/MyProject https://svn.domain.com/orgName/test/branches/Platform/1.0.0.0/MyProject

不确定上面的结构是否正确。 但这就是它在我的组织中的结构方式,无法更改。 现在,我有以下问题。

  1. 我应该在什么级别维护 Jenkinsfile?
  2. 我应该如何将分支名称(包括主干)传递给这个文件?

如果有人可以提供有关如何将 Multibranch 管道与 SVN 一起使用的一些详细信息(如果可能的话),那将会很棒。 不幸的是,我找不到任何教程或示例来实现这一点。

这是我自己想出来的。 这是详细信息,以防万一有人需要帮助。

对于主干,在主干/平台(在我的情况下)中添加 Jenkinsfile,对于分支,在分支/平台/文件夹中添加 Jenkinsfile。 对于分支,最好将 Jenkinsfile 保存在每个版本文件夹中,因为它有一些好处。 这种方法将为每个版本创建一个 Jenkins 作业。

在 Jenkins 作业(用于多分支管道)中,添加 Project Repository Base 的基本 URL。 就我而言,它是https://svn.domain.com/orgName/test 在包括分支字段中,在我的情况下添加主干/平台、分支/平台/*。 在 Jenkinsfile 中,要获取分支名称,请使用内置变量 $BRANCH_NAME。 这为主干提供了主干/平台,为分支提供了分支/平台/1.0.0.0(例如)。

唯一的挑战是创建的作业名称如 Trunk/Platform、Branches/Platform/1.0.0.0。 因此,工作区的创建类似于 Trunk%2FPlatform, Branches%2FPlatform%2F1.0.0.0,因为“/”使用 %2F 进行编码。 在作业中使用时,请确保使用以下代码适当修改作业名称。

def cws = "${WORKSPACE_DIR}\\" + "${JOB_NAME}".replace("%2F","_").replace("/","\\")
echo "\u2600 workspace=${cws}"
def isTrunk = "${JOB_NAME}".toLowerCase().contains("trunk")
def version = ""
def verWithBldNum = ""
echo "\u2600 isTrunk=${isTrunk}"
if(!isTrunk)
 {
    version = "${JOB_NAME}".substring("${JOB_NAME}".lastIndexOf("%2F") + 3, "${JOB_NAME}".length())
    echo "\u2600 version=${version}"
    verWithBldNum = "${version}".substring(0, "${version}".lastIndexOf('.') + 1) + "${BUILD_NUMBER}"
    echo "\u2600 verWithBldNum=${verWithBldNum}"
 }
else
{
    echo "\u2600 Branch is Trunk"
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM