【问题标题】:When I use a Jenkinsbuild file in Jenkins to run a shell script, does it execute on master or slave?当我在 Jenkins 中使用 Jenkinsbuild 文件运行 shell 脚本时,它是在主服务器还是从服务器上执行?
【发布时间】:2018-06-19 22:50:12
【问题描述】:

我很困惑。我已经设置了詹金斯。我已经设置了一个主节点和一个从节点。我的 git repo 中有一个 Jenkinsbuild 文件,它由管道作业执行。在 Jenkinsbuild 文件中,我有这样的行:

 sh "docker build -t cd-demo ."

这是在哪里执行的?这是发生在主服务器还是从服务器上?

如果我写了一个Python脚本,我想把它作为一个shell脚本来调用,我需要把Python脚本放在master上还是slave上?

更重要的是:如果我想将构建的 Docker 映像推送到 ECS,哪台机器需要拥有 AWS 凭证,主服务器还是从服务器?

【问题讨论】:

    标签: python jenkins


    【解决方案1】:

    如果你的主人有执行者,它将是为它服务的人。如果您碰巧定义了 Elias22 回答的标签,它将在包含此类标签的最少使用节点上运行(您必须在从属设备上设置标签才能使其工作)。

    关于凭据,这些应保存在主服务器上。有一个用于 aws 凭据的插件。主人总是负责保密

    如果您使用 Cloudbees 的 aws 凭证插件并将 Jenkinsfile 与管道一起使用,您可以在管道中使用以下内容。考虑到您必须首先在 jenkins/credentials 上设置凭据。

    node{ 
     label 'buildSlaveLabel'
    }
    stage("Im pushing docker image at this stage")
    {
        withAWS(credentials:'TheNameYouSetUnderCredentialsInJenkins') {
            sh "docker-push.sh"
        }
    }
    

    这类似于节点对凭据的任何其他使用,例如 SCM (git , svn) 或其他凭据使用。

    将其提供给节点是主要责任。

    但是,您始终可以允许节点将其 aws 凭据放在任何使用从站的任何人都可以访问的地方。 (我强烈建议不要这样做,因为没有理由这样做)

    【讨论】:

      【解决方案2】:

      它将在 Jenkins 认为目前最好的节点上运行。

      但是您可以通过以下代码在您的 groovy 代码中定义单个步骤或整个管道应该在哪个节点上运行:

              node{
              label '<node-name>'            
                   }
      

      如果你想运行 python-code,你必须把它放在你想运行该代码的每个节点上。

      【讨论】:

        猜你喜欢
        • 2011-06-15
        • 1970-01-01
        • 2012-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多