Skip to content

Instantly share code, notes, and snippets.

@masteinhauser
Last active September 13, 2018 08:57
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save masteinhauser/ef3caa1d938f9b944543 to your computer and use it in GitHub Desktop.
Save masteinhauser/ef3caa1d938f9b944543 to your computer and use it in GitHub Desktop.
Example Packer pipeline with Berkshelf cookbook vendoring
#!/bin/bash -x
#DEBUG="-debug"
VM=`echo ${1} | sed 's/.json//g'`
PACKER=`which packer`
rm -rf output-${VM}
${PACKER} build ${DEBUG} ${VM}.json
if [ $? -ne 0 ] ; then
echo "ERROR: Unable to build ${VM}."
exit 1
fi
{
"builders": [{
"type": "virtualbox",
"name": "example-dev",
"vm_name": "example-dev",
"guest_os_type": "RedHat_64",
"hard_drive_interface": "sata",
"headless": true,
"vboxmanage": [
["modifyvm", "{{.Name}}", "--memory", "2048"],
["modifyvm", "{{.Name}}", "--rtcuseutc", "on"],
],
"iso_url": "http://mirrors.mit.edu/centos/6/isos/x86_64/CentOS-6.6-x86_64-bin-DVD1.iso",
"iso_checksum": "7b1fb1a11499b31271ded79da6af8584",
"iso_checksum_type": "md5",
"boot_command": ["<tab><wait> vmlinuz initrd=initrd.img ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/centos64-vm.ks <return>"],
"http_directory": "srv",
"ssh_username": "root",
"ssh_password": "admin",
"ssh_wait_timeout": "20m",
"shutdown_command": "shutdown -P now"
}],
"provisioners": [
{
"type":"shell",
"script":"provisioning/virtualbox.sh"
},
{
"type": "chef-solo",
"cookbook_paths": ["cookbooks"],
"run_list": [
"example",
],
"json": {
}
},{
"type":"shell",
"inline": ["mv -f /tmp/packer-chef-solo /home/admin/", "echo 'cookbook_path [\"/home/admin/packer-chef-solo/cookbooks-0\"]' > /home/admin/packer-chef-solo/solo.rb"]
},{
"type": "file",
"source": "provisioning/update.sh",
"destination": "/home/admin/update.sh"
},{
"type": "file",
"source": "Berksfile.lock",
"destination": "/home/admin/Berksfile.lock"
},{
},{
"type":"shell",
"inline": ["rm -rf /usr/local/tomcat/default/webapps/example"]
},
{
"type":"shell",
"script":"provisioning/cleanup.sh"
}
],
"post-processors": [{
"type": "vagrant",
"output": "packer_{{.BuildName}}_{{.Provider}}_{{timestamp}}.box"
}]
}
#! /bin/bash -xe
export VM=$1
bash update.sh
bash build.sh $VM
bash deploy.sh $VM
#!/bin/bash -x
# When on Windows or exported, use $BERKSHELF_PATH; default to the normal Linux location
BERK_PATH=${BERKSHELF_PATH:-$HOME/.berkshelf}
BERK_PATH=$(echo "${BERK_PATH}" | sed 's#\\#/#g')
# Remove cookbook caches
rm -rf ${BERK_PATH}/tmp
rm -rf ${BERK_PATH}/vagrant/*/multisite*
rm -rf ${BERK_PATH}/cookbooks/multisite-*
rm -rf ${BERK_PATH}/*/cookbooks/multisite*
rm -rf ${BERK_PATH}/*/vagrant/berkshelf-*/multisite*
rm -rf ./cookbooks
bundle exec berks install --path cookbooks
if [ $? -ne 0 ] ; then
echo "ERROR : Unable to update cookbooks."
exit 1
else
echo "SUCCESS: Updated and vendored cookbooks"
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment