You need to enable JavaScript to run this app. 如何在Jenkins任务中同步运行应用并执行后续命令
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jenkins任务中同步运行应用并执行后续命令

问题根源拆解

当你在Jenkins的Shell步骤中以前台模式启动应用时,Shell会话会持续持有该进程的输入输出流,必须等待应用进程完全退出才会返回执行权,这就是后续命令全部被阻塞的核心原因。要实现「应用保持运行的同时并行执行Asqatasun审计」,只需要解决两个核心问题:一是切断应用进程和Shell会话的关联,避免阻塞流水线步骤;二是按时序编排好应用启动、就绪检测、审计执行、进程清理的全流程。

可落地的实现方案

方案1:声明式流水线原生parallel块 + 后台启动命令(最适配现有场景)

这种方式不需要调整现有部署架构,直接在流水线中实现两个任务的并行编排,是成本最低的实现路径,核心实现逻辑如下:

  • 启动应用时使用nohup+后台运行参数,脱离Shell会话关联,避免步骤阻塞
  • 增加应用就绪检测逻辑,确认应用可正常访问后再触发审计流程
  • 在流水线收尾阶段增加清理逻辑,杀掉后台启动的应用进程,避免占用节点资源

参考流水线代码示例:

pipeline {
  agent any
  stages {
    stage('网站无障碍审计流程') {
      parallel {
        // 分支1:后台启动并常驻运行待测应用
        stage('启动待测应用') {
          steps {
            sh '''
              # 后台启动应用,脱离会话,输出重定向到本地日志
              nohup ./start-your-target-app.sh > app_runtime.log 2>&1 &
              # 固定短等待给应用预留初始化时间
              sleep 10
            '''
          }
        }
        // 分支2:执行Asqatasun审计
        stage('执行Asqatasun网站审计') {
          steps {
            sh '''
              # 循环探测应用健康状态,直到可正常访问再启动审计
              until curl -sf http://localhost:8080 > /dev/null; do
                echo "等待待测应用启动就绪..."
                sleep 3
              done
              # 调用部署好的Asqatasun服务执行指定站点的审计流程
              /opt/asqatasun/bin/asqatasun-cli -u http://localhost:8080 -o audit_report.html
            '''
          }
        }
      }
    }
  }
  // 无论流水线成功或失败,都清理后台启动的应用进程
  post {
    always {
      sh 'pkill -f your-target-app-process-name'
    }
  }
}

关键注意点:

  • 不要仅使用&实现后台启动:如果没有用nohup脱离父会话、没有把标准输出/错误输出重定向到文件,Jenkins的Shell步骤仍然会因为持有进程的流句柄,持续等待应用退出,无法实现非阻塞。
  • 不要用固定时长的sleep代替就绪检测:应用启动时间受节点负载、构建并发度影响波动很大,固定等待极易出现应用还没启动就触发审计的失败情况。

方案2:将应用配置为节点常驻服务

如果对流程稳定性要求更高,可以把待测应用提前配置成节点上的systemd常驻服务,流水线中只需要执行systemctl start your-app的启动命令,等待服务就绪后直接触发Asqatasun审计即可。
这种方式的优势是应用进程完全独立于Jenkins的Shell会话,不会因为流水线步骤退出被意外终止,稳定性更强,适合长期运行的审计流水线场景。

常见踩坑提醒
  • 必须增加后台进程清理逻辑:后台启动的应用不会跟随流水线结束自动退出,长期不清理会在构建节点上堆积大量僵尸进程,快速占满节点内存与端口资源。
  • Asqatasun的审计命令要配置好和应用的网络连通性:如果应用和Asqatasun服务不在同一个节点,需要提前配置好网络访问权限,确保审计服务可以正常访问待测应用的站点地址。

内容的提问来源于stack exchange,提问作者Alexandre Solane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.30 20:24:03