Skip to content

Commit

Permalink
Add a Docker release scripts
Browse files Browse the repository at this point in the history
Also tease out some dev and docker bits from Vagrant scripts to ease
sharing with Docker script
  • Loading branch information
Mahmood Ali committed Mar 17, 2019
1 parent 27924bc commit d5d6477
Show file tree
Hide file tree
Showing 7 changed files with 146 additions and 16 deletions.
8 changes: 8 additions & 0 deletions Vagrantfile
Expand Up @@ -125,6 +125,14 @@ def configureLinuxProvisioners(vmCfg)
privileged: true,
path: './scripts/vagrant-linux-priv-config.sh'

vmCfg.vm.provision "shell",
privileged: true,
path: './scripts/vagrant-linux-priv-dev.sh'

vmCfg.vm.provision "shell",
privileged: true,
path: './scripts/vagrant-linux-priv-docker.sh'

vmCfg.vm.provision "shell",
privileged: true,
path: './scripts/vagrant-linux-priv-consul.sh'
Expand Down
44 changes: 44 additions & 0 deletions scripts/release/Dockerfile
@@ -0,0 +1,44 @@
# Dockerfile for building nomad binaries
# that mimics Vagrant environment as far as required
# for building the scripts and running provision scripts

FROM ubuntu:16.04

RUN apt-get update; apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
git \
sudo \
tree \
unzip \
wget

RUN useradd --create-home vagrant \
&& echo 'vagrant ALL = (ALL) NOPASSWD: ALL' >> /etc/sudoers

# install priv packages
ADD ./scripts/vagrant-linux-priv-config.sh /tmp/scripts/vagrant-linux-priv-config.sh
RUN /tmp/scripts/vagrant-linux-priv-config.sh

ADD ./scripts/vagrant-linux-priv-go.sh /tmp/scripts/vagrant-linux-priv-go.sh
RUN /tmp/scripts/vagrant-linux-priv-go.sh

ADD ./scripts/vagrant-linux-priv-protoc.sh /tmp/scripts/vagrant-linux-priv-protoc.sh
RUN /tmp/scripts/vagrant-linux-priv-protoc.sh

USER vagrant

ADD ./scripts/vagrant-linux-unpriv-ui.sh /tmp/scripts/vagrant-linux-unpriv-ui.sh
RUN /tmp/scripts/vagrant-linux-unpriv-ui.sh

# Update PATH with GO bin, yarn, and node
ENV GOPATH="/opt/gopath" \
PATH="/home/vagrant/bin:/opt/gopath/bin:/home/vagrant/.yarn/bin:/home/vagrant/.config/yarn/global/node_modules/.bin:$PATH"

RUN mkdir -p /opt/gopath/src/github.com/hashicorp/nomad
RUN mkdir -p /home/vagrant/bin \
&& git config --global user.email "nomad@hashicorp.com" \
&& git config --global user.name "Nomad Release Bot"

COPY --chown=vagrant:vagrant ./scripts/release/docker-build-all /home/vagrant/bin/docker-build-all
29 changes: 29 additions & 0 deletions scripts/release/Makefile.linux
@@ -0,0 +1,29 @@

NOMAD_VERSION = 0.9.0-dev

NOMAD_MAIN_VERSION := $(shell echo $(NOMAD_VERSION) | cut -d- -f1)
NOMAD_PRERELEASE_VERSION := $(shell echo $(NOMAD_VERSION) | cut -d- -f2-)

update_version:
@echo "updating version to $(NOMAD_MAIN_VERSION)-$(NOMAD_PRERELEASE_VERSION)"
@sed -i.bak -e 's|\(Version * = *"\)[^"]*|\1$(NOMAD_MAIN_VERSION)|g' version/version.go
@sed -i.bak -e 's|\(VersionPrerelease * = *"\)[^"]*|\1$(NOMAD_PRERELEASE_VERSION)|g' version/version.go
@rm -rf version/version.go.bak

PRERELEASE_TARGET = prerelease
RELEASE_TARGET = release

build_releases:
@echo "======>> installing dependencies"
$(MAKE) bootstrap

@echo "======>> pre-releasing"
$(MAKE) $(PRERELEASE_TARGET)

@echo "======>> committing generated files"
git add -A .
git commit --author 'Nomad Release bot <nomad@hashicorp.com>' \
--message "Generate files for $(NOMAD_VERSION) release"

@echo "======>> building release artifacts"
$(MAKE) $(RELEASE_TARGET)
20 changes: 20 additions & 0 deletions scripts/release/docker-build-all
@@ -0,0 +1,20 @@
#!/usr/bin/env bash

. ~/.nvm/nvm.sh

set -e
set -x

cp -r /tmp/nomad-git /opt/gopath/src/github.com/hashicorp/nomad/.git

cd /opt/gopath/src/github.com/hashicorp/nomad
git checkout .

make -f ./scripts/release/Makefile.linux \
"NOMAD_VERSION=${NOMAD_VERSION}" \
"PRERELEASE_TARGET=${PRERELEASE_TARGET}" \
"RELEASE_TARGET=${RELEASE_TARGET}" \
update_version build_releases

cp -r /opt/gopath/src/github.com/hashicorp/nomad \
/tmp/artifacts/repo
16 changes: 0 additions & 16 deletions scripts/vagrant-linux-priv-config.sh
Expand Up @@ -9,15 +9,6 @@ apt-get install -y software-properties-common
# Add i386 architecture (for libraries)
dpkg --add-architecture i386

# Add the Docker repository
apt-key adv \
--keyserver hkp://p80.pool.sks-keyservers.net:80 \
--recv-keys 9DC858229FC7DD38854AE2D88D81803C0EBFCD88
add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"

# Update with i386, Go and Docker
apt-get update

Expand All @@ -35,7 +26,6 @@ apt-get install -y \
apt-get install -y \
curl \
default-jre \
docker-ce \
htop \
jq \
qemu \
Expand All @@ -60,12 +50,6 @@ apt-get install -y \
# Ensure everything is up to date
apt-get upgrade -y

# Restart Docker in case it got upgraded
systemctl restart docker.service

# Ensure Docker can be used by vagrant user
usermod -aG docker vagrant

# Set hostname -> IP to make advertisement work as expected
ip=$(ip route get 1 | awk '{print $NF; exit}')
hostname=$(hostname)
Expand Down
24 changes: 24 additions & 0 deletions scripts/vagrant-linux-priv-dev.sh
@@ -0,0 +1,24 @@
#!/usr/bin/env bash

# Install Development utilities
apt-get install -y \
curl \
default-jre \
htop \
jq \
qemu \
silversearcher-ag \
tree \
unzip \
vim


# Set hostname -> IP to make advertisement work as expected
ip=$(ip route get 1 | awk '{print $NF; exit}')
hostname=$(hostname)
sed -i -e "s/.*nomad.*/${ip} ${hostname}/" /etc/hosts

# Ensure we cd into the working directory on login
if ! grep "cd /opt/gopath/src/github.com/hashicorp/nomad" /home/vagrant/.profile ; then
echo 'cd /opt/gopath/src/github.com/hashicorp/nomad' >> /home/vagrant/.profile
fi
21 changes: 21 additions & 0 deletions scripts/vagrant-linux-priv-docker.sh
@@ -0,0 +1,21 @@
#!/usr/bin/env bash

# Add the Docker repository
apt-key adv \
--keyserver hkp://p80.pool.sks-keyservers.net:80 \
--recv-keys 9DC858229FC7DD38854AE2D88D81803C0EBFCD88
add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"

# Update with i386, Go and Docker
apt-get update

apt-get install -y docker-ce

# Restart Docker in case it got upgraded
systemctl restart docker.service

# Ensure Docker can be used by vagrant user
usermod -aG docker vagrant

0 comments on commit d5d6477

Please sign in to comment.