如何通过Ansible从Windows主机上传文件至Artifactory?
解决Windows主机通过Ansible执行curl上传Artifactory无文件的问题
修正后的Playbook
- name: Artifactory Interactions hosts: all tasks: - name: Upload files to Artifactory win_command: curl.exe args: argv: - -u - "{{ ct_username }}:{{ ct_password }}" - -T - "{{ item.file_path }}" - -k - --ssl-no-revoke - "{{ item.artifactory_path }}" with_items: '{{ my_dictionary }}' register: curl_output failed_when: curl_output.rc != 0 or '"status": "success"' not in curl_output.stdout - name: Show curl output for debugging debug: var: curl_output
问题排查与解决要点
用
argv拆分命令参数
原playbook把curl整行命令直接传入,Windows环境下Ansible解析时容易因为变量替换、特殊字符(比如密码里的@、!)导致参数混乱。改用argv数组形式,每个参数单独列出来,能确保参数被正确传递,避免解析错误。指定curl绝对路径(可选但推荐)
如果Windows主机的PATH环境变量没包含curl所在目录,或者Ansible执行环境的PATH配置不同,可能会找不到curl命令。可以把curl.exe改成绝对路径,比如C:\Windows\System32\curl.exe或C:\Program Files\curl\curl.exe,确保命令能被正常调用。捕获输出并校验执行结果
原playbook没捕获curl的执行输出,哪怕curl实际执行失败(比如返回非0码但被忽略),Ansible也会显示任务成功。通过register捕获输出,再用failed_when校验返回码和输出内容,能确保上传操作确实完成。保留证书相关参数
-k(跳过证书校验)和--ssl-no-revoke(禁用吊销检查)必须保留,你的环境中证书吊销服务器无法访问,这两个参数能绕过对应的SSL连接错误,确保curl能正常连接Artifactory。
调试步骤
如果修正后仍有问题,按以下步骤排查:
- 查看
debug任务输出的curl_output,检查stdout和stderr里的具体错误信息,比如认证失败、文件不存在、路径错误等。 - 在Windows目标主机上手动执行替换变量后的curl命令,确认命令本身是否能正常运行,排除Ansible参数传递的问题。
内容的提问来源于stack exchange,提问作者Bloke
相关产品推荐
相关产品推荐

