使用相同的json文件进行并行构建

时间:2017-04-21 19:25:48

标签: packer

我有一个基础AMI,其中包含java和tomcat(ami-c1f3e7a6)。我的应用程序堆栈由6个基于我的基础AMI的独立Java应用程序组成,我使用packer创建6个独立的AMI。 ansible playbook app_playbook.yml将war文件从S3直接下载到tomcat / webapps目录中。我的包装工JSON是:

{
    "variables": {
        "war_file": ""
    },
    "builders": [{
        "type": "amazon-ebs",
        "region": "eu-west-1",
        "source_ami": "ami-c1f3e7a6",
        "instance_type": "t2.small",
        "ssh_username": "ec2-user",
        "ami_name": "app-{{user `war_file`}}-{{timestamp}}"
    }],
    "provisioners": [{
        "type": "ansible",
        "playbook_file": "ansible/app_playbook.yml",
        "extra_arguments": "--extra-vars 'war_file={{user `war_file`}}'"
    }]
}

在命令行我正在做:

packer build -var 'war_file=release123/application_1.war' tomcat.json
packer build -var 'war_file=release123/application_2.war' tomcat.json
packer build -var 'war_file=release123/application_3.war' tomcat.json
packer build -var 'war_file=release123/application_4.war' tomcat.json
packer build -var 'war_file=release123/application_5.war' tomcat.json
packer build -var 'war_file=release123/application_6.war' tomcat.json

我一直在研究打包程序执行并行构建以加快构建过程的能力,但看起来配置程序是针对每个构建器运行的,我需要将一个特定变量传递给每个构建器。

我知道我可以分叉bash命令来并行执行构建,但我觉得必须有一个" packer"这样做的方式。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

Packer不支持多次运行同一个构建器。如果您想这样做,则需要使用amazon-ebs复制only构建器和配置器部分的构建器部分。

最好通过使用某些脚本预处理代码段来创建最终模板。