如何在GitHub Actions工作流中强制Packer使用Azure客户端密钥

76次阅读
没有评论

问题描述

在GitHub Actions工作流中使用Packer时,希望强制Packer使用Azure客户端密钥。他已经将Azure服务主体凭据存储为GitHub仓库的secrets。他可以在本地使用相同的凭据成功构建镜像,但在GitHub工作流中,Packer尝试使用托管标识而不是服务主体,并且失败并显示错误消息。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

在Packer模板中声明变量,并在调用packer build命令时使用-var参数来设置这些变量。以下是解决方案的步骤:
1. 打开Packer模板文件(通常是一个JSON文件)。
2. 在模板文件中的variables部分声明需要的变量。
3. 在builders部分的相应位置使用这些变量。
下面是一个示例Packer模板文件:

{
  "variables": {
    "azure_cd": "{{env `azure_cd`}}",
    "azure_ct": "{{env `azure_ct`}}",
    "azure_td": "{{env `azure_td`}}",
    "azure_sd": "{{env `azure_sd`}}"
  },
  "builders": [
    {
      "type": "azure-arm",
      // 使用变量azure_cd、azure_ct等
    }
  ]
}

在上面的示例中,我们在variables部分声明了四个变量azure_cdazure_ctazure_tdazure_sd。然后,在builders部分的相应位置使用了这些变量。这将确保Packer在构建过程中使用正确的Azure客户端密钥。
请注意,这个解决方案假设你已经将Azure客户端密钥存储在GitHub仓库的secrets中,并且可以通过环境变量访问它们。如果你还没有设置这些secrets,请按照GitHub文档的指导进行设置。

方案2

将JSON模板转换为HCL可能需要一些额外的工作,具体取决于你使用的工具和版本。
如果你想将JSON模板转换为HCL格式,你可以使用一些工具或脚本来帮助你完成。具体的转换过程可能因你使用的工具和版本而有所不同,所以你需要根据自己的情况进行调整。
以下是一个示例bash脚本,可以将Packer的JSON模板转换为HCL格式:

#!/bin/bash
# 安装 packer2hcl 工具
go get github.com/minamijoyo/packer2hcl/cmd/packer2hcl
# 将 JSON 模板转换为 HCL 格式
packer2hcl -template=foo.json > foo.hcl

在这个示例中,我们首先使用go get命令安装了packer2hcl工具。然后,我们使用packer2hcl命令将JSON模板转换为HCL格式,并将输出保存到foo.hcl文件中。
请注意,这个示例假设你已经安装了Go语言环境,并且可以访问go get命令。如果你没有安装Go语言环境,你需要根据你的操作系统和版本安装Go语言环境,并确保go get命令可用。

正文完