Jenkins:在两次作业之间存储变量的好方法是什么?

问题描述 投票:5回答:2

我有一个时间触发的作业,需要检索存储在该作业的前一次运行中的某些值。

在Jenkins环境中是否可以在两次作业之间存储值?

例如,我可以在shell脚本动作中写类似next的内容:

XXX=`cat /hardcoded/path/xxx`
#job itself
echo NEW_XXX > /hardcoded/path/xxx

但是有没有更可靠的方法?

jenkins jenkins-pipeline jenkins-plugins hudson jenkins-groovy
2个回答
13
投票

一些选项:

  • 将数据存储在工作空间中。如果数据不是关键数据(即,在对工作空间进行核对时可以将其核对)就可以了。我只用它来缓存昂贵的计算数据,例如预建的库相关性。
  • 将数据存储在文件系统中的某个固定位置。您可以减少詹金斯的独立性,从而使迁移+备份更加复杂-但可能不会太多;特别是如果您将数据存储在jenkins的某些自定义用户子目录中。并行构建也将很棘手,而分布式构建可能是不可能的。 Jenkins有一个userContent子目录,可用于此目的-这样,该文件至少是jenkins安装的一部分,因此更易于迁移或备份。我为构建的(相当大的)代码覆盖率趋势文件执行此操作。
  • 将数据存储在不同的机器(例如数据库)上。设置起来比较复杂,但是您对本地机器的详细信息的依赖较少,并且可能更易于分发和并行构建。我这样做是为了维护实时变更日志。
  • 将数据存储为构建工件。这意味着查看先前构建的工件。它是安全且可重复的,并且因为使用Uri来访问此类工件,所以分布式构建也可以。但是,您需要处理失败的构建(您应该回顾几个版本吗?从头开始?),并且您将存储许多副本,如果大小为1KB,则很好,而如果大小为1GB,则不太好。这里的另一个缺点是,您可能需要打开jenkin的安全设置,以允许匿名访问工件(因为您只是从uri下载)。

适当的解决方案将取决于您的情况。


1
投票

我会将变量从第一个作业传递给第二个作业,作为parameterized build中的参数。有关如何从另一个版本中触发参数化的版本的更多信息,请参见this question

© www.soinside.com 2019 - 2024. All rights reserved.