packer(6)push packer artifact metadata to hcp packer registry
1. 启用 HCP Packer 注册表
- 登录您的 HCP 账户。
- 在左侧菜单中导航到 服务 (Services) 部分,选择 Packer。
- 如果注册表尚未启用,点击 创建注册表 (Create a registry) 进行设置。每个 HCP 项目只需执行一次。
注册账户
2. 创建服务主体进行认证
- 在 HCP 项目仪表板中,从左侧导航菜单进入 **访问控制 (IAM)**。
- 选择 服务主体 (Service principals) 选项卡,点击创建新服务主体(例如命名为 “packer”)。
- 为此服务主体分配 贡献者 (Contributor) 角色,以便其与 Packer 注册表交互。
- 创建完成后,进入该服务主体的 密钥 (Keys) 部分,点击 **生成密钥 (Generate key)**。
- 复制并保存 客户端 ID (Client ID) 和 **客户端密钥 (Client Secret)**。
这些凭据将用于认证,密钥生成后无法再次查看,一定要copy
1.访问控制 (IAM)
or
2.服务主体 (Service principals)
3.生成密钥 (Generate key)
3. 设置认证环境变量
- 在您的本地机器或构建环境中,使用上一步获得的客户端 ID 和密钥设置以下环境变量:
1
2export HCP_CLIENT_ID="您的客户端ID"
export HCP_CLIENT_SECRET="您的客户端密钥" - 可选:如果您的 HCP 组织有多个项目,设置 HCP_PROJECT_ID 指定目标项目:(项目 ID 可在 HCP 项目设置中找到。如果使用 Packer v1.9.1 或更高版本且组织有多个项目,此项为必需。)
1
export HCP_PROJECT_ID="您的项目ID"
1.查看项目配置
2.复制项目ID
4. 配置 Packer 以推送元数据
您可以通过 环境变量(适用于 JSON 和 HCL2 模板)或在 HCL2 模板中添加 hcp_packer_registry
块(推荐用于自定义)来推送元数据。选择以下任一方法:
选项 A:使用环境变量
- 设置存储元数据的 bucket 名称:
1
export HCP_PACKER_BUCKET_NAME="您的bucket名称"
- 如果该 bucket 不存在,HCP Packer 将创建它;如果存在,则添加新版本。
- (仅适用于 Packer v1.7.6 至 v1.8.3)显式启用注册表:
1
export HCP_PACKER_REGISTRY="ON"
- 此方法无需修改 Packer 模板。
选项 B:使用 HCL2 模板(推荐)
- 在 Packer HCL2 模板(例如
build.pkr.hcl
)中添加hcp_packer_registry
块。以下是示例:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24source "amazon-ebs" "example" {
ami_name = "packer-example-{{timestamp}}"
instance_type = "t2.micro"
region = "us-east-2"
source_ami = "ami-0c55b159cbfafe1f0" # 示例 Ubuntu AMI
ssh_username = "ubuntu"
}
build {
sources = ["source.amazon-ebs.example"]
hcp_packer_registry {
bucket_name = "我的packer-bucket"
description = "我的应用程序示例 AMI"
bucket_labels = {
"团队" = "运维"
"系统" = "ubuntu"
}
build_labels = {
"版本" = "1.0.0"
"日期" = "{{timestamp}}"
}
}
}bucket_name
:HCP Packer 注册表中存储元数据的 bucket 名称。description
:构建的简要描述(最多 255 个字符)。bucket_labels
:应用于整个 bucket 的自定义键值对。build_labels
:特定于此构建版本的自定义键值对。- 注意:
hcp_packer_registry
块需要 Packer v1.7.7 或更高版本。
1 | source "docker" "ubuntu-focal" { |
5. 验证前提条件
- 确保已安装 Packer(推荐 v1.7.7+ 支持 HCL2,v1.9.1+ 支持多项目)。
- 如果构建类似 AMI 的构件,配置云提供商凭据(例如 AWS)作为环境变量:
1
2export AWS_ACCESS_KEY_ID="您的访问密钥"
export AWS_SECRET_ACCESS_KEY="您的密钥"
6. 构建构件并推送元数据
- 使用您的模板运行 Packer 构建命令:
1
packer build build.pkr.hcl
- Packer 将:
- 构建构件(例如上述示例中的 AMI)。
- 将元数据(而非构件本身)推送到 HCP Packer 注册表中的指定 bucket。
- 查看输出以确认元数据推送,例如:
–> amazon-ebs.example: 已将元数据发布到 HCP Packer 注册表 packer/我的packer-bucket/版本/<版本ID>
//配置HCP信息
➜ hcl export HCP_CLIENT_ID=xxx
export HCP_CLIENT_SECRET=yyy
export HCP_PROJECT_ID=zzzz
//构建镜像
➜ hcl packer build s5.pkr.hcl
Tracking build on HCP Packer with fingerprint "xxxx"
docker.ubuntu-focal: output will be in this color.
==> docker.ubuntu-focal: Creating a temporary directory for sharing data...
==> docker.ubuntu-focal: Pulling Docker image: ubuntu:focal
docker.ubuntu-focal: focal: Pulling from library/ubuntu
docker.ubuntu-focal: Digest: sha256:8e5c4f0285ecbb4ead070431d29b576a530d3166df73ec44affc1cd27555141b
docker.ubuntu-focal: Status: Image is up to date for ubuntu:focal
docker.ubuntu-focal: docker.io/library/ubuntu:focal
==> docker.ubuntu-focal: Starting docker container...
docker.ubuntu-focal: Run command: docker run -v /Users/mvpbang/.config/packer/tmp2512693340:/packer-files -d -i -t --entrypoint=/bin/sh -- ubuntu:focal
docker.ubuntu-focal: Container ID: fec8efdfaf9acff8c2abbdc892946a41a48c4f5de90f20d58bf6758c9e5c75ee
==> docker.ubuntu-focal: Using docker communicator to connect: 192.168.215.2
==> docker.ubuntu-focal: Committing the container
docker.ubuntu-focal: Image ID: sha256:778c6f8e7fdef54c936299c1a1bffbf3c4e410f556a20e75db8bfc4df1efc372
==> docker.ubuntu-focal: Killing the container: fec8efdfaf9acff8c2abbdc892946a41a48c4f5de90f20d58bf6758c9e5c75ee
Build 'docker.ubuntu-focal' finished after 5 seconds 94 milliseconds.
==> Wait completed after 5 seconds 485 milliseconds
==> Builds finished. The artifacts of successful builds are:
--> docker.ubuntu-focal: Imported Docker image: sha256:778c6f8e7fdef54c936299c1a1bffbf3c4e410f556a20e75db8bfc4df1efc372
--> docker.ubuntu-focal: Published metadata to HCP Packer registry packer/learn-packer-ubuntu/versions/xxxxx
7. 在 HCP Packer 仪表板中验证元数据
- 登录您的 HCP 账户,导航到 Packer 服务。
- 在主仪表板中,找到 bucket 列表中的目标 bucket(例如
我的packer-bucket
)。 - 点击 bucket 查看其详细信息,包括描述和标签。
- 从左侧导航选择 **版本 (Versions)**,查看每个构建的元数据,包括构件 ID 和创建时间。
注意事项
- HCP Packer 注册表仅存储元数据(例如构件 ID、区域、标签),不存储构件本身。
- 使用环境变量时,它们会覆盖
hcp_packer_registry
块中指定的bucket_name
。 - 确保服务主体具有正确权限(贡献者角色),并且您的 Packer 版本支持所用功能。
- 如果元数据推送失败(例如认证问题或缺少变量),检查 Packer 输出中的错误信息。