需要通过 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进阶-Slave节点配置(16)

Jenkins Master-Slave 架构

Jenkins for Kubernetes实现Slave动态伸缩

Jenkins for Kubernetes实现Slave动态伸缩

jenkins​通过slave方式在windows上执行命令(或批处理)

jenkins的slave/agent如何通过tcp端口和master建立连接