diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000000000000000000000000000000000000..c7d40f2d6fc93073b67e875d83885fcee01ecc41 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,82 @@ +image: docker:latest + +services: + - docker:dind + +before_script: + # Add Docker-compose to Docker image + - apk add --no-cache py-pip + - pip install docker-compose==1.23.2 + - docker info + - docker-compose --version + +stages: + - test + - build + - deploy + +# variables: +# HEROKU_API_KEY: //copy your heroku api key +# HEROKU_STAGING_APP: //copy your heroku staging app name here +# HEROKU_PRODUCTION_APP: //copy your production app name here +# POSTGRES_USER: postgres +# REGISTRY_NAME: registry.gitlab.com/your gitlab project's name +# CONTAINER_IMAGE: REGISTRY_NAME:$CI_BUILD_REF_NAME + +# Variables that are needed to be set on GitLab's settings +# REGISTRY_USER : docker hub username +# REGISTRY_PASSWORD : docker hub password +# REGISTRY_REPO_NAME : docker hub repo name +# DATABASE_URL_STAGING +# DATABASE_URL_PRODUCTION +# HEROKU_STAGING_APP +# HEROKU_PRODUCTION_APP +# HEROKU_API_KEY + +variables: + REGISTRY_NAME: $REGISTRY_USER/$REGISTRY_REPO_NAME + CONTAINER_IMAGE: $REGISTRY_USER/$REGISTRY_REPO_NAME:$CI_BUILD_REF_NAME + +test: + stage: test + script: + - echo "Starting tests" + - docker-compose run web sh -c "coverage run --include="./app/*" manage.py test" + - docker-compose run web sh -c "coverage report -m" + +build: + stage: build + script: + - echo "Building the app" + # uncomment below if using gitlab container registry + # - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN registry.gitlab.com + - echo "$REGISTRY_PASSWORD" | docker login -u $REGISTRY_USER --password-stdin + - docker build -t $CONTAINER_IMAGE . + - docker push $CONTAINER_IMAGE + +deploy: + stage: deploy + only: + - staging + - master + script: + - echo "Deploying the app" + - > + if [[ "${CI_COMMIT_REF_NAME}" == "staging" ]]; + then + DATABASE_URL=$DATABASE_URL_STAGING + HEROKU_APP=$HEROKU_STAGING_APP + elif [[ "${CI_COMMIT_REF_NAME}" == "master" ]]; + then + DATABASE_URL=$DATABASE_URL_PRODUCTION + HEROKU_APP=$HEROKU_PRODUCTION_APP + fi + # uncomment below if using gitlab container registry + # - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN registry.gitlab.com + - echo "$REGISTRY_PASSWORD" | docker login -u $REGISTRY_USER --password-stdin + - docker login --username=_ --password=$HEROKU_API_KEY registry.heroku.com + - docker pull $CONTAINER_IMAGE + - docker tag $CONTAINER_IMAGE registry.heroku.com/$HEROKU_APP/web + - docker-compose run -e DATABASE_URL=$DATABASE_URL deploy sh -c "python manage.py migrate" + - docker push registry.heroku.com/$HEROKU_APP/web + - docker run --rm -e HEROKU_API_KEY=$HEROKU_API_KEY wingrunr21/alpine-heroku-cli container:release web --app $HEROKU_APP