Jenkins流水线步骤发生在主机而不是从机上

bfhwhh0e  于 2023-01-04  发布在  Jenkins
关注(0)|答案(3)|浏览(162)

我正在开始使用Jenkins Pipeline。我的Pipeline有一个简单的步骤,应该在不同的代理上运行-比如“限制此项目可以运行的位置”选项。
我的问题是它在master上运行。
它们都是Windows计算机。
下面是我的Jenkinsfile

pipeline {
  agent {label 'myLabel'}
  stages {
    stage('Stage 1') {
      steps {
        echo pwd()
        writeFile(file: 'test.txt', text: 'Hello, World!')
      }
    }
  }
}

pwd()打印C:\Jenkins\workspace\<pipeline-name>_<branch-name>-Q762JIVOIJUFQ7LFSVKZOY5LVEW5D3TLHZX3UDJU5FWYJSNVGV4Q
此文件夹位于主控文件夹上。test.txt文件的存在证实了这一点。
我期望在从属代理上创建test.txt

注1

我可以确认管道找到了代理,因为日志包含:

[Pipeline] node
Running on MyAgent in C:\Jenkins\workspace\<pipeline-name>_<branch-name>-Q762JIVOIJUFQ7LFSVKZOY5LVEW5D3TLHZX3UDJU5FWYJSNVGV4Q

但是MyAgent上不存在此文件夹,这似乎与问题有关。

注2

这个问题类似于Jenkins pipeline not honoring agent specification,只是我没有使用build指令,所以我认为答案不适用。

注解3

pipeline {
  agent any
  stages {
    stage('Stage 1') {
      steps {
        echo "${env.NODE_NAME}"
      }
    }
    stage('Stage 2') {
      agent {label 'MyLabel'}
      steps {
          echo "${env.NODE_NAME}"
      }
    }
  }
}

这将打印预期输出-masterMyAgent。如果这是正确的,那么为什么工作区位于master上的不同文件夹中,而不是MyAgent上的文件夹中?

hujrc8aj

hujrc8aj1#

下面是一个示例

pipeline {
  agent none

    stages {
        stage('Example Build') {
            agent { label 'build-label' }
            steps {
                sh 'env'
                sh ' sleep 8'
            }
        }
        stage('Example Test') {
            agent { label 'deploy-label' }
            steps {
                sh 'env'
                sh ' sleep 5'
            }
        }
    }
}
brtdzjyr

brtdzjyr2#

我遇到了类似的问题,以下管道代码对我很有效(iidoEe.文件在Windows从机而不是Windows主机上创建),

pipeline {
    agent none
    stages {
        stage("Stage 1") {
            steps {
                node('myLabel'){
                    script {
                        writeFile(file: 'test.txt', text: 'Hello World!', encoding: 'UTF-8')
                    }
                    // This should print the file content on slave (Hello World!)
                    bat "type test.txt"
                }
            }
        }
    }
}
cnjp1d6j

cnjp1d6j3#

我正在调试一个完全不相关的问题,这个事实就摆在我面前,显然管道是在内置节点(以前称为主节点)中处理的,步骤被转发到代理。
因此,即使echo运行在代理上,但pwd()将运行在内置节点上。您可以执行sh 'pwd'以获取代理上的路径。

相关问题