我可以在 Jenkins 中使用脚本化管道指定节点吗?

ein*_*rne 4 jenkins jenkins-pipeline

\xef\xbc\xa9注意到 Jenkins 管道文件 -- Jenkinsfile 有两种语法

\n\n
    \n
  • 声明式
  • \n
  • 脚本化
  • \n
\n\n

我已经使声明性脚本可以指定节点来运行我的任务。但是我不知道如何将我的脚本修改为脚本语法。

\n\n

我的声明性脚本

\n\n
pipeline {\n    agent none\n\n    stages {\n        stage('Build') {\n            agent { label 'my-label\xe2\x80\x8b' }\n            steps {\n                echo 'Building..'\n                sh '''\n\n                '''\n            }\n        }\n        stage('Test') {\n            agent { label 'my-label\xe2\x80\x8b' }\n            steps {\n                echo 'Testing..'\n                sh '''\n\n                '''\n            }\n        }\n        stage('Deploy') {\n            agent { label 'my-label\xe2\x80\x8b' }\n            steps {\n                echo 'Deploying....'\n                sh '''\n\n                '''\n            }\n        }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我尝试过以这种方式使用:

\n\n
node('my-label') {\n  stage 'SCM'\n  git xxxx\n\n  stage 'Build'\n  sh ''' '''\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

但 Jenkins 似乎找不到我要运行的节点。

\n

unc*_*all 6

这个简单的例子怎么样?

stage("one") {
    node("linux") {
        echo "One"
    }
}
stage("two") {
    node("linux") {
        echo "two"
    }
}
stage("three") {
    node("linux") {
        echo "three"
    }
}
Run Code Online (Sandbox Code Playgroud)

或者下面的答案,这样,如果有多个节点具有相同的标签并且运行被另一个作业中断,则可以保证阶段在同一节点上运行。上面的示例将在每个阶段后释放节点,下面的示例将在所有三个阶段保留节点。

node("linux") {
    stage("one") {
        echo "One"
    }
    stage("two") {
        echo "two"
    }
    stage("three") {
        echo "three"
    }
}
Run Code Online (Sandbox Code Playgroud)