【问题标题】:Start process depending on background process根据后台进程启动进程
【发布时间】:2013-02-27 16:04:20
【问题描述】:

有一些测试在应用服务器(JBoss)中运行;我们想在 Jenkins 中集成这些测试。

在 Jenkins 中有这些步骤(所有步骤都是 Ant 步骤):

  • ...(其他步骤)
  • 在后台启动服务器
  • 运行测试
  • 停止服务器
  • ...(其他步骤)

服务器需要在后台启动才能让以下任务完成它们的工作。我编写了以下脚本来模仿这一点:

export LAUNCH_JBOSS_IN_BACKGROUND=1
./run.sh &
sleep 400
cd /testTriggerLocation
ant run-tests
kill `cat $jBossHome/4.0.5/bin/jboss.pid`

run.sh 启动服务器,并在启动后将 JVM 进程 ID 存储在 jboss.pid 中。

在正常方式(前台进程)中,JBoss 需要大约 100 秒才能启动,但在这里它需要一个取决于睡眠参数的值。如果我放 200 秒,则需要 ~ 190 - 210 秒,如果是 300 秒,则需要 290 - 310 秒;问题是,如果在服务器启动之前触发测试,它们显然会失败。有没有办法同步这个?或者也许是另一种方式来做到这一点?

【问题讨论】:

  • 为什么需要 fork run.sh?
  • run.sh 或它启动的任何内容是否会生成日志?如果是这样,您可以在这里放置一些东西来监视该日志中的某些内容..说“开始”或打印出来的任何内容说它准备好了...然后让脚本继续..而不仅仅是睡觉。
  • @EarlGray 因为如果它是一个前台进程,它将在 Jenkins 中无限期运行,然后测试将不会运行。
  • @jco.owens 实际上,当它完成时,它会写入jboss.pid 文件;谢谢你的提示,我会试试的。

标签: java linux shell jboss jenkins


【解决方案1】:

您可能希望考虑使用简单的进程管理器,例如 supervisordGod,它可以在您运行测试时为您守护进程。

在我的情况下,我会使用上帝来运行:

 god -c my-project.god
 ruby test-runner.rb
 god terminate

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-12
    相关资源
    最近更新 更多