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

标签 jenkins jenkins-pipeline jenkins-plugins hudson jenkins-groovy

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

有没有办法在 Jenkins 环境中的作业运行之间存储值?

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

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

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

最佳答案

几个选项:

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

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

    关于Jenkins:在两次作业运行之间存储变量的好方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8419385/

    相关文章:

    Jenkins 配置因系统用户异常而恢复

    Jenkins - 只为一项工作增加执行者的数量

    Jenkins : How to get sonar environment variables

    jenkins - 在流水线 SH 脚本中使用 Jenkins 环境变量

    selenium - 当我们使用 Jenkins windows 服务模式执行 selenium 脚本时,从渲染器 : 600. 000 接收消息超时

    jenkins - 如何在 Jenkinsfile 上通过 ssh 进行发布,以及如何在 Jenkinsfile 上使用 groovy SDL 进行 scp 发布?

    jenkins - 如何在 Jenkins 中只执行最近排队的作业?

    android - 无法通过 Jenkinsfile 运行 "faSTLane"命令

    jenkins - 在 Jenkinsfile 中使用 Tuple 时无法批准 RejectedAccessException

    jenkins - 如何在没有 "-secret"jnlp 选项的情况下允许从站连接到 jenkins 主站?