首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
CodeXx
V2EX  ›  程序员

求助 V 友! Jenkins 在 windows 服务器上启动 jar 包的问题

  •  1
     
  •   CodeXx · 58 天前 · 1202 次点击
    这是一个创建于 58 天前的主题,其中的信息可能已经有所发展或是发生改变。

    第一次接触 Jenkins,有多台 windows 服务器部署同一个 jar,想用一个 job 执行部署。通过 java-jar 的方式启动后控制台会一直输出内容,导致无法部署到下一台服务器。看网上的是都是 start javaw -jar 执行的,但是我用了 start 执行后服务器上没反应,jar 包没有启动。

    第 1 条附言  ·  58 天前
    start 后加了 ping /n 50 127.1 >nul 相当于 sleep 了 50s,发现程序启动成功了,但是 50s 后又关闭了。
    应该是 Jenkins build 结束后会 kill 掉衍生进程。看了下要设置变量 BUILD_ID,研究下 batch 脚本怎么设置
    第 2 条附言  ·  58 天前
    在 start 前加上 set BUILD_ID = dontKillMe 也没用。。
    31 回复  |  直到 2019-11-26 09:04:01 +08:00
    fonlan
        1
    fonlan   58 天前 via Android
    windows 的话为啥不直接部署成服务模式?
    CodeXx
        2
    CodeXx   58 天前
    @fonlan 感觉有点麻烦,实在不行再考虑吧
    xwbz2018
        3
    xwbz2018   58 天前 via Android
    nohup 了解一下
    xwbz2018
        4
    xwbz2018   58 天前 via Android
    @xwbz2018 噢,Windows,打扰了
    CodeXx
        5
    CodeXx   58 天前
    @xwbz2018 Windows 上有 nohup 的插件。。但不想搞乱系统
    CodeXx
        6
    CodeXx   58 天前
    啊啊啊,没人用 Jenkins 整 Windows 服务器的吗??
    xwbz2018
        7
    xwbz2018   58 天前 via Android
    @CodeXx #5 start 加上再新建一个启动.bat ,里面直接 java -jar

    jenkins 脚本里 start 启动. bat

    应该可行
    CodeXx
        8
    CodeXx   58 天前
    @xwbz2018 试过了,job 执行完后又把启动的 Java 进程关掉了
    CodeXx
        9
    CodeXx   58 天前
    发现一个骚操作,把超时时间设为 20s,超时关闭连接的时候不会把启动的 Java 进程关掉
    julyclyde
        10
    julyclyde   58 天前
    @CodeXx 你啥都不想搞,那你就继续享受“无法部署下一台”吧
    CodeXx
        11
    CodeXx   58 天前
    @julyclyde 想啊,只是优先用常规的方式部署。实在不行再搞其他方法嘛
    CodeXx
        12
    CodeXx   58 天前
    我就很纳闷了,网上都是直接 start 启动的,他们不会出现杀进程的情况吗
    julyclyde
        13
    julyclyde   58 天前
    @CodeXx 常规情况大家不会用 windows 的
    CodeXx
        14
    CodeXx   58 天前
    @julyclyde 额额,公司用的我也没办法,还 tm 十几台
    Elfred2096
        15
    Elfred2096   57 天前
    这样试试?
    新建一个批处理 run.bat:
    @echo off

    start javaw -jar xx.jar

    exit
    tomczhen
        16
    tomczhen   57 天前 via Android
    文档上不是有 install Jenkins as Windows service 这段吗?
    CodeXx
        17
    CodeXx   57 天前
    @tomczhen 把 Jenkins 作为服务启动?现在是 war 包启动的,和这个有关?
    CodeXx
        18
    CodeXx   57 天前
    @Elfred2096 试过了
    Firxiao
        19
    Firxiao   57 天前
    你的问题应该是 Windows 如何在 cmd 下跑后台进程吧?
    帮你搜了下.
    https://superuser.com/questions/198525/how-can-i-execute-a-windows-command-line-in-background
    ```
    START /B program
    ```
    fonlan
        20
    fonlan   57 天前 via Android
    @CodeXx 麻烦????启动 agent 的 jar 包后不是有个界面的么,界面左上角有个菜单,点下就安装成 windows 服务了啊,没有更简单的了吧
    CodeXx
        21
    CodeXx   57 天前
    @Firxiao 试过了,start /b 启动一样的,会在任务结束后杀死进程
    CodeXx
        22
    CodeXx   57 天前
    @fonlan 我以为是说把要部署的 jar 包搞成 Windows 服务来启动。Jenkins 作为 Windows 服务后可以解决这个问题吗?我去试下
    qweznmadmin
        23
    qweznmadmin   56 天前
    @CodeXx 你这个问题是 jenkins 默认会在构建完成后杀死构建过程中由 jenkins 中的 shell 命令触发的衍生进程
    可以考虑关闭这个功能。
    话说你怎么解决下次部署的时候自动关闭程序。我是直接用 c#嵌套解决
    mmdsun
        24
    mmdsun   56 天前 via Android
    启动外部.bat 即可。Jenkins 有个配置可以不杀死启动进程
    mmdsun
        25
    mmdsun   56 天前 via Android
    BUILD_ID=dontKillMe /linedata/home/jenkins/auto_build.bat
    CodeXx
        26
    CodeXx   55 天前
    @mmdsun 这样启动提示:'BUILD_ID' 不是内部或外部命令,也不是可运行的程序或批处理文件。
    CodeXx
        27
    CodeXx   55 天前
    @qweznmadmin 用的是 batch 脚本,启动 Jenkins 的时候加了这个参数
    java -Dhudson.util.ProcessTree.disable=true -jar D:\Jenkins\jenkins.war
    但是没用。
    我现在的解决方案是把构建的超时时间设为 20s,超时后会断开 ssh,这样断开就不会杀死进程。然后又执行下一个服务器的操作,也算是实现了部署多台服务器了
    CodeXx
        28
    CodeXx   55 天前
    @mmdsun batch 应该是
    set BUILD_ID = dontKillMe
    xxx.bat
    不过也没用
    mmdsun
        29
    mmdsun   54 天前 via Android
    @CodeXx
    什么版本的?
    去 Windows batch command
    点击输入框下方的“可用环境变量”。

    jenkins 默认会在构建完成后杀掉构建过程中又 jenkins 中 shell 命令触发的衍生进程。jenkins 根据 BUILD_ID 识别某个进程是否为构建过程的衍生进程,故修改 BUILD_ID 后,jenkins 就无法识别是否为衍生进程,则此进程能在后台保留运行。
    CodeXx
        30
    CodeXx   54 天前
    @mmdsun 官网最新的 war 包,在“可用环境变量”里有 BUILD_ID
    CodeXx
        31
    CodeXx   54 天前
    @mmdsun 我的构建不是用的 Execute Windows batch command,我用的 Send File or excute commands over SSH
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4411 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 37ms · UTC 03:27 · PVG 11:27 · LAX 19:27 · JFK 22:27
    ♥ Do have faith in what you're doing.