summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomáš Levora <t.levora@partner.samsung.com>2019-07-11 10:38:23 +0200
committerTomáš Levora <t.levora@partner.samsung.com>2019-07-11 10:41:55 +0200
commit8059407c2402b6e12276a87dcb46df01c17745c8 (patch)
tree7d3cd27f4f0b6de4551cca9ab645193740a4a247
parent0573ab24eb85e428cb1f1bb80b9956b1a790dcc6 (diff)
Rewrite build_nexus_blob script to use functions
Rewrite build_nexus_blob.sh script to functions for better future maintenance and better possibility to add new features Issue-ID: OOM-1977 Change-Id: I697462efbbeddbe3d89aec47ae7fcfff9f4147b7 Signed-off-by: Tomáš Levora <t.levora@partner.samsung.com>
-rwxr-xr-xbuild/build_nexus_blob.sh151
1 files changed, 86 insertions, 65 deletions
diff --git a/build/build_nexus_blob.sh b/build/build_nexus_blob.sh
index 6ecab695..867fb9c5 100755
--- a/build/build_nexus_blob.sh
+++ b/build/build_nexus_blob.sh
@@ -73,12 +73,81 @@ usage () {
exit 1
}
+publish_ports () {
+ for REGISTRY in $(sed -n '/\.[^/].*\//p' ${1} | sed -e 's/\/.*$//' | sort -u | grep -v ${DEFAULT_REGISTRY} || true) ${NEXUS_PORT}; do
+ if [[ ${REGISTRY} != *":"* ]]; then
+ if [[ ${PUBLISHED_PORTS} != *"80:${NEXUS_DOCKER_PORT}"* ]]; then
+ PUBLISHED_PORTS="${PUBLISHED_PORTS} -p 80:${NEXUS_DOCKER_PORT}"
+ fi
+ else
+ REGISTRY_PORT="$(sed 's/^.*\:\([[:digit:]]*\)$/\1/' <<< ${REGISTRY})"
+ if [[ ${PUBLISHED_PORTS} != *"${REGISTRY_PORT}:${NEXUS_DOCKER_PORT}"* ]]; then
+ PUBLISHED_PORTS="${PUBLISHED_PORTS} -p ${REGISTRY_PORT}:${NEXUS_DOCKER_PORT}"
+ fi
+ fi
+ done
+}
+
+simulated_hosts () {
+ SIMUL_HOSTS=($(sed -n '/\.[^/].*\//p' ${1} | sed -e 's/\/.*$// ; s/:.*$//' | sort -u | grep -v ${DEFAULT_REGISTRY} || true ) ${NEXUS_DOMAIN})
+ for HOST in "${SIMUL_HOSTS[@]}"; do
+ if ! grep -wq ${HOST} /etc/hosts; then
+ echo "127.0.0.1 ${HOST}" >> /etc/hosts
+ fi
+ done
+}
+
load_docker_images () {
for ARCHIVE in $(sed $'s/\r// ; /^#/d ; s/\:/\_/g ; s/\//\_/g ; s/$/\.tar/g' ${1} | awk '{ print $1 }'); do
docker load -i ${NXS_SRC_DOCKER_IMG_DIR}/${ARCHIVE}
done
}
+push_npm () {
+ for ARCHIVE in $(sed $'s/\r// ; s/\\@/\-/g ; s/$/\.tgz/g' ${1}); do
+ npm publish --access public ${ARCHIVE} > /dev/null
+ echo "NPM ${ARCHIVE} pushed to Nexus"
+ done
+}
+
+push_pip () {
+ for PACKAGE in $(sed $'s/\r//; s/==/-/' ${NXS_PYPI_LIST}); do
+ twine upload -u "${NEXUS_USERNAME}" -p "${NEXUS_PASSWORD}" --repository-url ${PYPI_REGISTRY} ${PACKAGE}*
+ echo "PYPI ${PACKAGE} pushed to Nexus"
+done
+}
+
+docker_login () {
+ for REGISTRY in $(sed -n '/\.[^/].*\//p' ${1} | sed -e 's/\/.*$//' | sort -u | grep -v ${DEFAULT_REGISTRY}) ${DOCKER_REGISTRY}; do
+ echo "Docker login to ${REGISTRY}"
+ docker login -u "${NEXUS_USERNAME}" -p "${NEXUS_PASSWORD}" ${REGISTRY} > /dev/null
+done
+}
+
+push_docker () {
+ for IMAGE in $(sed $'s/\r// ; /^#/d' ${1} | awk '{ print $1 }'); do
+ PUSH=""
+ if [[ ${IMAGE} != *"/"* ]]; then
+ PUSH="${DOCKER_REGISTRY}/library/${IMAGE}"
+ elif [[ ${IMAGE} == *"${DEFAULT_REGISTRY}"* ]]; then
+ if [[ ${IMAGE} == *"/"*"/"* ]]; then
+ PUSH="$(sed 's/'"${DEFAULT_REGISTRY}"'/'"${DOCKER_REGISTRY}"'/' <<< ${IMAGE})"
+ else
+ PUSH="$(sed 's/'"${DEFAULT_REGISTRY}"'/'"${DOCKER_REGISTRY}"'\/library/' <<< ${IMAGE})"
+ fi
+ elif [[ -z $(sed -n '/\.[^/].*\//p' <<< ${IMAGE}) ]]; then
+ PUSH="${DOCKER_REGISTRY}/${IMAGE}"
+ fi
+ if [[ ! -z ${PUSH} ]]; then
+ docker tag ${IMAGE} ${PUSH}
+ else
+ PUSH="${IMAGE}"
+ fi
+ docker push ${PUSH}
+ echo "${IMAGE} pushed as ${PUSH} to Nexus"
+ done
+}
+
# Verify all dependencies are available in PATH
FAILED_COMMANDS=()
for cmd in ${COMMANDS[*]};
@@ -128,25 +197,24 @@ INFRA_LIST="${LISTS_DIR}/infra_docker_images.list"
NEXUS_IMAGE="$(grep sonatype/nexus3 ${INFRA_LIST})"
NEXUS_IMAGE_TAR="${DATA_DIR}/offline_data/docker_images_infra/$(sed 's/\//\_/ ; s/$/\.tar/ ; s/\:/\_/' <<< ${NEXUS_IMAGE})"
+# Backup /etc/hosts
+HOSTS_BACKUP="$(eval ${TIMESTAMP}_hosts.bk)"
+cp /etc/hosts /etc/${HOSTS_BACKUP}
+
+# Backup the current docker registry settings
+if [ -f ~/.docker/config.json ]; then
+ DOCKER_CONF_BACKUP="$(eval ${TIMESTAMP}_config.json.bk)"
+ mv ~/.docker/config.json ~/.docker/${DOCKER_CONF_BACKUP}
+fi
+
# Setup default ports published to host as docker registry
PUBLISHED_PORTS="-p ${NEXUS_PORT}:${NEXUS_PORT} -p ${NEXUS_DOCKER_PORT}:${NEXUS_DOCKER_PORT}"
# Setup additional ports published to host based on simulated docker registries
-for REGISTRY in $(sed -n '/\.[^/].*\//p' ${NXS_DOCKER_IMG_LIST} | sed -e 's/\/.*$//' | sort -u | grep -v ${DEFAULT_REGISTRY} || true); do
- if [[ ${REGISTRY} != *":"* ]]; then
- if [[ ${PUBLISHED_PORTS} != *"80:${NEXUS_DOCKER_PORT}"* ]]; then
- PUBLISHED_PORTS="${PUBLISHED_PORTS} -p 80:${NEXUS_DOCKER_PORT}"
- fi
- else
- REGISTRY_PORT="$(sed 's/^.*\:\([[:digit:]]*\)$/\1/' <<< ${REGISTRY})"
- if [[ ${PUBLISHED_PORTS} != *"${REGISTRY_PORT}:${NEXUS_DOCKER_PORT}"* ]]; then
- PUBLISHED_PORTS="${PUBLISHED_PORTS} -p ${REGISTRY_PORT}:${NEXUS_DOCKER_PORT}"
- fi
- fi
-done
+publish_ports "${NXS_DOCKER_IMG_LIST}"
# Setup simulated domain names to be able to push all to private Nexus repository
-SIMUL_HOSTS="$(sed -n '/\.[^/].*\//p' ${NXS_DOCKER_IMG_LIST} | sed -e 's/\/.*$// ; s/:.*$//' | sort -u | grep -v ${DEFAULT_REGISTRY} || true) ${NEXUS_DOMAIN}"
+simulated_hosts "${NXS_DOCKER_IMG_LIST}"
# Nexus repository configuration setup
NEXUS_CONFIG_GROOVY='import org.sonatype.nexus.security.realm.RealmManager
@@ -186,23 +254,6 @@ repositoryManager.update(conf)'
NEXUS_CONFIG=$(echo "${NEXUS_CONFIG_GROOVY}" | jq -Rsc '{"name":"configure", "type":"groovy", "content":.}')
#################################
-# Prepare the local environment #
-#################################
-
-# Add simulated domain names to /etc/hosts
-HOSTS_BACKUP="$(eval ${TIMESTAMP}_hosts.bk)"
-cp /etc/hosts /etc/${HOSTS_BACKUP}
-for DNS in ${SIMUL_HOSTS}; do
- echo "127.0.0.1 ${DNS}" >> /etc/hosts
-done
-
-# Backup the current docker registry settings
-if [ -f ~/.docker/config.json ]; then
- DOCKER_CONF_BACKUP="$(eval ${TIMESTAMP}_config.json.bk)"
- mv ~/.docker/config.json ~/.docker/${DOCKER_CONF_BACKUP}
-fi
-
-#################################
# Docker repository preparation #
#################################
@@ -282,10 +333,7 @@ if [[ ! -z "${PATCHED_NPM}" ]] && ! zgrep -aq "${NPM_REGISTRY}" "${PATCHED_NPM}"
fi
# Push NPM packages to Nexus repository
-for ARCHIVE in $(sed $'s/\r// ; s/\\@/\-/g ; s/$/\.tgz/g' ${NXS_NPM_LIST});do
- npm publish --access public ${ARCHIVE} > /dev/null
- echo "NPM ${ARCHIVE} pushed to Nexus"
-done
+push_npm "${NXS_NPM_LIST}"
popd
###############################
@@ -293,10 +341,7 @@ popd
###############################
pushd ${NXS_SRC_PYPI_DIR}
-for PACKAGE in $(sed $'s/\r//; s/==/-/' ${NXS_PYPI_LIST}); do
- twine upload -u "${NEXUS_USERNAME}" -p "${NEXUS_PASSWORD}" --repository-url ${PYPI_REGISTRY} ${PACKAGE}*
- echo "PYPI ${PACKAGE} pushed to Nexus"
-done
+push_pip "${NXS_PYPI_LIST}"
popd
###############################
@@ -304,35 +349,11 @@ popd
###############################
# Login to simulated docker registries
-for REGISTRY in $(sed -n '/\.[^/].*\//p' ${NXS_DOCKER_IMG_LIST} | sed -e 's/\/.*$//' | sort -u | grep -v ${DEFAULT_REGISTRY}) ${DOCKER_REGISTRY}; do
- echo "Docker login to ${REGISTRY}"
- docker login -u "${NEXUS_USERNAME}" -p "${NEXUS_PASSWORD}" ${REGISTRY} > /dev/null
-done
-
# Push images to private nexus based on the list
# Images from default registry need to be tagged to private registry
# and those without defined repository in tag uses default repository 'library'
-for IMAGE in $(sed $'s/\r// ; /^#/d' ${NXS_DOCKER_IMG_LIST} | awk '{ print $1 }'); do
- PUSH=""
- if [[ ${IMAGE} != *"/"* ]]; then
- PUSH="${DOCKER_REGISTRY}/library/${IMAGE}"
- elif [[ ${IMAGE} == *"${DEFAULT_REGISTRY}"* ]]; then
- if [[ ${IMAGE} == *"/"*"/"* ]]; then
- PUSH="$(sed 's/'"${DEFAULT_REGISTRY}"'/'"${DOCKER_REGISTRY}"'/' <<< ${IMAGE})"
- else
- PUSH="$(sed 's/'"${DEFAULT_REGISTRY}"'/'"${DOCKER_REGISTRY}"'\/library/' <<< ${IMAGE})"
- fi
- elif [[ -z $(sed -n '/\.[^/].*\//p' <<< ${IMAGE}) ]]; then
- PUSH="${DOCKER_REGISTRY}/${IMAGE}"
- fi
- if [[ ! -z ${PUSH} ]]; then
- docker tag ${IMAGE} ${PUSH}
- else
- PUSH="${IMAGE}"
- fi
- docker push ${PUSH}
- echo "${IMAGE} pushed as ${PUSH} to Nexus"
-done
+docker_login "${NXS_DOCKER_IMG_LIST}"
+push_docker "${NXS_DOCKER_IMG_LIST}"
##############################
# Stop the Nexus and cleanup #
@@ -344,7 +365,7 @@ echo "Stopping Nexus and returning backups"
docker stop ${NEXUS_CONT_ID} > /dev/null
# Return backed up configuration files
-mv -f /etc/${HOSTS_BACKUP} /etc/hosts
+mv -f "/etc/${HOSTS_BACKUP}" /etc/hosts
if [ -f ~/.docker/${DOCKER_CONF_BACKUP} ]; then
mv -f ~/.docker/${DOCKER_CONF_BACKUP} ~/.docker/config.json