Artifice 后处理器
类型:artifice
制品构建器 ID:packer.post-processor.artifice
artifice
后处理器会覆盖上游构建器或后处理器传递下来的制品。所有下游后处理器都会看到您指定的新制品。
使用 artifice
覆盖制品后,您可以将其与其他大多数核心后处理器和第三方后处理器一起使用。
这样做的一个主要好处是,您可以使用 shell-local
修改来自上游的制品,并将这些修改后的制品传递到可能无法与原始构建器配合运行的后处理器中。例如,您可能想从 amazon-ebs
构建器导出 Docker 容器,然后使用 docker push
将该 Docker 容器推送至您的 Docker Hub 帐户中。
Artifice 允许您使用熟悉的 Packer 工作流程为您选择的基础架构上的每个构建创建一个全新的、无状态的构建环境。您可以使用它来构建几乎任何东西:buildpack、容器、jar、二进制文件、tarball、msi 安装程序等等。
请注意,artifice
后处理器不会删除旧的制品文件,即使它从制品中删除了它们。如果要删除旧的制品文件,可以使用 shell-local
后处理器来执行此操作。
工作流
Artifice 可帮助您将其他一些 Packer 功能结合在一起:
- 构建器,启动虚拟机(或容器)来构建您的制品
- 配置器,执行创建制品的步骤
file
配置器,从虚拟机下载制品artifice
后处理器,用于识别从虚拟机下载了哪些文件- 额外的后处理器,将制品推送到 Docker Hub 等
我们希望在虚拟机内执行尽可能多的工作。理想情况下,除了 artifice
之外,您唯一需要的后处理器将被用来把上传制品到合适的存储库。
配置
以下配置允许您指定您的制品由哪些文件构成。
必填
file
([]string)- 组成您的制品的文件列表。 Packer 的配置阶段完成后,这些文件必须存在于您的本地磁盘上。这些文件将取代来自上游的所有原始制品(例如虚拟机快照)。
选填
keep_input_artifact
(boolean) - 如果为true
,则在创建新制品后不删除原始制品文件。默认为true
。
配置样例
一个最小的可运行例子:
- 启动克隆的 VMware 虚拟机
- 安装 Consul
- 下载 Consul 二进制文件
- 将其打包成 .tar.gz 文件
- 将其上传到 S3。
VMX 是一种在本地构建和测试的快速方法,但您可以轻松地替换成其他类型的构建器。
{
"builders": [
{
"type": "vmware-vmx",
"source_path": "/opt/ubuntu-1404-vmware.vmx",
"ssh_username": "vagrant",
"ssh_password": "vagrant",
"shutdown_command": "sudo shutdown -h now",
"headless": "true",
"skip_compaction": "true"
}
],
"provisioners": [
{
"type": "shell",
"inline": [
"sudo apt-get install -y python-pip",
"sudo pip install ifs",
"sudo ifs install consul --version=0.5.2"
]
},
{
"type": "file",
"source": "/usr/local/bin/consul",
"destination": "consul",
"direction": "download"
}
],
"post-processors": [
[
{
"type": "artifice",
"files": ["consul"]
},
{
"type": "compress",
"output": "consul-0.5.2.tar.gz"
},
{
"type": "shell-local",
"inline": [
"/usr/local/bin/aws s3 cp consul-0.5.2.tar.gz s3://<s3 path>"
]
}
]
]
}
请注意,后处理器部分有两组方括号。这将创建一个后处理器链,其中上一个后处理器输出的制品被传递到后续的后处理器。如果仅使用一组方括号,后处理器将针对构建制品(本例中为 vmx 文件)单独运行,并且不会获得所需的结果。
{
"post-processors": [
[ // <--- Start post-processor chain
{
"type": "artifice",
"files": ["consul"]
},
{
"type": "compress",
...
}
], // <--- End post-processor chain
{
"type":"compress" // <-- Standalone post-processor
}
]
}
您可以创建多个后处理器链来处理多个构建器(例如,在同一构建内构建 Linux 和 Windows 二进制文件)。