我有一个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脚本