# validate packer image
packer validate ./images/jenkins_ci/jenkins-ci-packer.json
# build packer image
packer build ./images/jenkins_ci/jenkins-ci-packer.json
Last active
November 10, 2020 19:39
-
-
Save justinsoliz/ce1d0d5cafdbce0efcdebb74fda2394d to your computer and use it in GitHub Desktop.
Packer definition for jenkins ci executor
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"variables": { | |
"aws_access_key": "", | |
"aws_secret_key": "" | |
}, | |
"builders": [{ | |
"type": "amazon-ebs", | |
"access_key": "{{user `aws_access_key`}}", | |
"secret_key": "{{user `aws_secret_key`}}", | |
"region": "us-west-2", | |
"source_ami": "ami-d732f0b7", | |
"instance_type": "m4.large", | |
"ssh_username": "ubuntu", | |
"ami_name": "jenkins-packer-ci-{{timestamp}}", | |
"launch_block_device_mappings": [ | |
{ | |
"device_name": "/dev/sda1", | |
"volume_size": 40, | |
"volume_type": "gp2", | |
"delete_on_termination": true | |
} | |
] | |
}], | |
"provisioners": [{ | |
"type": "shell", | |
"script": "{{template_dir}}/jenkins_init.sh" | |
}] | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
echo "Updating package list" | |
sudo apt-get update | |
echo "Installing dependencies" | |
sudo apt-get install -y unzip zip git-core wget python postgresql-client \ | |
build-essential libssl-dev postgresql-client unzip | |
echo "Install AWS CLI" | |
sudo apt-get install -y python-pip | |
sudo pip install awscli | |
echo "Install Node.js" | |
curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash - | |
sudo apt-get install -y nodejs | |
echo "Install NVM" | |
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | bash | |
export NVM_DIR="$HOME/.nvm" | |
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" | |
echo "source ~/.nvm/nvm.sh" >> "$HOME/.bashrc" | |
echo "Installing node version dependencies for api and playbook" | |
nvm install 6.9.1 | |
nvm install 4.6.2 | |
echo "Install Yarn PKG manager" | |
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - | |
echo "deb http://dl.yarnpkg.com/debian/ stable main" \ | |
| sudo tee /etc/apt/sources.list.d/yarn.list | |
sudo apt-get update && sudo apt-get install yarn | |
cat << EOF > ./ubuntu-init.py | |
#!/usr/bin/python | |
import os | |
import httplib | |
import string | |
# To install run: | |
# sudo wget http://$JENKINS_URL/plugin/ec2/AMI-Scripts/ubuntu-init.py -O /usr/bin/userdata | |
# sudo chmod +x /etc/init.d/userdata | |
# add the following line to /etc/rc.local "python /usr/bin/userdata" | |
# If java is installed it will be zero | |
# If java is not installed it will be non-zero | |
hasJava = os.system("java -version") | |
if hasJava != 0: | |
os.system("sudo apt-get update") | |
os.system("sudo apt-get install openjdk-7-jre -y") | |
conn = httplib.HTTPConnection("169.254.169.254") | |
conn.request("GET", "/latest/user-data") | |
response = conn.getresponse() | |
userdata = response.read() | |
args = string.split(userdata, "&") | |
jenkinsUrl = "" | |
slaveName = "" | |
for arg in args: | |
if arg.split("=")[0] == "JENKINS_URL": | |
jenkinsUrl = arg.split("=")[1] | |
if arg.split("=")[0] == "SLAVE_NAME": | |
slaveName = arg.split("=")[1] | |
os.system("wget " + jenkinsUrl + "jnlpJars/slave.jar -O slave.jar") | |
os.system("java -jar slave.jar -jnlpUrl " + jenkinsUrl + "computer/" + slaveName + "/slave-agent.jnlp") | |
EOF | |
sudo mv ./ubuntu-init.py /usr/bin/userdata | |
sudo chmod +x /usr/bin/userdata | |
echo "Adding boot script to run after boot is complete" | |
sudo sed -i '/^[^#]/ s/exit 0/python \/usr\/bin\/userdata\n&/' /etc/rc.local | |
echo "Installing Terraform" | |
TERRAFORM_VER="0.8.4" | |
TERRAFORM_ZIP="terraform_$(echo $TERRAFORM_VER)_linux_amd64.zip" | |
wget "https://releases.hashicorp.com/terraform/$TERRAFORM_VER/$TERRAFORM_ZIP" | |
unzip ./$TERRAFORM_ZIP | |
sudo mv ./terraform /usr/bin | |
sudo chmod +x /usr/bin/terraform | |
echo "** installing docker **" | |
curl -fsSL https://get.docker.com/ | sh | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment