diff --git a/.circleci/config.yml b/.circleci/config.yml index 37fce1d..3b38885 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,97 +1,93 @@ version: 2.1 +workflows: + version: 2 + devopsTP4: + jobs: + - install + - back-deploy-heroku + - docker-build-and-push jobs: - build: + install: docker: - - image: circleci/python:3.9-buster-node-browsers + - image: cimg/python:3.9.1 + - image: circleci/postgres:9.6.2 + working_directory: ~/repo steps: - checkout + - setup_remote_docker - restore_cache: - key: deps-{{ checksum "requirements/dev.txt"}}-{{ .Environment.CACHE_VERSION }} + keys: + - dependencies-{{ checksum "requirements/dev.txt" }}-{{ checksum "requirements/prod.txt" }} - run: - name: Install dependencies in a python venv + name: install python and dependencies command: | python3 -m venv venv . venv/bin/activate pip install -r requirements/dev.txt - - save_cache: - key: deps-{{ checksum "requirements/dev.txt"}}-{{ .Environment.CACHE_VERSION }} - paths: - - "venv" - test: - docker: - - image: circleci/python:3.9-buster-node-browsers - environment: - DATABASE_URL: postgresql://myUsr:somePwd@localhost:5432/psdb - FLASK_APP: autoapp.py - CONDUIT_SECRET: 'something-really-secret' - FLASK_DEBUG: 1 - - image: circleci/postgres:9.6.2-alpine - environment: - POSTGRES_USER: myUsr - POSTGRES_DB: psdb - POSTGRES_PASSWORD: somePwd - steps: - - checkout - - restore_cache: - key: deps-{{ checksum "requirements/dev.txt"}}-{{ .Environment.CACHE_VERSION }} - - run: - name: Waiting for postgresql - command : dockerize -wait tcp://localhost:5432 -timeout 1m - - run: - name: Launching tests + + - run: docker container run --name flask_db_test -e POSTGRES_PASSWORD=somePwd -e POSTGRES_USER=myUsr -p 5432:5432 -d postgres + - run: sleep 1 + - run: + name: db upgrade + environment: + FLASK_APP: /home/circleci/repo/autoapp.py + FLASK_DEBUG: 0 + POSTGRES_USER: postgres + POSTGRES_DB: bdtest + POSTGRES_PASSWORD: somePwd + POSTGRES_PORT: 5432 + DATABASE_URL: postgresql://postgres:somePwd@localhost:5432/postgres command: | . venv/bin/activate flask db upgrade - flask test - deploy-heroku: - docker: - - image : buildpack-deps:trusty + + # - run: + # name: flask test + # environment: + # FLASK_APP: /home/circleci/repo/autoapp.py + # FLASK_DEBUG: 0 + # POSTGRES_USER: postgres + # POSTGRES_DB: bdtest + # POSTGRES_PASSWORD: somePwd + # POSTGRES_PORT: 5432 + # DATABASE_URL: postgresql://postgres:somePwd@localhost:5432/postgres + # command: | + # . venv/bin/activate + # flask test + - run: docker container stop flask_db_test + - run: docker container rm flask_db_test + - run: unset DATABASE_URL + back-deploy-heroku: + docker: + - image: buildpack-deps:trusty steps: - checkout - run: - name: Deploy main to heroku - command: | - git config --global push.default matching - git push https://heroku:$HEROKU_API_KEY@git.heroku.com/$HEROKU_APP_NAME.git main + name: Heroku Deploy + command: git push https://heroku:$HEROKU_API_KEY@git.heroku.com/$HEROKU_APP_NAME.git HEAD:main - run: - name: Smoke test + name: Smoke Test command: | - HTTPCODE=`curl -s -o /dev/null -w "%{http_code}" https://$HEROKU_APP_NAME.herokuapp.com/api/articles` - if [ "$HTTPCODE" -ne 200 ];then - echo "heroku app not responding, failing deploy" - exit 1 + HTTPCODE=`curl -s -o /dev/null -w "%{http_code}" https://devops-final-heroku.herokuapp.com//` + if [[ "$HTTPCODE" -ne 200 ]]; then + echo "heroku app not responding, failing deploy" \ + exit 1; \ fi - docker-build-push: - working_directory: /dockerapp + docker-build-and-push: docker: - image: docker:17.05.0-ce-git steps: - checkout - setup_remote_docker - run: - name: dockerize the app + name: Build application Docker image command: | docker build --cache-from=app -t app . - - run: - name: Publish app to docker hub + - deploy: + name: Publish application to docker hub command: | - docker login -u $DOCKER_HUB_USERNAME -p $DOCKER_HUB_PASSWORD - docker tag app $DOCKER_HUB_USERNAME/tp-devops-final-api:$CIRCLE_BUILD_NUM - docker tag app $DOCKER_HUB_USERNAME/tp-devops-final-api:latest - docker push $DOCKER_HUB_USERNAME/tp-devops-final-api:$CIRCLE_BUILD_NUM - docker push $DOCKER_HUB_USERNAME/tp-devops-final-api:latest -workflows: - build_test_deploy: - jobs: - - build - - test: - requires: - - build - - deploy-heroku: - context: Heroku - requires: - - build - - docker-build-push: - context: Docker - requires: - - build + docker login -e $DOCKER_HUB_EMAIL -u $DOCKER_HUB_USER_ID -p $DOCKER_HUB_PWD + docker tag app $DOCKER_HUB_USER_ID/devops-back-final:$CIRCLE_BUILD_NUM + docker tag app $DOCKER_HUB_USER_ID/devops-back-final:latest + docker push $DOCKER_HUB_USER_ID/devops-back-final:$CIRCLE_BUILD_NUM + docker push $DOCKER_HUB_USER_ID/devops-back-final:latest \ No newline at end of file