diff --git a/.gitlab-ci.v1.yml b/.gitlab-ci.v1.yml deleted file mode 100644 index 2794a64779c2d6089d54f626e5514219a70074c4..0000000000000000000000000000000000000000 --- a/.gitlab-ci.v1.yml +++ /dev/null @@ -1,121 +0,0 @@ -variables: - IMAGE_ORG: bogdandev - IMAGE_NAME: xpub-faraday - REPO_URL: https://gitlab.coko.foundation/xpub/xpub-faraday - -stages: - - build - - test - - review - - docker - - demo - -build-aws: - image: docker:stable - stage: build - services: - - docker:dind - variables: - IMAGE_REPO: faraday-qa - before_script: - - apk add --no-cache curl jq python py-pip - - pip install awscli - script: - - eval $(aws ecr get-login --no-include-email --region eu-west-1 | sed 's|https://||') - - docker build -t $IMAGE_REPO:$CI_COMMIT_SHA . - - docker tag $IMAGE_REPO:$CI_COMMIT_SHA $REPOSITORY_URL:latest - - docker push $REPOSITORY_URL:latest - -build: - image: docker:stable - stage: build - script: - - docker version - - docker build -t $IMAGE_ORG/$IMAGE_NAME:$CI_COMMIT_SHA . - - if [ -z "$DOCKERHUB_USERNAME" ] || [ -z "$DOCKERHUB_PASSWORD" ]; then echo "Not pushing" && exit 0; fi - - docker login -u $DOCKERHUB_USERNAME -p $DOCKERHUB_PASSWORD - - echo "Ignore warning! Cannot perform an interactive login from a non TTY device" - - docker push $IMAGE_ORG/$IMAGE_NAME:$CI_COMMIT_SHA - -lint: - image: $IMAGE_ORG/$IMAGE_NAME:$CI_COMMIT_SHA - stage: test - variables: - GIT_STRATEGY: none - script: - - cd ${HOME} - - npm run lint - -test: - image: $IMAGE_ORG/$IMAGE_NAME:$CI_COMMIT_SHA - stage: test - variables: - GIT_STRATEGY: none - script: - - cd ${HOME} - - npm run test - -# push:latest: -# image: docker:latest -# stage: docker -# script: -# - if [ -z "$DOCKERHUB_USERNAME" ] || [ -z "$DOCKERHUB_PASSWORD" ]; then echo "Not pushing" && exit 0; fi -# - docker login -u $DOCKERHUB_USERNAME -p $DOCKERHUB_PASSWORD -# - echo "Ignore warning! Cannot perform an interactive login from a non TTY device" -# - docker build -t $IMAGE_ORG/$IMAGE_NAME:latest --label COMMIT_SHA=$CI_COMMIT_SHA . -# - docker push $IMAGE_ORG/$IMAGE_NAME:latest -# only: -# - master - -demo:qa: - image: $IMAGE_ORG/$IMAGE_NAME:$CI_COMMIT_SHA - stage: demo - when: manual - variables: - PACKAGE_NAME: xpub-faraday - environment: - name: qa/$PACKAGE_NAME - url: https://xpub-faraday-qa.now.sh/ - script: - - npm i -g --unsafe-perm now - - cd ${HOME}/now - - echo "FROM ${IMAGE_ORG}/${IMAGE_NAME}:${CI_COMMIT_SHA}" >> Dockerfile - - now --public --docker --token $NOW_TOKEN -e AWS_S3_ACCESS_KEY=$AWS_S3_ACCESS_KEY -e AWS_S3_SECRET_KEY=$AWS_S3_SECRET_KEY -e AWS_S3_REGION=$AWS_S3_REGION -e AWS_S3_BUCKET=$AWS_S3_BUCKET -e AWS_SES_SECRET_KEY=$AWS_SES_SECRET_KEY -e AWS_SES_ACCESS_KEY=$AWS_SES_ACCESS_KEY -e AWS_SES_REGION=$AWS_SES_REGION -e EMAIL_SENDER=$EMAIL_SENDER -e secret=$SECRET -e DATABASE=$DATABASE -e DB_USER=$DB_USER -e DB_PASS=$DB_PASS -e DB_HOST=$DB_HOST - - now alias $NOW_URL xpub-faraday-qa --token $NOW_TOKEN - -demo:aws-qa: - image: $REPOSITORY_URL:latest - stage: demo - when: manual - variables: - PACKAGE_NAME: xpub-faraday - CLUSTER_NAME: faraday-cluster - environment: - name: qa/$PACKAGE_NAME - url: http://52.211.238.137/ - script: - - export AWS_REGION="eu-west-1" - - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID - - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY - - eval $(aws ecr get-login --no-include-email --region eu-west-1 | sed 's|https://||') - - apk --no-cache add --update python python-dev py-pip - - pip install ecs-deploy - - ecs deploy --region ${AWS_REGION} ${CLUSTER_NAME} ${IMAGE_REPO}:${CI_COMMIT_SHA} --tag ${CI_COMMIT_SHA} - -demo:staging: - image: $IMAGE_ORG/$IMAGE_NAME:$CI_COMMIT_SHA - stage: demo - when: manual - variables: - PACKAGE_NAME: xpub-faraday - only: - - master - environment: - name: demo/$PACKAGE_NAME - url: https://xpub-faraday.now.sh/ - script: - - npm i -g --unsafe-perm now - - cd ${HOME}/now - - echo "FROM ${IMAGE_ORG}/${IMAGE_NAME}:${CI_COMMIT_SHA}" >> Dockerfile - - now --public --docker --token $NOW_TOKEN -e AWS_S3_ACCESS_KEY=$AWS_S3_ACCESS_KEY -e AWS_S3_SECRET_KEY=$AWS_S3_SECRET_KEY -e AWS_S3_REGION=$AWS_S3_REGION -e AWS_S3_BUCKET=$AWS_S3_BUCKET -e AWS_SES_SECRET_KEY=$AWS_SES_SECRET_KEY -e AWS_SES_ACCESS_KEY=$AWS_SES_ACCESS_KEY -e AWS_SES_REGION=$AWS_SES_REGION -e EMAIL_SENDER=$EMAIL_SENDER -e secret=$SECRET -e DATABASE=$DATABASE_STAGING -e DB_USER=$DB_USER_STAGING -e DB_PASS=$DB_PASS_STAGING -e DB_HOST=$DB_HOST_STAGING - - now alias $NOW_URL xpub-faraday --token $NOW_TOKEN \ No newline at end of file diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 51cef627e56e5017e439d45151bbd2861da4a947..ef9eb44610b1c38c84cca2997353c38211416781 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,15 +1,4 @@ -variables: - IMAGE_TAG: latest - REV_BUCKET: faraday-rollback - CI_PROJECT_NAME: faraday-qa - CI_CLUSTER_NAME: faraday-cluster - CI_SERVICE_NAME: faraday-container-service - IMAGE_TAG: $CI_PROJECT_NAME:$CI_COMMIT_SHA - IMAGE_NAME: "$REPOSITORY_URL/$IMAGE_TAG" - image: docker:stable -services: - - docker:dind stages: - build @@ -24,7 +13,7 @@ build: - export AWS_REGION="eu-west-1" - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY - - export REPO=$REPOSITORY_URL + - export REPO=$CI_ECR_URL - apk update - apk --no-cache add --update curl python python-dev py-pip - pip install awscli --upgrade --user @@ -38,9 +27,10 @@ build: - docker push $REPO:latest environment: name: qa + url: $CI_ALB_URL lint: - image: $IMAGE_ORG/$IMAGE_NAME:$CI_COMMIT_SHA + image: $CI_ECR_URL:latest stage: test variables: GIT_STRATEGY: none @@ -49,7 +39,7 @@ lint: - npm run lint test: - image: $IMAGE_ORG/$IMAGE_NAME:$CI_COMMIT_SHA + image: $CI_ECR_URL:latest stage: test variables: GIT_STRATEGY: none @@ -57,8 +47,36 @@ test: - cd ${HOME} - npm run test -deploy:aws: +create-rollback: + stage: test + only: + - master + script: + - export AWS_REGION="eu-west-1" + - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID + - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY + - apk --no-cache add --update curl python python-dev py-pip jq + - pip install awscli --upgrade --user + - export PATH=~/.local/bin:/usr/bin/:$PATH + # Discover the ALB name + - ALB=`aws elbv2 describe-load-balancers --region ${AWS_REGION} --names ${CI_ALB_NAME} | jq .LoadBalancers[0].DNSName` + # Test Keepalive + - /usr/bin/curl --fail http://${ALB//'"'}/keepalive + # IF Keepalive return 200... + # Retrieve & Store this revision as 'last known successful revision' in S3 Bucket + - REV=`aws ecs describe-services --region ${AWS_REGION} --cluster ${CI_CLUSTER_NAME} --service ${CI_SERVICE_NAME} |jq -r '.services[0].deployments[0].taskDefinition'` + - echo successful revision is ${REV} Storing it in S3 Bucket + - echo ${REV} > /${CI_SERVICE_NAME} + # sync rev to S3 here + - aws s3 cp /${CI_SERVICE_NAME} s3://${CI_REV_BUCKET} + environment: + name: qa + url: $CI_ALB_URL + +deploy: stage: deploy + only: + - master script: - export AWS_REGION="eu-west-1" - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID @@ -66,48 +84,68 @@ deploy:aws: - apk --no-cache add --update python python-dev py-pip - pip install ecs-deploy # Deploy - - ecs deploy ${CI_CLUSTER_NAME} ${CI_SERVICE_NAME} --region ${AWS_REGION} --timeout 600 + - ecs deploy ${CI_CLUSTER_NAME} ${CI_SERVICE_NAME} --region ${AWS_REGION} --timeout 600 -e ${CI_CONTAINER_NAME} AWS_S3_ACCESS_KEY $AWS_S3_ACCESS_KEY -e ${CI_CONTAINER_NAME} AWS_S3_SECRET_KEY $AWS_S3_SECRET_KEY -e ${CI_CONTAINER_NAME} AWS_S3_REGION $AWS_S3_REGION -e ${CI_CONTAINER_NAME} AWS_S3_BUCKET $AWS_S3_BUCKET -e ${CI_CONTAINER_NAME} AWS_SES_SECRET_KEY $AWS_SES_SECRET_KEY -e ${CI_CONTAINER_NAME} AWS_SES_ACCESS_KEY $AWS_SES_ACCESS_KEY -e ${CI_CONTAINER_NAME} AWS_SES_REGION $AWS_SES_REGION -e ${CI_CONTAINER_NAME} EMAIL_SENDER $EMAIL_SENDER -e ${CI_CONTAINER_NAME} secret $SECRET -e ${CI_CONTAINER_NAME} DATABASE $DATABASE -e ${CI_CONTAINER_NAME} DB_USER $DB_USER -e ${CI_CONTAINER_NAME} DB_PASS $DB_PASS -e ${CI_CONTAINER_NAME} DB_HOST $DB_HOST environment: name: qa + url: $CI_ALB_URL -deploy:now: - image: $REPOSITORY_URL:latest +aws-qa: + stage: deploy + when: manual + only: + - develop + script: + - export AWS_REGION="eu-west-1" + - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID + - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY + - apk --no-cache add --update python python-dev py-pip + - pip install ecs-deploy + # Deploy + - ecs deploy ${CI_CLUSTER_NAME} ${CI_SERVICE_NAME} --region ${AWS_REGION} --timeout 600 -e ${CI_CONTAINER_NAME} AWS_S3_ACCESS_KEY $AWS_S3_ACCESS_KEY -e ${CI_CONTAINER_NAME} AWS_S3_SECRET_KEY $AWS_S3_SECRET_KEY -e ${CI_CONTAINER_NAME} AWS_S3_REGION $AWS_S3_REGION -e ${CI_CONTAINER_NAME} AWS_S3_BUCKET $AWS_S3_BUCKET -e ${CI_CONTAINER_NAME} AWS_SES_SECRET_KEY $AWS_SES_SECRET_KEY -e ${CI_CONTAINER_NAME} AWS_SES_ACCESS_KEY $AWS_SES_ACCESS_KEY -e ${CI_CONTAINER_NAME} AWS_SES_REGION $AWS_SES_REGION -e ${CI_CONTAINER_NAME} EMAIL_SENDER $EMAIL_SENDER -e ${CI_CONTAINER_NAME} secret $SECRET -e ${CI_CONTAINER_NAME} DATABASE $DATABASE -e ${CI_CONTAINER_NAME} DB_USER $DB_USER -e ${CI_CONTAINER_NAME} DB_PASS $DB_PASS -e ${CI_CONTAINER_NAME} DB_HOST $DB_HOST + environment: + name: qa + url: $CI_ALB_URL + +now.sh: + image: $CI_ECR_URL:latest stage: deploy when: manual - variables: - PACKAGE_NAME: xpub-faraday script: - npm i -g --unsafe-perm now - cd ${HOME}/now - - echo "FROM ${REPOSITORY_URL}:latest" >> Dockerfile + - echo "FROM ${CI_ECR_URL}:latest" >> Dockerfile - now --public --docker --token $NOW_TOKEN -e AWS_S3_ACCESS_KEY=$AWS_S3_ACCESS_KEY -e AWS_S3_SECRET_KEY=$AWS_S3_SECRET_KEY -e AWS_S3_REGION=$AWS_S3_REGION -e AWS_S3_BUCKET=$AWS_S3_BUCKET -e AWS_SES_SECRET_KEY=$AWS_SES_SECRET_KEY -e AWS_SES_ACCESS_KEY=$AWS_SES_ACCESS_KEY -e AWS_SES_REGION=$AWS_SES_REGION -e EMAIL_SENDER=$EMAIL_SENDER -e secret=$SECRET -e DATABASE=$DATABASE -e DB_USER=$DB_USER -e DB_PASS=$DB_PASS -e DB_HOST=$DB_HOST - now alias $NOW_URL xpub-faraday-qa --token $NOW_TOKEN + environment: + name: qa + url: https://xpub-faraday-qa.now.sh/ -test: - stage: test +rollback: + stage: rollback + when: on_failure + only: + - master script: - - export AWS_REGION="eu-west-1" - - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID - - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY - - apk --no-cache add --update curl python python-dev py-pip jq + - export AWS_REGION="us-east-1" + - export AWS_ACCESS_KEY_ID=$aws_access_key_id + - export AWS_SECRET_ACCESS_KEY=$aws_secret_access_key + - apk --no-cache add --update curl python python-dev py-pip - pip install awscli --upgrade --user - export PATH=~/.local/bin:/usr/bin/:$PATH - # Discover the ALB name - - ALB=`aws elbv2 describe-load-balancers --region ${AWS_REGION} --names ${CI_PROJECT_NAME} | jq .LoadBalancers[0].DNSName` - # Test Keepalive - - /usr/bin/curl --fail http://${ALB//'"'}/keepalive - # IF Keepalive return 200... - # Retrieve & Store this revision as 'last known successful revision' in S3 Bucket - - REV=`aws ecs describe-services --region ${AWS_REGION} --cluster ${CI_CLUSTER_NAME} --service ${CI_SERVICE_NAME} |jq -r '.services[0].deployments[0].taskDefinition'` - - echo successful revision is ${REV} Storing it in S3 Bucket - - echo ${REV} > /${CI_SERVICE_NAME} - # sync rev to S3 here - - aws s3 cp /${CI_SERVICE_NAME} s3://${REV_BUCKET} + - pip install ecs-deploy + - aws s3 cp s3://${CI_REV_BUCKET}/${CI_SERVICE_NAME} ./ + - REV=`cat ./${CI_SERVICE_NAME}` + - echo rev is $REV + - ecs deploy --region ${AWS_REGION} ${CLUSTER_NAME} ${CI_SERVICE_NAME} --task ${REV} -e ${CI_CONTAINER_NAME} AWS_S3_ACCESS_KEY $AWS_S3_ACCESS_KEY -e ${CI_CONTAINER_NAME} AWS_S3_SECRET_KEY $AWS_S3_SECRET_KEY -e ${CI_CONTAINER_NAME} AWS_S3_REGION $AWS_S3_REGION -e ${CI_CONTAINER_NAME} AWS_S3_BUCKET $AWS_S3_BUCKET -e ${CI_CONTAINER_NAME} AWS_SES_SECRET_KEY $AWS_SES_SECRET_KEY -e ${CI_CONTAINER_NAME} AWS_SES_ACCESS_KEY $AWS_SES_ACCESS_KEY -e ${CI_CONTAINER_NAME} AWS_SES_REGION $AWS_SES_REGION -e ${CI_CONTAINER_NAME} EMAIL_SENDER $EMAIL_SENDER -e ${CI_CONTAINER_NAME} secret $SECRET -e ${CI_CONTAINER_NAME} DATABASE $DATABASE -e ${CI_CONTAINER_NAME} DB_USER $DB_USER -e ${CI_CONTAINER_NAME} DB_PASS $DB_PASS -e ${CI_CONTAINER_NAME} DB_HOST $DB_HOST environment: name: qa + url: $CI_ALB_URL -rollback: +rollback-qa: stage: rollback + when: manual + only: + - develop script: - export AWS_REGION="us-east-1" - export AWS_ACCESS_KEY_ID=$aws_access_key_id @@ -116,10 +154,10 @@ rollback: - pip install awscli --upgrade --user - export PATH=~/.local/bin:/usr/bin/:$PATH - pip install ecs-deploy - - aws s3 cp s3://${REV_BUCKET}/${CI_SERVICE_NAME} ./ + - aws s3 cp s3://${CI_REV_BUCKET}/${CI_SERVICE_NAME} ./ - REV=`cat ./${CI_SERVICE_NAME}` - echo rev is $REV - - ecs deploy --region ${AWS_REGION} ${CLUSTER_NAME} ${CI_SERVICE_NAME} --task ${REV} + - ecs deploy --region ${AWS_REGION} ${CLUSTER_NAME} ${CI_SERVICE_NAME} --task ${REV} -e ${CI_CONTAINER_NAME} AWS_S3_ACCESS_KEY $AWS_S3_ACCESS_KEY -e ${CI_CONTAINER_NAME} AWS_S3_SECRET_KEY $AWS_S3_SECRET_KEY -e ${CI_CONTAINER_NAME} AWS_S3_REGION $AWS_S3_REGION -e ${CI_CONTAINER_NAME} AWS_S3_BUCKET $AWS_S3_BUCKET -e ${CI_CONTAINER_NAME} AWS_SES_SECRET_KEY $AWS_SES_SECRET_KEY -e ${CI_CONTAINER_NAME} AWS_SES_ACCESS_KEY $AWS_SES_ACCESS_KEY -e ${CI_CONTAINER_NAME} AWS_SES_REGION $AWS_SES_REGION -e ${CI_CONTAINER_NAME} EMAIL_SENDER $EMAIL_SENDER -e ${CI_CONTAINER_NAME} secret $SECRET -e ${CI_CONTAINER_NAME} DATABASE $DATABASE -e ${CI_CONTAINER_NAME} DB_USER $DB_USER -e ${CI_CONTAINER_NAME} DB_PASS $DB_PASS -e ${CI_CONTAINER_NAME} DB_HOST $DB_HOST environment: name: qa - when: on_failure \ No newline at end of file + url: $CI_ALB_URL \ No newline at end of file