powershell - 在 CircleCI orb 内的作业中的 PowerShell 步骤中使用环境变量
问题描述
在我的 CircleCI 脚本中,我有几个作业正在执行一个使用一些环境变量和一些静态参数的 PowerShell 脚本。
jobs:
promote_to_staging:
docker:
- image: mcr.microsoft.com/powershell
steps:
- run:
name: Install tools
shell: pwsh
command: |
Install-Module -Name AWS.Tools.Installer -Force
Install-AWSToolsModule AWS.Tools.ECR -Force -CleanUp
- run:
name: Tag images
shell: pwsh
command: |
Set-DefaultAWSRegion -Region $env:AWS_DEFAULT_REGION
foreach ($repo in Get-ECRRepository)
{
$Image = Get-ECRImageBatch -ImageId @{ imageTag = $env:CIRCLE_SHA1 } -RepositoryName $repo.RepositoryName
$Manifest = $Image.Images[0].ImageManifest
Write-ECRImage -RepositoryName $repo.RepositoryName -ImageManifest $Manifest -ImageTag "staging" | Out-Null
Write-ECRImage -RepositoryName $repo.RepositoryName -ImageManifest $Manifest -ImageTag $env:CIRCLE_TAG | Out-Null
}
一切都按预期工作。
为了 DRYfy 脚本,我决定在一个球体的参数化作业中提取所述作业。
orbs:
services:
jobs:
promote:
docker:
- image: mcr.microsoft.com/powershell
parameters:
stage_tag:
type: string
steps:
- run:
name: Install tools
shell: pwsh
command: |
Install-Module -Name AWS.Tools.Installer -Force
Install-AWSToolsModule AWS.Tools.ECR -Force -CleanUp
- run:
name: Tag images
shell: pwsh
command: |
Set-DefaultAWSRegion -Region $env:AWS_DEFAULT_REGION
foreach ($repo in Get-ECRRepository)
{
$Image = Get-ECRImageBatch -ImageId @{ imageTag = $env:CIRCLE_SHA1 } -RepositoryName $repo.RepositoryName
$Manifest = $Image.Images[0].ImageManifest
Write-ECRImage -RepositoryName $repo.RepositoryName -ImageManifest $Manifest -ImageTag "<< parameters.stage_tag >>" | Out-Null
Write-ECRImage -RepositoryName $repo.RepositoryName -ImageManifest $Manifest -ImageTag $env:CIRCLE_TAG | Out-Null
}
这就是我在球体中消费工作的方式
release:
jobs:
- services/promote:
name: promote_to_staging
stage_tag: staging
context:
- AWS_CI
filters:
branches:
ignore: /.*/
tags:
only: <<omitted for brevity>>
不幸的是,orb 作业没有按预期工作。
这是我得到的输出:
#!pwsh
Set-DefaultAWSRegion -Region $env:AWS_DEFAULT_REGION
foreach ($repo in Get-ECRRepository)
{
$Image = Get-ECRImageBatch -ImageId @{ imageTag = $env:CIRCLE_SHA1 } -RepositoryName $repo.RepositoryName
$Manifest = $Image.Images[0].ImageManifest
Write-ECRImage -RepositoryName $repo.RepositoryName -ImageManifest $Manifest -ImageTag "staging" | Out-Null
Write-ECRImage -RepositoryName $repo.RepositoryName -ImageManifest $Manifest -ImageTag $env:CIRCLE_TAG | Out-Null
}
WARNING: You are passing $null as a value for parameter ImageManifest which is marked as required. In case you believe this parameter was incorrectly marked as required, report this by opening an issue at https://github.com/aws/aws-tools-for-powershell/issues.
Write-ECRImage:
Line |
7 | Write-ECRImage -RepositoryName $repo.RepositoryName -ImageManifes …
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| Invalid parameter at 'imageManifest' failed to satisfy constraint: 'Member must not be null'
WARNING: You are passing $null as a value for parameter ImageManifest which is marked as required. In case you believe this parameter was incorrectly marked as required, report this by opening an issue at https://github.com/aws/aws-tools-for-powershell/issues.
Write-ECRImage:
Line |
8 | Write-ECRImage -RepositoryName $repo.RepositoryName -ImageManifes …
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| Invalid parameter at 'imageManifest' failed to satisfy constraint: 'Member must not be null'
WARNING: You are passing $null as a value for parameter ImageManifest which is marked as required. In case you believe this parameter was incorrectly marked as required, report this by opening an issue at https://github.com/aws/aws-tools-for-powershell/issues.
我已经尝试替换$env:CIRCLE_SHA1
为$CIRCLE_SHA1
但${CIRCLE_SHA1}
没有帮助。
欢迎任何帮助!
解决方案
推荐阅读
- c++ - 在树莓派上找不到 QtSerialPort/QSerialPort 和 QSerialPort
- excel - GNUplot:有没有一种方法可以用 gnuplot 从 excel 电子表格中绘制数据?
- python - Django:自动保存外键字段
- python - 在不同维度的两个数据框之间插入和匹配缺失值
- oracle - 长度为 39 位的 Oracle 数字列的 Hive 数据类型
- amazon-s3 - 为什么 s3 不能与 proxy_set_header 主机 $http_host 一起使用;在 Nginx 中?
- javascript - 期中考试要求我从 XML 文档中生成“国家”的计数和“联系人标题”的计数
- android - Android 项目在物理设备上运行良好,但在由 google playstore prelease/robotest 运行时失败
- python - 选择具有最小连续计数的随机索引子集
- flutter - SystemChrome SystemUIMode 有没有办法始终显示顶部状态栏但具有沉浸式粘性底部?