首页 > 解决方案 > 需要通过 jenkins slave(Windows)上的浏览器窗口上传文件,但文件在 jenkins master(linux)上

问题描述

Jenkins master - Linux Jenkins Slave - 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 工作区之外?

标签: javaseleniumjenkinsautoit

解决方案


您可以尝试如下构建管道:

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'
                }
            }
    }
}

请注意,每个阶段的代理标签将是您已经设置的代理标签。

有关更多信息,请参阅此文档


推荐阅读