我开始使用Jenkins 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
。
我可以确认管道找到代理,因为日志包含:
[Pipeline] node
Running on MyAgent in C:\Jenkins\workspace\<pipeline-name>_<branch-name>-Q762JIVOIJUFQ7LFSVKZOY5LVEW5D3TLHZX3UDJU5FWYJSNVGV4Q
但是 MyAgent上不存在此文件夹,这似乎与问题有关。
此问题类似于Jenkins pipeline not honoring agent specification
,但我没有使用build
指令,因此我认为答案不适用。
pipeline {
agent any
stages {
stage('Stage 1') {
steps {
echo "${env.NODE_NAME}"
}
}
stage('Stage 2') {
agent {label 'MyLabel'}
steps {
echo "${env.NODE_NAME}"
}
}
}
}
这将打印预期输出 - master
和MyAgent
。如果这是正确的,那么为什么工作区位于master上的不同文件夹中而不是MyAgent上?
答案 0 :(得分:0)
这是一个例子
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'
}
}
}
}
答案 1 :(得分:0)
我遇到了类似的问题,并且以下管道代码对我有用(即,该文件是在Windows从属而不是Windows master上创建的),
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"
}
}
}
}
}