【问题标题】:Jenkins Shared Library script on Jenkins Agent nodesJenkins 代理节点上的 Jenkins 共享库脚本
【发布时间】:2021-07-13 01:03:32
【问题描述】:

我注意到JSL 脚本只能在 Jenkins Master 上执行,是否可以在 Jenkins 代理上运行 JSL 脚本?

我的流水线中有多个阶段,我希望在不同的 Jenkins 代理节点上运行这些阶段。

我使用 JSL 的主要动机是 end-to-end Pipeline testability 在开发过程中使用“重放”,我可以在其中修改 Jenkinsfile 以及来自 JSL 的脚本。

这是我的管道的 sn-p --

pipeline {
   agent { label 'scdc-generic-w10x64' }
   options {
      timestamps()
   }
   stages {
      stage('Log ip') {
        steps {
            script {
               bat "ipconfig -all"   // *** Gets executed on Jenkins Agent ***
               foo = jsl.foo.new(this) // foo is a Groovy class in JSL
               foo.logIpAddress()   // *** Gets executed on Jenkins Master ***
            }
         }
      }
   }
   post {
      always {
         cleanWs()
      }
   }
}

【问题讨论】:

    标签: jenkins jenkins-pipeline jenkins-shared-libraries


    【解决方案1】:

    是的,您可以使用agent{label <Your agent name>} 在不同的代理上执行不同的阶段。您还需要确保您的共享库也存在于代理中。
    注意:在那个阶段,一切都将在那个代理上执行

    stage('Log ip') {
    agent { label "<Your agent name>" }
            steps {
                script {
                   bat "ipconfig -all"  
                   foo = jsl.foo.new(this) 
                   foo.logIpAddress()   
                }
             }
          }
    

    【讨论】:

    • 这可能具有误导性。从技术上讲,Pipeline 脚本本身总是在主节点上执行。但是有些步骤实际上是在代理上执行一个动作,例如batshreadFile、...这就是为什么你的脚本不应该尝试使用 Groovy API 在代理上读取或写入文件,而是使用内置函数readFilewriteFile,例如
    • @Altaf,我尝试在舞台上提及代理,但没有帮助。
    • 谢谢,@PatriceM。!我是否需要使用 writeFile 在代理节点上编写脚本然后执行它们?这是唯一的方法吗?
    • @Raviraj 我提供了一种可能性,您可以在代理上执行阶段。当然您可以编写文件/读取文件操作来满足您的需求
    【解决方案2】:

    我也在 JenkinsUser 谷歌组上发布了这个问题。 JSL 脚本仅在 Jenkins Master 上执行,这是设计使然。

    更多详情 -- https://groups.google.com/g/jenkinsci-users/c/t66PLaAvcgw/m/Ruo97K2AAgAJ

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 2018-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多