需要通过 jenkins slave(Windows)上的浏览器窗口上传文件,但文件在 jenkins master(linux)上
Posted
技术标签:
【中文标题】需要通过 jenkins slave(Windows)上的浏览器窗口上传文件,但文件在 jenkins master(linux)上【英文标题】:Need to upload file through browser window on jenkins slave (Windows) but file is on jenkins master (linux) 【发布时间】:2018-12-21 05:21:37 【问题描述】:Jenkins 大师 - Linux 詹金斯奴隶 - Windows Jenkins 触发在 Windows slave 上运行的 selenium 脚本并执行所需的测试。测试流程如下。 步骤 1- 它生成一个文件并将其存储在项目工作区中。文件存储在主节点(Linux)上的 Jenkins 工作区中。 第 2 步 - 在从站 (Windows) 上,脚本正在打开应用程序和浏览器上传窗口以上传存储在 Jenkins 工作区中的文件。 第 3 步 - AutoIt 用于自动执行“文件上传”部分。在上传窗口中输入文件路径。 第 4 步 - 现在,当尝试获取 jenkins master 上的文件时,文件路径作为 linux 路径出现,这在浏览器上传窗口中不起作用。因为它只接受windows操作系统的文件路径格式。
尝试过的选项 - 1.尝试使用“复制保存”插件,但它在构建结束时复制文件。但要求是它必须在运行时获取文件并上传。 2. 尝试创建一个文件夹/文件,提供 Windows 路径以查看,如果它在 Windows 上创建该文件夹或文件,但它仅在 Jenkins 主服务器上创建。例如 "C:\temp" 在 linux 上被创建为一个目录。 3. 在 Windows 节点上打开 jenkins 并从那里触发 scipt。没有影响。 4. 想过用Winscp脚本将文件从linux传输到windows,但如果在运行时无法通过代码访问slave(window OS)的文件夹/文件,就没有用了。
Q1 - 尽管脚本是通过 Jenkins master 触发的,但有什么方法可以在运行时访问 slave 的文件夹/文件内存以保存/获取文件? Q2 - 是否有任何控制机制,该文件可以存储在 jenkins 工作区之外?
【问题讨论】:
虽然可能不直接适用,但您可能想看看这个:sqa.stackexchange.com/questions/12851 - 这允许您使 Selenium 将文件从运行测试的机器传输到机器上的临时位置协调浏览器。 Selenium 输入的路径随后会在 windows 机器上更改为临时路径。 【参考方案1】:您可以尝试如下构建管道:
pipeline
agent label 'master'
stages
stage('Some Stage')
steps
// This will create temporary zip of files for current build from master
stash includes: 'your/folder/path/pattern', name : 'tempName'
stage('Run node server')
agent label 'slave name'
steps
// unzip the files which are zipped previously
unstash 'tempName'
注意每个阶段的代理标签将是您已经设置的代理标签。
请参阅this 文档了解更多信息
【讨论】:
以上是关于需要通过 jenkins slave(Windows)上的浏览器窗口上传文件,但文件在 jenkins master(linux)上的主要内容,如果未能解决你的问题,请参考以下文章
Jenkins for Kubernetes实现Slave动态伸缩
Jenkins for Kubernetes实现Slave动态伸缩