Svn Jenkins-将更新版本传递给下游作业

Svn Jenkins-将更新版本传递给下游作业,svn,jenkins,Svn,Jenkins,我们已经将多平台产品的构建系统从CruiseControl迁移到jenkins。这是一个单一的单一作业: 1.检查更改 2.更新属性文件中的产品内部版本号 3.将文件提交到subversion 4.将svn修订号传递给其他平台以进行本地签出(性能原因) 5.构建(C++,Java) 6.试验 在Jenkins中,我们将构建和测试分为两个作业,构建触发测试。所有平台构建都必须成功才能运行测试。我希望在平台A上运行测试,而不考虑平台B上的构建失败,但这是另一个问题 我现在试图解决的问题是构建阶段。当

我们已经将多平台产品的构建系统从CruiseControl迁移到jenkins。这是一个单一的单一作业:
1.检查更改
2.更新属性文件中的产品内部版本号
3.将文件提交到subversion
4.将svn修订号传递给其他平台以进行本地签出(性能原因)
5.构建(C++,Java)
6.试验

在Jenkins中,我们将构建和测试分为两个作业,构建触发测试。所有平台构建都必须成功才能运行测试。我希望在平台A上运行测试,而不考虑平台B上的构建失败,但这是另一个问题

我现在试图解决的问题是构建阶段。当Jenkins开始时,它知道作业开始时存储库的SVN_版本。我们在作业期间编译之前增加构建编号,我们需要将此svn修订版传递给下游作业。我们需要确保在所有平台上签出相同的版本,并且测试工作也签出相同的版本。编译需要2-3个小时,测试大约需要7个小时,所以在测试作业中包含的构建期间发生一些新的提交已经足够正常了。我们在构建阶段也有提交,由于签出速度不同,这些提交被包含在一个平台中,而不是其他平台中

我们已经尝试了参数化触发器插件,它可以通过SVN_修订版-作业开始时的修订版,但不通过具有内部版本号的修改文件的修订版。我们在其他情况下使用参数化触发器,它可以满足我们的需要

我想做的一件事是将svn修订号添加到属性文件中。我可以在其他作业中从属性文件中读取修订,假设文件没有更改,这可能有风险。 svn使用“:”分隔属性,IIRC,其他属性使用“=”表示key=value,因为我们还读取要在shell脚本中使用的属性。还有其他依赖的项目,所以我回到办公室并建立一个沙箱(半天的工作)时会尝试这个

有人有什么建议或意见吗?

我想这本书对你很有用。它允许您克隆工作区,以便其他作业可以使用它。使用它,我可以像这样配置我的作业

  • (1) 主作业:签出源代码,更新版本号,进行工作区克隆
  • (2) 平台1:使用来自#1的克隆,为平台1构建,为测试平台1创建工作区克隆
  • (3) 平台2:使用来自#1的克隆,为平台2构建,为测试平台2创建工作区克隆
  • (4) 平台1测试:使用来自#2的克隆
  • (5) 平台2的测试:使用来自#3的克隆

参数化触发器插件中的一个源选项是:

  • 从触发生成的工作区读取的属性文件中的属性

如果您在原始工作区中创建此项而不签入,则在触发下游作业之前,您不会有任何更改风险。

我们遇到了类似的问题,我们希望调用从属机器上的作业并通过master正在使用的SVN修订,下面是我们解决此问题的方法:

1) 使用预定义的参数say MASTER_SVN_REVISION调用子作业,并将其赋值为SVN_REVISION

2) 现在,在步骤1中调用的作业中,使用以下机制来使用MASTER_SVN_REVISION的值


感谢这篇文章和下面的评论:

以下是对我有效的答案:

  • 获取参数化触发器插件(如何安装:Manage Jenkins->Manage Plugins->Available并检查“Parameterized Trigger Plugin”并安装,注意我还安装了“Environment Injector Plugin”,这可能也是必要的)
  • 转到作业1并添加生成后操作(在其他项目上触发参数化生成)
  • 键入要生成作业2的项目
  • 添加参数(预定义参数)
  • 在参数框中键入以下内容:SVN_REV=${SVN_REVISION}
  • 应用并保存
  • 最重要的是:必须将此参数(SVN_REV)添加到作业2中
  • 转到并选中“此构建已参数化”,然后添加“字符串参数”
  • 键入“SVN_REV”(必须是相同的名称)并输入默认值1或任何值
  • 现在它是一个环境变量,要访问它,只需%SVN\u REV%
  • 在构建步骤中,您可以编写echo%SVN_REV%,它将显示SVN_版本
  • 简而言之(必须在两个作业中指定参数) JOB_1=>SVN_REV=${SVN_REVISION}


    JOB_2=>将SVN_REV添加为字符串参数,要在构建步骤中访问类型%SVN_REV%

    ,您可以编写
    echo%SVN_REV%
    ,它将显示 SVN\U修订版。简而言之(必须在两个作业中指定参数)


    使用
    ${SVN_REV}
    访问。这对我很有效。

    我会调查的。但是,我确实需要检查属性文件,因为它被这个项目的构建和测试以及其他项目使用。这应该是正确的答案。很好。只需使用echo SVN_REV而不是%echo SVN_REV%调用变量。如果下游作业具有不同的计划,尤其是在不定期触发构建时,这将不起作用。
    JOB_1 => SVN_REV=${SVN_REVISION}
    JOB_2 => Add SVN_REV as a String Parameter, to access type %SVN_REV%