Skip to content

Commit

Permalink
Removed non-required packages
Browse files Browse the repository at this point in the history
Added create-release script
Updated download-blobs script to allow version of Jenkins to be specified
  • Loading branch information
ebrusseau committed Mar 14, 2019
1 parent 2a6fbf5 commit a9e7128
Show file tree
Hide file tree
Showing 10 changed files with 221 additions and 87 deletions.
56 changes: 56 additions & 0 deletions create-release.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
#!/bin/bash

usage() {
echo "Usage: $(basename $0) <release type> [tarball output filename]" 1>&2
echo " release type must be 'dev' or 'final'" 1>&2
echo " tarball output filename is optional; defaults to:" 1>&2
echo " jenkins-bootstrap-dev.tgz for dev releases" 1>&2
echo " jenkins-bootstrap-final.tgz for final releases" 1>&2
echo
exit 1
}

get_jenkins_version() {
local war=blobs/jenkins/jenkins.war
local version
if [[ ! -e ${war} ]]; then
echo "Jenkins blob file missing; use 'download-blobs' to download"
exit 1
fi

version=$(unzip -p "${war}" META-INF/MANIFEST.MF | grep "^Jenkins-Version: " | sed -e 's#^Jenkins-Version: ##')
version=${version%%[[:space:]]}
echo "${version}"
}

main() {
if [[ $# -lt 1 ]]; then
usage "missing arguments"
fi

case ${1} in
dev)
create_args="--force"
version_suffix="-dev.$(date '+%Y%m%d.%-H%M.%S+%Z')"
;;
final)
create_args="--final"
;;
-h|--help)
usage
;;
*)
echo "ERROR: Invalid release type: ${1}"
usage
;;
esac

version="$(get_jenkins_version)${version_suffix}"
filename=${2:-jenkins-bootstrap-${1}.tgz}
create_args="${create_args} --version=${version} --tarball=${filename}"

echo "Creating BOSH release with version: ${version}"
bosh create-release ${create_args}
}

main "$@"
185 changes: 160 additions & 25 deletions download-blobs.sh
Original file line number Diff line number Diff line change
@@ -1,43 +1,178 @@
#!/bin/bash

set -eo pipefail
set -o pipefail

SCRIPT_DIR=$(dirname $0)
BLOBS_DIR=${SCRIPT_DIR}/blobs
SCRIPT_NAME=$(basename $0)
BOLD="\033[1m"
RED="\033[31m"
GREEN="\033[32m"
BLUE="\033[34m"
YELLOW="\033[33m"
NORMAL="\033[0m"
BLOBS=()

usage() {
echo "Usage: ${SCRIPT_NAME} [OPTIONS]" 1>&2
echo " Available Options:"
echo " -c, --clean Cleans out existing blob files and re-downloads them"
echo " -v, --version Download a specific Jenkins LTS version (\"latest\" will be used by default)"
echo
echo " Example usage: ${SCRIPT_NAME} --clean --version 2.150.1"
echo
exit 1
}

fail() {
echo -e "${RED}ERROR${NORMAL}: $*" 1>&2
exit 1
}

show_spinner() {
local -r pid="${1}"
local -r delay='0.1'
local spinstr='\|/-'
local temp

printf "Downloading "
while kill -0 $pid 2>/dev/null; do
temp="${spinstr#?}"
printf "[%c]" "${spinstr}"
spinstr=${temp}${spinstr%"${temp}"}
sleep "${delay}"
printf "\b\b\b"
done

printf "\b\b\b\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b\b\b\b\b\b\b"
}

get_github_release_url() {
local owner=${1}
local repo=${2}
local binary_type=${3:-linux}
local version=${4:-latest}

if [[ -z ${owner} ]] || [[ -z ${repo} ]]; then
fail "GitHub owner and repo must be supplied"
fi

curl -s https://api.github.com/repos/${owner}/${repo}/releases/${version} \
| grep browser_download_url \
| grep ${binary_type} \
| cut -d '"' -f 4
}

get_github_archive_url() {
local owner=${1}
local repo=${2}
local tag

if [[ -z ${owner} ]] || [[ -z ${repo} ]]; then
fail "GitHub owner and repo must be supplied"
fi

tag=$(git ls-remote --tags --sort="v:refname" https://github.com/${owner}/${repo} | tail -n1 | sed 's/.*\///; s/\^{}//')
echo "https://github.com/${owner}/${repo}/archive/${tag}.tar.gz"
}

get_plugin_url() {
local plugin=${1}
local baseurl version

baseurl="https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/${plugin}"
version=$(curl -s ${baseurl}/maven-metadata.xml \
| grep latest \
| sed 's/^[\ ]*\<latest\>//; s/\<\/latest\>//')
echo "${baseurl}/${version}/${plugin}-${version}.jar"
}

# Usage: download_blob <path and name of blob in blobstore> <url of appropriate source/binary archive>
download_blob() {
local blob_name=${1}
local blob_url=${2}
local blob_dir=$(dirname ${blob_name})
local blob_file="${SCRIPT_DIR}/blobs/${blob_name}"

shift; shift
printf " > ${BLUE}${BOLD}%-40s${NORMAL}" "${blob_name}"
if [[ -e ${blob_file} ]]; then
echo -e "${YELLOW}Skipping; file exists${NORMAL}"
else
mkdir -p ${SCRIPT_DIR}/blobs/${blob_dir}

echo Downloading ${blob_name} from ${blob_url}...
mkdir -p ${BLOBS_DIR}/${blob_dir}
wget "$@" -O ${BLOBS_DIR}/${blob_name} ${blob_url}
bosh add-blob ${BLOBS_DIR}/${blob_name} ${blob_name}
trap "kill 0" EXIT
wget "$@" -q -O ${blob_file} ${blob_url} &
show_spinner "$!"
wait %1
if [[ $? -eq 0 ]]; then
echo -e "${GREEN}Done${NORMAL}"
BLOBS+=(${blob_name})
else
echo -e "${RED}FAILED${NORMAL}"
fail "Could not download ${blob_url}"
fi
fi
}

download_oracle_jdk_blob() {
echo "Downloading Oracle JDK from $1..."
mkdir -p ${BLOBS_DIR}/oracle-jdk
wget \
--header "Cookie: oraclelicense=accept-securebackup-cookie" \
-O ${BLOBS_DIR}/oracle-jdk/oracle-jdk.tar.gz $1
add_blob() {
local blob_name=${1}
local blob_file=${SCRIPT_DIR}/blobs/${blob_name}

if [[ -e ${blob_file} ]]; then
bosh add-blob ${blob_file} ${blob_name}
else
fail "File missing for blob: ${blob_name}"
fi
}

[[ $? -eq 0 ]] && bosh add-blob ${BLOBS_DIR}/oracle-jdk/oracle-jdk.tar.gz oracle-jdk/oracle-jdk.tar.gz
clean_blobs() {
echo "Cleaning out existing blobs..."
[[ -d ${SCRIPT_DIR}/blobs ]] && rm -rf ${SCRIPT_DIR}/blobs
echo "--- {}" > ${SCRIPT_DIR}/config/blobs.yml
}

rm -rf blobs
echo "--- {}" > config/blobs.yml
main() {
local jenkins_version="latest"

while [[ $# -gt 0 ]]; do
case "$1" in
-c|--clean)
clean_blobs
;;
-v|--version)
shift
jenkins_version="${1}"
;;
-h|--help)
usage
;;
-*)
echo "${SCRIPT_NAME}: bad argument: $1"
usage
;;
*)
break
;;
esac
shift
done

echo "Downloading Jenkins package blob (${jenkins_version}):"
download_blob jenkins/jenkins.war "http://mirrors.jenkins.io/war-stable/${jenkins_version}/jenkins.war"

echo
echo "Downloading supporting package blobs:"
download_blob oracle-jdk/oracle-jdk.tar.gz "https://download.oracle.com/otn-pub/java/jdk/8u201-b09/42970487e3af4f5aa5bca3f542482c60/jdk-8u201-linux-x64.tar.gz" --header "Cookie: oraclelicense=accept-securebackup-cookie"
download_blob cf-cli/cf-cli-binary.tgz "https://packages.cloudfoundry.org/stable?release=linux64-binary&source=github"
download_blob git-client/git-client-source.tar.gz $(get_github_archive_url git git)
download_blob swarm-client/swarm-client.jar $(get_plugin_url swarm-client)
download_blob spruce/spruce-binary $(get_github_release_url geofffranks spruce)

if [ ${#BLOBS} -ne 0 ]; then
for blob in ${BLOBS[@]}; do
add_blob ${blob}
done
fi
}

download_blob oracle-jdk/oracle-jdk.tar.gz "https://download.oracle.com/otn-pub/java/jdk/8u201-b09/42970487e3af4f5aa5bca3f542482c60/jdk-8u201-linux-x64.tar.gz" --header "Cookie: oraclelicense=accept-securebackup-cookie"
download_blob apache-groovy/apache-groovy-binary.zip "https://dl.bintray.com/groovy/maven/apache-groovy-binary-2.5.6.zip"
download_blob apache-groovy/snakeyaml.jar "http://central.maven.org/maven2/org/yaml/snakeyaml/1.24/snakeyaml-1.24.jar"
download_blob apache-maven/apache-maven-binary.tar.gz "http://ftp.wayne.edu/apache/maven/maven-3/3.6.0/binaries/apache-maven-3.6.0-bin.tar.gz"
download_blob cf-cli/cf-cli-binary.tgz "https://packages.cloudfoundry.org/stable?release=linux64-binary&source=github"
download_blob git-client/git-client-source.tar.gz "https://github.com/git/git/archive/v2.21.0.tar.gz"
download_blob golang/go-binary.tar.gz "https://dl.google.com/go/go1.12.linux-amd64.tar.gz"
download_blob jenkins/jenkins.war "http://mirrors.jenkins.io/war-stable/latest/jenkins.war"
download_blob swarm-client/swarm-client.jar "https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/swarm-client/3.9/swarm-client-3.9.jar"
download_blob spruce/spruce-binary "https://github.com/geofffranks/spruce/releases/download/v1.19.2/spruce-linux-amd64"
main "$@"
7 changes: 4 additions & 3 deletions jobs/jenkins-master/spec
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ name: jenkins-master

packages:
- oracle-jdk
- jenkins
- git-client
- apache-groovy
- cf-cli
- jenkins
- spruce

provides:
Expand Down Expand Up @@ -33,10 +33,11 @@ templates:
config/plugins.txt.erb: config/plugins.txt
config/ssh/id_rsa.erb: config/ssh/id_rsa
config/ssh/config: config/ssh/config
config/init.groovy.d/script-approval.groovy: config/init.groovy.d/script-approval.groovy
config/init.groovy.d/configure-script-approvals.groovy: config/init.groovy.d/configure-script-approvals.groovy
data/properties.sh.erb: data/properties.sh
helpers/ctl_setup.sh: helpers/ctl_setup.sh
helpers/ctl_utils.sh: helpers/ctl_utils.sh

properties:
jenkins.master.http_port:
description: "HTTP port to listen on"
Expand Down
5 changes: 1 addition & 4 deletions jobs/jenkins-slave/spec
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,9 @@ name: jenkins-slave

packages:
- oracle-jdk
- swarm-client
- apache-maven
- git-client
- cf-cli
- golang
- apache-groovy
- swarm-client

consumes:
- name: jenkins_master
Expand Down
15 changes: 0 additions & 15 deletions packages/apache-groovy/packaging

This file was deleted.

9 changes: 0 additions & 9 deletions packages/apache-groovy/spec

This file was deleted.

8 changes: 0 additions & 8 deletions packages/apache-maven/packaging

This file was deleted.

8 changes: 0 additions & 8 deletions packages/apache-maven/spec

This file was deleted.

8 changes: 0 additions & 8 deletions packages/golang/packaging

This file was deleted.

7 changes: 0 additions & 7 deletions packages/golang/spec

This file was deleted.

0 comments on commit a9e7128

Please sign in to comment.