2

我需要创建一个构建管道,其中包含多个相互依赖的项目。这是一个简化的插图:

SVN A --> build A --\
                    |
SVN B --> build B --|
                    |
SVN C ----------------> build C

管道应该工作,以便当更改提交到任何项目的 SVN 存储库时,该项目会自动构建。此外,在构建 A 或 B 之后,它会触发 C 的构建。

每个构建都会生成具有唯一版本号(“XYBuildNumber”)的二进制文件,并且 C 必须获取 A 和 B 的版本号作为参数,以便可以使用这些版本构建 C。C 应该默认使用 A 和 B 的最新成功构建,但也应该可以使用旧版本的 A 或 B 手动触发 C(例如,如果我们想要部署其中一个项目的旧版本)。

创建这样的管道可以在Go上开箱即用,但我的公司认为它太昂贵了。(2014-02-27 更新:Go 不是开源和免费的!)所以现在我试图找出如何使用 Jenkins 来实现同样的事情,但还没有找到方法。我只找到了在 Jenkins 中创建简单的线性和菱形管道的说明,但没有找到具有多个独立上游项目的管道。

4

2 回答 2

1

可以使用Copy Artifact Plugin 将上游作业的版本号传递给下游作业。将版本号写入上游作业中的文件,将其存档,然后使用该插件在下游作业中读取它。选择触发此项目的上游构建使用“上次成功构建”作为插件配置中的后备选项。

有关更多详细信息,请参阅使用 Jenkins 的相互依赖的构建管道

于 2013-05-31T08:32:02.353 回答
0

我们将build-pipeline-plugin用于类似的事情,我们所做的是提供一个 groovy 脚本,用于存储要传递给下游项目的运行时构建信息:

有点冗长,因为我们包含下游构建的 SVN 信息:

import hudson.model.*
def thr = Thread.currentThread()
def build = thr?.executable

def workspace = build.getWorkspace()

def ant = new AntBuilder() 
ant.exec(executable: "svn", outputproperty: "output", dir: workspace){ 
    arg(line: "info") 
}
svnInfo = ant.project.getProperty("output")
print svnInfo 

def pattern = /Last\s+Changed\s+Author:\s+(\w+)/ 
def matcher = (svnInfo =~ pattern)
def user = matcher[0][1]

def langs = new XmlParser().parseText(build.getParent().getWorkspace().child('pom.xml').readToString())
def appVer = langs.properties.release.text()
def artifactId = langs.artifactId.text()

def params = [
new StringParameterValue('PL_SVN_REVISION', build.getEnvVars()['SVN_REVISION']),
new StringParameterValue('PL_BUILD_NUMBER', build.getEnvVars()['BUILD_NUMBER']),
new StringParameterValue('PL_APP_NAME', 'FooApp'),
new StringParameterValue('PL_COMMITTER_NAME',user ),
new StringParameterValue('PL_APP_VERSION',appVer),
new StringParameterValue('PL_ARTIFACT_ID',artifactId) 
]
build.addAction(new ParametersAction(params))

然后在下游构建中,它们应该像这样可用:

示例 1,设置构建名称输入:

#${BUILD_NUMBER} - ${ENV,var="PL_APP_NAME"} - ${ENV,var="PL_APP_VERSION"} - ${ENV,var="PL_SVN_REVISION"}

示例 2,调用 Ant目标输入:

deploy
  -Denvironment=ONT-base
  -DWAR-LOCATION=%war-repo%/%PL_APP_NAME%/%PL_BUILD_NUMBER%-%PL_SVN_REVISION%/
  -DWAR-NAME=%PL_ARTIFACT_ID%-%PL_APP_VERSION%.%PL_BUILD_NUMBER%-%PL_SVN_REVISION%.war

但是请注意,当在多个上游项目中重用下游项目时,存在一个未正确传递变量的突出错误

于 2013-07-09T08:28:08.963 回答