如何将jenkinsfile参数传递给powershell脚本



我有一个jenkinsfile,我正在设置一个参数,并希望在另一个powershell脚本中使用它。

这是我的jenkinsfile
parameters {
choice( name: 'DeploymentEnvironment',choices: "NonenDevnQAnProd",description: 'Deployment Choice')
}
stage('Publishing to S3') {
steps {
withCredentials() {
echo "${params.DeploymentEnvironment}"
powershell(". '.\packages.ps1' ${params.DeploymentEnvironment}")
}
}
}
echo "${params.DeploymentEnvironment}" = QA

我的packages.ps1脚本

...
Write-Output $DeploymentEnvironment
Write-Output $env.DeploymentEnvironment
Write-Output $env:DeploymentEnvironment
Write-Output ($params.DeploymentEnvironment)
...

我无法在packages.ps1中获得DeploymentEnvironment=QA。上面每个Write-Output命令都不打印任何东西。

如何在packages.ps1脚本中传递和使用Jenkinsfile中声明的DeploymentEnvironment变量

谢谢。

您需要将您的输入参数作为环境参数传递给PowerShell运行时环境,最简单的方法是使用environment指令,这是声明性管道语法的一部分,它设置参数(除了默认参数外),这些参数将作为环境变量加载到PowerShell(或cmd)执行环境中。
environment指令可用于pipeline级或stage级。
你可以这样写:

parameters {
choice( name: 'DeploymentEnvironment',choices: ['None', 'Dev', 'QA', 'Prod' ,description: 'Deployment Choice')
}
stage('Publishing to S3') {
environment {
DEPLOYMENT_ENVIRONMENT = "${params.DeploymentEnvironment}"
}
steps {
withCredentials() {
echo DEPLOYMENT_ENVIRONMENT
powershell(". '.\packages.ps1'") 
// DEPLOYMENT_ENVIRONMENT will be available as an environment parameter to the powershell script
}
}
}

然后在你的powershell脚本中使用DEPLOYMENT_ENVIRONMENT参数。

另一种方法是修改powershell脚本以接收参数,并像现在这样传递参数。
顺便说一句,如果你只发布东西到s3,你可以使用Pipeline: AWS Steps插件来完成这项任务,避免使用powershell脚本

最新更新