diff --git a/.travis.yml b/.travis.yml index 72f8365a..c49d793b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,50 +1,62 @@ -sudo: required +language: generic -language: node_js -node_js: - - lts/* +env: + global: + - IMAGE_TAG=${TRAVIS_COMMIT::7} before_install: - # Removed command as pyenv is no longer found during deploy - #- pyenv global 2.7.14 # For removing SNIMissingWarning warnings - - curl https://install.meteor.com | /bin/sh - - export PATH="$HOME/.meteor:$PATH" - - pip install --user awscli + # Used in deploy.sh - export PATH=$PATH:$HOME/.local/bin - curl -o $HOME/.local/bin/ecs-cli https://s3.amazonaws.com/amazon-ecs-cli/ecs-cli-linux-amd64-latest && chmod +x $HOME/.local/bin/ecs-cli -cache: - directories: - - node_modules - -install: - - meteor npm install - -script: - - npm t +after_success: + - docker build -t $DOCKER_CI_REPO_NAME:latest . + # TODO: this should only happen really on branch = master + - docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"; + - docker tag $DOCKER_CI_REPO_NAME:latest $DOCKER_CI_REPO_NAME:$IMAGE_TAG + - docker push $DOCKER_CI_REPO_NAME:latest + - docker push $DOCKER_CI_REPO_NAME:$IMAGE_TAG matrix: include: - - env: DEPLOY=none + # add deploy stage for dev + - env: DEPLOY=dev + if: branch = master + deploy: + provider: script + script: TRAVIS_DOCKER_REPO_NAME=$DOCKER_CI_REPO_NAME + TRAVIS_PROFILE=$AWS_PROFILE_DEV + TRAVIS_AWS_ACCESS_KEY_ID=$AWS_ACCOUNT_USER_ID_DEV + TRAVIS_AWS_SECRET_ACCESS_KEY=$AWS_ACCOUNT_SECRET_DEV + TRAVIS_AWS_DEFAULT_REGION=$AWS_DEFAULT_REGION + ./deploy.sh + on: + branch: master - env: DEPLOY=demo if: tag IS present deploy: provider: script - skip_cleanup: true - script: AWS_ACCESS_KEY_ID=$AWS_915001051872_ID AWS_SECRET_ACCESS_KEY=$AWS_915001051872_SECRET ./deploy.sh -d + script: PROFILE=$AWS_PROFILE_DEMO + AWS_ACCESS_KEY_ID=$AWS_ACCOUNT_USER_ID_DEMO + AWS_SECRET_ACCESS_KEY=$AWS_ACCOUNT_SECRET_DEMO + AWS_REGION=$AWS_DEFAULT_REGION + ./deploy.sh -d on: tags: true - env: DEPLOY=prod if: tag IS present deploy: provider: script - skip_cleanup: true - script: AWS_ACCESS_KEY_ID=$AWS_192458993663_ID AWS_SECRET_ACCESS_KEY=$AWS_192458993663_SECRET ./deploy.sh -p && AWS_ACCESS_KEY_ID=$AWS_192458993663_ID AWS_SECRET_ACCESS_KEY=$AWS_192458993663_SECRET aws cloudfront create-invalidation --distribution-id E173XT6X8V4A18 --paths '/*' + script: PROFILE=$AWS_PROFILE_PROD + AWS_ACCESS_KEY_ID=$AWS_ACCOUNT_USER_ID_PROD + AWS_SECRET_ACCESS_KEY=$AWS_ACCOUNT_SECRET_PROD + AWS_REGION=$AWS_DEFAULT_REGION + ./deploy.sh -p && + # TODO distribition ID should probably be an ENV variable + AWS_ACCESS_KEY_ID=$AWS_ACCOUNT_USER_ID_PROD + AWS_SECRET_ACCESS_KEY=$AWS_ACCOUNT_SECRET_PROD + aws cloudfront create-invalidation --distribution-id E173XT6X8V4A18 --paths '/*' on: tags: true - -env: - global: - - COMMIT=${TRAVIS_COMMIT::7} diff --git a/Dockerfile b/Dockerfile index e456dd4d..6e74e928 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,24 +1,32 @@ -FROM node:8 AS builder +FROM node:8.15.1 AS builder -RUN curl -sL https://install.meteor.com | sed s/--progress-bar/-sL/g | /bin/sh -RUN mkdir /src /bundle -RUN chown -R node /src /bundle +ENV BUNDLE_DIR /home/node/bundle +ENV SRC_DIR /home/node/src +ENV TMP_DIR /home/node/tmp USER node:node -WORKDIR /src -COPY --chown=node:node . . +RUN mkdir -p $SRC_DIR $BUNDLE_DIR $TMP_DIR +COPY --chown=node:node . $SRC_DIR -RUN meteor npm install -RUN meteor build --architecture os.linux.x86_64 --directory /bundle -RUN cd /bundle/bundle/programs/server && npm install +RUN curl -o $TMP_DIR/meteor.sh 'https://install.meteor.com?release=1.8.1'; sh $TMP_DIR/meteor.sh -FROM node:8-slim +ENV PATH="/home/node/.meteor:${PATH}" +WORKDIR $SRC_DIR +RUN npm i +RUN meteor npm install --production +RUN meteor build --server-only --directory $BUNDLE_DIR +RUN cd ${BUNDLE_DIR}/bundle/programs/server && npm install + +FROM node:8.15.1-slim + +ENV APP_DIR /home/node/app +ENV BUNDLE_DIR /home/node/bundle USER node:node -COPY --from=builder /bundle /app -WORKDIR /app/bundle +COPY --from=builder $BUNDLE_DIR $APP_DIR +WORKDIR $APP_DIR/bundle ENV PORT 3000 EXPOSE 3000 diff --git a/buildspec.yml b/buildspec.yml deleted file mode 100644 index 8fc70167..00000000 --- a/buildspec.yml +++ /dev/null @@ -1,39 +0,0 @@ ---- -version: 0.2 - -env: - variables: - IMAGE_REPO_NAME: uneet/frontend - parameter-store: - DOCKER_USERNAME: DOCKER_USERNAME - DOCKER_PASSWORD: DOCKER_PASSWORD - -phases: - pre_build: - commands: - - echo Logging into Docker Hub... - - docker login --username $DOCKER_USERNAME --password $DOCKER_PASSWORD - - IMAGE_TAG=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7) - - install: - runtime-versions: - docker: 18 - - build: - commands: - - echo Build starting on `date` - - echo Build the Docker image... - - 'sed -i "s,<\!-- COMMIT: -->,<\!-- COMMIT: $CODEBUILD_RESOLVED_SOURCE_VERSION -->,g" client/main.html' - - docker build -t $IMAGE_REPO_NAME:latest . - - docker tag $IMAGE_REPO_NAME:latest $IMAGE_REPO_NAME:$IMAGE_TAG - - post_build: - commands: - - test "$CODEBUILD_BUILD_SUCCEEDING" == "1" || exit 1 - - echo Pushing build to Docker Hub... - - docker push $IMAGE_REPO_NAME:latest - - docker push $IMAGE_REPO_NAME:$IMAGE_TAG - - printf '[{"name":"%s","imageUri":"%s"}]' meteor $IMAGE_REPO_NAME:$IMAGE_TAG > $CODEBUILD_SRC_DIR/imagedefinitions.json - -artifacts: - files: imagedefinitions.json