Packer - 克隆私人回购的Shell脚本供应商 - 自动启动EC2实例

时间:2014-10-13 17:07:26

标签: bash shell github amazon-ec2 packer

因此,我一直在寻找一种方法来获取Packer构建来下载ec2 ami构建的私有存储库,该构建器将用于在自动启动配置下启动新实例。因此,拥有新创建的ec2实例,获取一个私人仓库。

获取私有仓库最安全的方法似乎是使用部署密钥,但我相信我必须手动将每个部署密钥添加到每个实例的仓库...这会破坏自动化目的,除非我和做错了。

基本上,我想知道如何通过打包程序克隆私有存储库,无论是通过shell脚本还是其他方式。我知道我可以使用Chef,但是当我尝试做的唯一事情是克隆github存储库时,我不认为我应该安装另一个依赖项。

我是否必须编写使用https github clone url的send / expect类型的脚本?

任何和所有帮助表示赞赏。

2 个答案:

答案 0 :(得分:2)

使用ssh-agent有一个“解决方法”。我说解决方法因为它不是特别优雅。拥有Puppet模块的这一部分(可能还有一部分)会更好。

您的想法是,您需要为每个私有Github存储库生成一对公钥/私钥。然后在Github项目设置(设置/部署密钥)中将公钥添加为部署密钥。存储密钥对的位置取决于您。

现在在Packer中,您可以使用Shell配置程序并按以下方式执行:

#!/usr/bin/env bash

ssh-keyscan github.com >> /home/ec2-user/.ssh/known_hosts
eval `ssh-agent`
ssh-agent bash -c \
'ssh-add /home/ec2-user/.ssh/[privateKey]; git clone git@github.com:[account]/project.git'

这种方法的优点是您可以轻松地克隆多个私有存储库。

通过使用file provisioner,Chef或Puppet,有几种方法可以在EC2框上传密钥对。

答案 1 :(得分:0)

我一直在 Windows 上使用它,但理论上应该与此类似

{
"type": "powershell",
"inline": [ 
 "Set-Location C:\\{{ user `LAB_ENVIRONMENT` }}; git clone https://{{ user `GITLAB_USERNAME` }}:{{ user `GITLAB_ACCESS_TOKEN` }}@gitlab.com/{{ user `REPOSITORY` }}"
]},