diff --git a/.dockerignore b/.dockerignore index 617e694..085517e 100644 --- a/.dockerignore +++ b/.dockerignore @@ -8,6 +8,7 @@ /.editorconfig /.gitignore /.travis.yml +/build.sh /CHANGELOG.md /LICENSE /README.md diff --git a/.travis.yml b/.travis.yml index bdce337..b967122 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,7 +5,7 @@ services: env: global: - - VERSION=1.45 + - VERSION=1.46 - DOCKER_USERNAME=librenms - DOCKER_REPONAME=librenms - DOCKER_LOGIN=librenmsbot @@ -19,38 +19,5 @@ env: before_install: - sudo apt-get update - docker --version - - export BRANCH=$(if [ "$TRAVIS_PULL_REQUEST" == "false" ]; then echo $TRAVIS_BRANCH; else echo $TRAVIS_PULL_REQUEST_BRANCH; fi) - - export DOCKER_TAG=$(if [ "$BRANCH" == "master" ]; then echo "latest"; else echo $BRANCH; fi) - - echo "TRAVIS_BRANCH=$TRAVIS_BRANCH, PR=$PR, BRANCH=$BRANCH, DOCKER_TAG=$DOCKER_TAG" -install: - - | - docker build --build-arg BUILD_DATE=`date -u +"%Y-%m-%dT%H:%M:%SZ"` \ - --build-arg VCS_REF=${TRAVIS_COMMIT::8} \ - --build-arg VERSION=${VERSION} \ - -t docker_build . - -before_script: - - docker network create -d bridge $DOCKER_REPONAME - - docker run -d --network=$DOCKER_REPONAME --name db mariadb:10.2 - - docker run -d --network=$DOCKER_REPONAME --link db -p 8000:80 -e "DB_HOST=db" -e "DB_PASSWORD=asupersecretpassword" --name $DOCKER_REPONAME docker_build - - sleep 20 - - docker logs $DOCKER_REPONAME - -script: - - docker ps | grep $DOCKER_REPONAME - - | - test $TRAVIS_PULL_REQUEST = false \ - && echo "$DOCKER_PASSWORD" | docker login --username "$DOCKER_LOGIN" --password-stdin \ - && docker tag docker_build $DOCKER_USERNAME/$DOCKER_REPONAME:$DOCKER_TAG \ - && docker tag docker_build $DOCKER_USERNAME/$DOCKER_REPONAME:$VERSION \ - && docker push $DOCKER_USERNAME/$DOCKER_REPONAME \ - && curl -X POST $MICROBADGER_HOOK \ - && echo "$QUAY_PASSWORD" | docker login quay.io --username "$QUAY_LOGIN" --password-stdin \ - && docker tag docker_build quay.io/$DOCKER_USERNAME/$DOCKER_REPONAME:$DOCKER_TAG \ - && docker tag docker_build quay.io/$DOCKER_USERNAME/$DOCKER_REPONAME:$VERSION \ - && docker push quay.io/$QUAY_USERNAME/$QUAY_REPONAME - -branches: - except: - - /^[0-9]/ +script: ./build.sh diff --git a/Dockerfile b/Dockerfile index e876a13..61ac401 100644 --- a/Dockerfile +++ b/Dockerfile @@ -80,7 +80,7 @@ RUN apk --update --no-cache add \ && setcap cap_net_raw+ep /usr/bin/nmap \ && setcap cap_net_raw+ep /usr/sbin/fping -ENV LIBRENMS_VERSION="1.45" \ +ENV LIBRENMS_VERSION="1.46" \ LIBRENMS_PATH="/opt/librenms" \ DATA_PATH="/data" \ CRONTAB_PATH="/var/spool/cron/crontabs" diff --git a/build.sh b/build.sh new file mode 100644 index 0000000..25d12f4 --- /dev/null +++ b/build.sh @@ -0,0 +1,110 @@ +#!/usr/bin/env bash +set -e + +PROJECT=librenms +BUILD_DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ") +BUILD_TAG=docker_build +VCS_REF=${TRAVIS_COMMIT::8} +RUNNING_TIMEOUT=120 +RUNNING_LOG_CHECK="snmpd entered RUNNING state" + +DOCKER_USERNAME=${DOCKER_USERNAME:="librenms"} +DOCKER_REPONAME=${DOCKER_REPONAME:="librenms"} +DOCKER_LOGIN=${DOCKER_LOGIN:="librenmsbot"} +QUAY_USERNAME=${QUAY_USERNAME:="librenms"} +QUAY_REPONAME=${QUAY_REPONAME:="librenms"} +QUAY_LOGIN=${QUAY_LOGIN:="librenms+travis"} + +# Check local or travis +BRANCH=${TRAVIS_BRANCH:-"local"} +if [[ ${TRAVIS_PULL_REQUEST} == "true" ]]; then + BRANCH=${TRAVIS_PULL_REQUEST_BRANCH} +fi +DOCKER_TAG=${BRANCH:-"local"} +if [[ "$BRANCH" == "master" ]]; then + DOCKER_TAG=latest +elif [[ "$BRANCH" == "local" ]]; then + BUILD_DATE= + VERSION=local +fi + +echo "PROJECT=${PROJECT}" +echo "BUILD_DATE=${BUILD_DATE}" +echo "BUILD_TAG=${BUILD_TAG}" +echo "VCS_REF=${VCS_REF}" +echo "DOCKER_USERNAME=${DOCKER_USERNAME}" +echo "DOCKER_REPONAME=${DOCKER_REPONAME}" +echo "QUAY_USERNAME=${QUAY_USERNAME}" +echo "QUAY_REPONAME=${QUAY_REPONAME}" +echo "TRAVIS_BRANCH=${TRAVIS_BRANCH}" +echo "TRAVIS_PULL_REQUEST=${TRAVIS_PULL_REQUEST}" +echo "BRANCH=${BRANCH}" +echo "DOCKER_TAG=${DOCKER_TAG}" +echo + +# Build +echo "### Build" +docker build \ + --build-arg BUILD_DATE=${BUILD_DATE} \ + --build-arg VCS_REF=${VCS_REF} \ + --build-arg VERSION=${VERSION} \ + -t ${BUILD_TAG} . +echo + +echo "### Test" +docker rm -f ${PROJECT} ${PROJECT}-db || true +docker network rm ${PROJECT} || true +docker network create -d bridge ${PROJECT} +docker run -d --network=${PROJECT} --name ${PROJECT}-db --hostname ${PROJECT}-db \ + -e "MYSQL_ALLOW_EMPTY_PASSWORD=yes" \ + -e "MYSQL_DATABASE=librenms" \ + -e "MYSQL_USER=librenms" \ + -e "MYSQL_PASSWORD=asupersecretpassword" \ + mariadb:10.2 \ + mysqld --sql-mode= --innodb-file-per-table=1 --lower-case-table-names=0 +docker run -d --network=${PROJECT} --link ${PROJECT}-db -p 8000:80 \ + -e "DB_HOST=${PROJECT}-db" \ + -e "DB_NAME=librenms" \ + -e "DB_USER=librenms" \ + -e "DB_PASSWORD=asupersecretpassword" \ + --name ${PROJECT} ${BUILD_TAG} +echo + +echo "### Waiting for ${PROJECT} to be up..." +TIMEOUT=$((SECONDS + RUNNING_TIMEOUT)) +while read LOGLINE; do + echo ${LOGLINE} + if [[ "${LOGLINE#*$RUNNING_LOG_CHECK}" != "$LOGLINE" ]]; then + echo "Container up!" + break + fi + if [[ $SECONDS -gt ${TIMEOUT} ]]; then + >&2 echo "ERROR: Failed to run ${PROJECT} container" + exit 1 + fi +done < <(docker logs -f ${PROJECT}) +echo + +if [ "${VERSION}" == "local" -o "${TRAVIS_PULL_REQUEST}" == "true" ]; then + echo "INFO: This is a PR or a local build, skipping push..." + exit 0 +fi +if [[ ! -z ${DOCKER_PASSWORD} ]]; then + echo "### Push to Docker Hub..." + echo "$DOCKER_PASSWORD" | docker login --username "$DOCKER_LOGIN" --password-stdin > /dev/null 2>&1 + docker tag ${BUILD_TAG} ${DOCKER_USERNAME}/${DOCKER_REPONAME}:${DOCKER_TAG} + docker tag ${BUILD_TAG} ${DOCKER_USERNAME}/${DOCKER_REPONAME}:${VERSION} + docker push ${DOCKER_USERNAME}/${DOCKER_REPONAME} + if [[ ! -z ${DOCKER_PASSWORD} ]]; then + echo "Call MicroBadger hook" + curl -X POST ${MICROBADGER_HOOK} + fi + echo +fi +if [[ ! -z ${QUAY_PASSWORD} ]]; then + echo "### Push to Quay..." + echo "$QUAY_PASSWORD" | docker login quay.io --username "$QUAY_LOGIN" --password-stdin > /dev/null 2>&1 + docker tag ${BUILD_TAG} quay.io/${QUAY_USERNAME}/${QUAY_REPONAME}:${DOCKER_TAG} + docker tag ${BUILD_TAG} quay.io/${QUAY_USERNAME}/${QUAY_REPONAME}:${VERSION} + docker push quay.io/${QUAY_USERNAME}/${QUAY_REPONAME} +fi