如何用Ansible为Chocolatey实现Windows应用离线部署?
离线部署Notepad++到Windows客户端(Ansible+Chocolatey方案)
核心流程很清晰:先用Ansible把本地的Notepad++安装包推到Windows客户端,再通过Chocolatey(或直接静默执行安装程序)完成离线安装。下面分两种常用方案讲解,附直接可用的Playbook。
前期准备
- 把要用来安装的Notepad++离线exe(比如
npp.8.5.8.Installer.exe)放到Ansible服务器的files/目录下(这是Ansible默认读取本地文件的路径,也可自行指定) - 确认Windows客户端已安装Chocolatey(你提到客户端运行Chocolatey,这里默认已完成配置)
方案一:直接推送exe静默安装(快速实现)
这种方式无需额外制作Chocolatey包,直接利用安装程序的静默参数完成安装,还可通过Chocolatey验证安装状态(可选)
--- - name: 离线安装Notepad++到Windows客户端 hosts: windows_clients # 替换为你的Windows客户端组名 gather_facts: yes tasks: - name: 推送Notepad++安装包到客户端临时目录 win_copy: src: files/npp.8.5.8.Installer.exe dest: C:\temp\npp_installer.exe force: yes # 覆盖已存在的旧安装包 - name: 静默安装Notepad++ win_shell: C:\temp\npp_installer.exe /S args: executable: cmd register: install_output changed_when: install_output.rc == 0 # 通过返回码判断安装是否成功 - name: 用Chocolatey确认安装状态(可选) win_chocolatey: name: notepadplusplus state: present ignore_errors: yes # 离线环境下未配置Chocolatey本地源会报错,故忽略
方案二:自定义Chocolatey包安装(规范管理)
如果需要用Chocolatey统一管理软件的安装、升级、卸载,可先制作自定义离线Chocolatey包,再推送到客户端安装。
第一步:在Ansible服务器创建自定义Chocolatey包
- 搭建目录结构:
notepadplusplus-local/ ├── tools/ │ ├── chocolateyinstall.ps1 │ └── npp.8.5.8.Installer.exe # 将你的安装exe放入此目录 └── notepadplusplus-local.nuspec
- 编写
chocolateyinstall.ps1脚本:
$installerPath = Join-Path $toolsDir "npp.8.5.8.Installer.exe" $silentArgs = "/S" Install-ChocolateyInstallPackage ` -PackageName 'notepadplusplus-local' ` -FileType 'exe' ` -SilentArgs "$silentArgs" ` -File "$installerPath"
- 编写
notepadplusplus-local.nuspec配置文件:
<?xml version="1.0"?> <package xmlns="http://schemas.microsoft.com/packaging/2015/06/nuspec.xsd"> <metadata> <id>notepadplusplus-local</id> <version>8.5.8</version> <title>Notepad++ (Offline)</title> <authors>Notepad++ Team</authors> <owners>Your Team</owners> <summary>Offline install of Notepad++</summary> <description>Offline deployment of Notepad++ via custom Chocolatey package</description> <tags>notepad++ text-editor offline</tags> </metadata> <files> <file src="tools\*" target="tools" /> </files> </package>
- 打包成nupkg:在该目录下运行
choco pack(需Ansible服务器已安装Chocolatey),生成notepadplusplus-local.8.5.8.nupkg
第二步:用Ansible推送并安装自定义包
--- - name: 用自定义Chocolatey包离线安装Notepad++ hosts: windows_clients gather_facts: yes tasks: - name: 创建客户端临时目录(若不存在) win_file: path: C:\temp state: directory - name: 推送自定义Chocolatey包到客户端 win_copy: src: notepadplusplus-local.8.5.8.nupkg dest: C:\temp\notepadplusplus-local.8.5.8.nupkg force: yes - name: 安装本地Chocolatey包 win_chocolatey: name: notepadplusplus-local state: present source: C:\temp\ # 指定本地nupkg所在目录作为Chocolatey源
关键注意事项
win_copy是Ansible向Windows传输文件的核心模块,force: yes确保新安装包覆盖旧文件- 不同软件的静默安装参数不同,Notepad++为
/S,其他软件可能是/quiet、/qn,需提前确认 - 使用自定义Chocolatey包后,可直接通过
win_chocolatey模块完成卸载、升级操作,更适合企业级管理 - 若客户端
C:\temp目录不存在,必须先通过win_file模块创建,否则推送文件会失败
内容的提问来源于stack exchange,提问作者arrowSpace
相关产品推荐
相关产品推荐

