Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Tip

请在使用站内资源的同时不要恶意进行爬取或倒链等行为,感谢支持!

Note

相关文档:

UI Button
colorblue
newWindowtrue
sizesmall
displayblock
iconlink
title链接

Info
iconfalse

Table of Contents

Ansible Windows Java Application

在远程 Windows 上启动 Jenkins.war 示例。

让 jenkins.war 在后台启动,可以执行批处理命令:(需要安装 JDK)

Code Block
languagebash
$ start /min java -jar D:\jenkins.war

命令放入脚本,放置不必要的错误:

Code Block
languagebash
titleD:\start.bat
start /min java -jar D:\jenkins.war

可执行 ansible 命令进行调用:

Code Block
languagebash
$ ansible windows_test -m raw -a "D:\start.bat" 
Info

此时可能会卡很久,通常会写入到 ansible-playbook 中添加 async 参数设置执行时间上限。

设置停止脚本:

Code Block
languagebash
titleD:\stop.ps1
$jps_object = C:\"Program Files"\Java\jdk1.8.0_201\bin\jps | findstr "jenkins"
$java_pid = $jps_object.split()[0]
taskkill /F /pid $java_pid

可执行命令:

Code Block
languagebash
$ ansible windows_test -m raw -a "D:\stop.ps1"

写为 ansible-playbook 可执行为:

Code Block
languagebash
titledemo.yml
---
- hosts: windows_test
   
  tasks:
     - name: stop service
       win_command: powershell D:\stop.ps1

     - name: start service
       win_command: powershell.exe D:\start.bat
       async: 15
       ignore_errors: true

执行命令为:

Code Block
languagebash
$ ansible-playbook demo.yaml 

PLAY [windows_test] ***********************************************************************************************************************************************************************************************************************************

TASK [Gathering Facts] ********************************************************************************************************************************************************************************************************************************
ok: [10.31.129.16]

TASK [stop service] ***********************************************************************************************************************************************************************************************************************************
changed: [10.31.129.16]

TASK [start service] **********************************************************************************************************************************************************************************************************************************
fatal: [10.31.129.16]: FAILED! => {"ansible_async_watchdog_pid": 8000, "ansible_job_id": "49468985171.7680", "changed": false, "finished": 1, "msg": "timed out waiting for module completion", "results_file": "C:\\Users\\Administrator\\AppData\\Local\\.ansible_async\\49468985171.7680", "started": 1}
...ignoring

PLAY RECAP ********************************************************************************************************************************************************************************************************************************************
10.31.129.16               : ok=3    changed=1    unreachable=0    failed=0   

如果执行超时可设置 ignore_errors 对错误进行忽略,此时即可正常完成执行的命令。并且服务也在远端成功启动。

Warning

注意有个大坑,当直接在 Powershell 中执行 start.bat 时,如果让 Ansible 去执行 stop.ps1 实际上是无法执行的,因为 Ansible 使用的是 Administrator 用户,而 Powershell 直接执行使用的是 System 用户,所以使用 jps 是无法找到其他用户启动的进程的。

Log

但此类方法并没有输出日志,只能在屏幕上滚动进程窗口,如果需要,可以已定义启动脚本如下:(需要用 Windows 编辑器打开并保存否则在 Linxu 或 MacOS 中保存的文件文件格式会报错)

Code Block
languagebash
titleD:\start.bat
@echo off
set logName=jenkins_
set logTime=%date:~0,4%%date:~5,2%%date:~8,2%%time:~1,1%%time:~3,2%%time:~6,2%
set logSuffix=.log
set logPath=D:\
set logFullName=%logPath%%logName%%logTime%%logSuffix%

echo Log Output To: %logFullName%
start /MIN /B java -jar D:\jenkins.war >> %logFullName% 2>&1

或使用如下方式进行格式转换:

Code Block
languagebash
$ unix2dos start.bat

日志输出格式如下:

Code Block
languagebash
jenkins_2019050854116.log

Backup

如果需要覆盖应用之前先进行备份,则可以使用以下脚本:

Code Block
languagebash
@echo off
set rq=%date:~0,4%%date:~5,2%%date:~8,2%%time:~1,1%%time:~3,2%%time:~6,2%
set projectPath=D:\Web\Dev\ManageCommissionJob
mkdir %projectPath%\backup\%rq%
SETLOCAL ENABLEDELAYEDEXPANSION

set fileName=comm_job_test.jar
set sourceFilePath=%projectPath%\!fileName!
set backupFilePath=%projectPath%\backup\%rq%\!fileName!

echo "echo F|xcopy !backupFilePath! !sourceFilePath!" >> %projectPath%\backup\%rq%\rollback.bat
move !sourceFilePath! !backupFilePath!

文档创建于 最后一次更新于 08  , 文档当前的状态 

Status
colourGreen
title正式版
 , 当前编写页面的版本 
Status
colourBlue
titlev1.3.1
 。