从Jenkins管道中的文件运行Powershell脚本

时间:2017-10-13 09:30:50

标签: powershell jenkins jenkins-pipeline

我正在尝试从Jenkins管道中的文件运行Powershell脚本。

我已阅读this,其中显示了如何运行输入管道的PowerShell脚本,但我无法从文件中运行脚本。

我试过了:

powershell returnStatus: true, script: '-File build.ps1'

和各种组合,但无法弄清楚如何做到这一点。

2 个答案:

答案 0 :(得分:16)

不久之后想出来,该行应该已经读过了

powershell returnStatus: true, script: '.\\build.ps1'

答案 1 :(得分:1)

@bic的答案很好,对我有很大帮助。如果您需要传递变量而又不想在脚本中使用环境变量 ,那么我发现的最好方法是使用两层(声明性语法):

writeFile file: 'tempFile.ps1', text: "${libraryResource 'psScript1.ps1'}"
powershell './tempFile.ps1 -someArg $env:someArg'

因此,您正在将一个包含脚本内容的临时文件写入本地目录。然后,您直接使用powershell调用脚本,并将vars注入到调用中。

我同意在脚本中使用环境变量会更方便。您必须牢记一些模式:

    在运行期间,不能更改在顶级environment块中设置的
  1. 环境变量。 (至少这是我的经验。)
  2. 环境变量只能 是字符串。您可以玩一些技巧来使地图正常工作,但这是技巧。
  3. 如果要设置在整个管道范围内可更改的环境变量,则必须一步一步在script块中进行操作。我通常在('init')阶段将它们全部设置好。然后,您应该能够在管道中的任何地方使用 并修改这些var,以及从其衍生的任何子脚本。如果您有很多env var,我建议将它们旁路到外部groovy库中。
    pipeline {
       ...
       stage('init') {
         steps {
           script {
             env.myVariable = 'some value'
           }
         }
       }
      ...
    
  4. 您还可以将作用域设置为仅适用于该阶段。根据我的经验,在进入实际步骤块之前不会对它们进行评估-即,在when条件评估期间不会设置它们。同样,仅凭我的经验,我可能是错的。
    stage('A') {
      environment {
        stageEnvVar = 'another value'
      }
      steps {
        ...
      }
    }
    

这是我在Jenkins env vars上找到的最佳参考:https://e.printstacktrace.blog/jenkins-pipeline-environment-variables-the-definitive-guide/