blockstream-satellite-api/.gitlab-ci.yml

184 lines
6.5 KiB
YAML
Raw Normal View History

2019-01-16 19:22:44 +01:00
variables:
GIT_SUBMODULE_STRATEGY: none
CI_DISPOSABLE_ENVIRONMENT: "true"
image: blockstream/gcloud-docker@sha256:78e68a98c5d6aa36eca45099bae38a1544a1688fd16b506fb914a29fdf6e4afa
2019-01-16 19:22:44 +01:00
stages:
- build
- plan
- deploy
before_script:
- TMPF=$(mktemp) || exit 1
- echo $GCLOUD_KEY > $TMPF
2019-01-16 19:22:44 +01:00
- export GOOGLE_APPLICATION_CREDENTIALS=$TMPF
- gcloud auth activate-service-account --key-file=$TMPF
- gcloud auth list
- gcloud --version
# Run tests and build docker images
2019-01-16 19:22:44 +01:00
build:
stage: build
image: blockstream/satapi-builder@sha256:a3a137b80a08325bdd50a7c59ae0429b933e7a36db0d74f6ae34af067dfdee2d
2019-01-16 19:22:44 +01:00
only:
- master@satellite/ionosphere
before_script:
- export CHARGE_ROOT=$CHARGE_ROOT_CI
2019-02-28 02:27:27 +01:00
- export REDIS_URI=$REDIS_URI_CI
2019-01-16 19:22:44 +01:00
script:
2019-02-28 02:27:27 +01:00
- bundle exec rake db:create && bundle exec rake db:schema:load && bundle exec rake db:migrate
2019-02-28 21:17:59 +01:00
- bundle exec ruby tests/tests.rb || { echo "Tests failed.."; exit 1; }
2019-01-29 20:28:40 +01:00
- echo $DOCKERHUB_PW | docker login -u $DOCKERHUB_USER --password-stdin
- docker pull blockstream/satellite-api:latest
- docker pull blockstream/satellite-api-sse:latest
- docker build --cache-from blockstream/satellite-api:latest -f Dockerfile -t blockstream/satellite-api:latest -t blockstream/satellite-api:$CI_COMMIT_SHA .
- docker push blockstream/satellite-api:latest
- docker push blockstream/satellite-api:$CI_COMMIT_SHA
- echo "Building Satellite API SSE image"
- docker build --cache-from blockstream/satellite-api-sse:latest -f Dockerfile.sse -t blockstream/satellite-api-sse:latest -t blockstream/satellite-api-sse:$CI_COMMIT_SHA sse/
- docker push blockstream/satellite-api-sse:$CI_COMMIT_SHA
- docker push blockstream/satellite-api-sse:latest
2019-01-16 19:22:44 +01:00
# Any newly-pushed, WIP branch will be ran through plan (keep in mind docker images are using the latest tag, which may be an older one since the current commit may not match an available image)
2019-01-18 23:57:15 +01:00
plan_satapi:
2019-01-16 19:22:44 +01:00
stage: plan
only:
- branches@satellite/ionosphere
except:
- cleanup_staging@satellite/ionosphere
- /^staging_.*/
- /^prod_.*/
2019-01-18 23:57:15 +01:00
- /^misc_.*/
2019-01-16 19:22:44 +01:00
script:
- (cd terraform
&& terraform init -input=false
&& terraform workspace select staging
&& terraform plan
-var "ionosphere_docker=blockstream/satellite-api:latest"
-var "ionosphere_sse_docker=blockstream/satellite-api-sse:latest"
2019-01-16 19:22:44 +01:00
-var "region=$REGION"
-var "zone=$ZONE"
-var "instance_type=$INSTANCE_TYPE"
-var "host=$HOST_STAGING"
-var "ssl_cert=$SSL_CERT_STAGING"
-var "timeout=$TIMEOUT"
-var "prom_service_acct=$PROM_SA"
-var "opsgenie_key=$OPSGENIE_KEY"
-var "rpcuser=$RPCUSER"
-var "rpcpass=$RPCPASS"
-input=false)
# This plan gets triggered only for miscellaneous branches/tags (i.e. tor and others), so make sure the branch/tag name starts with misc_
2019-01-18 23:57:15 +01:00
plan_misc:
stage: plan
only:
- /^misc_.*/
2019-01-19 00:15:42 +01:00
except:
- /^misc_v.*/
2019-01-18 23:57:15 +01:00
script:
- (echo -n "$V3_PK" > terraform/modules/tor/v3.pk)
- (echo -n "$V3_PUBK" > terraform/modules/tor/v3.pubk)
- (cd terraform
&& terraform init -input=false
&& terraform workspace select misc
&& terraform plan
-var "region=$REGION"
-var "zone=$ZONE"
-var "instance_type=$INSTANCE_TYPE"
2019-01-18 23:57:15 +01:00
-var "onion_host=$ONION_HOST"
-var "prom_allowed_source_ip=$PROMETHEUS_ALLOWED_SOURCE_IP"
2019-02-26 23:03:37 +01:00
-var "prom_service_acct=$PROM_SA"
-var "opsgenie_key=$OPSGENIE_KEY"
2019-02-26 23:03:37 +01:00
-var "satellite_lb=$SATELLITE_LB"
-var "satellite_api_lb=$SATELLITE_API_LB"
-var "satellite_api_lb_staging=$SATELLITE_API_LB_STAGING"
2019-01-18 23:57:15 +01:00
-input=false)
# Tag with staging_v.* to deploy staging (e.g. staging_v0.1.1)
2019-01-16 19:22:44 +01:00
deploy_staging:
stage: deploy
only:
- /^staging_v.*/
2019-01-16 19:22:44 +01:00
script:
- (cd terraform
&& terraform init -input=false
&& terraform workspace select staging
&& terraform apply
-var "ionosphere_docker=blockstream/satellite-api:$CI_COMMIT_SHA"
-var "ionosphere_sse_docker=blockstream/satellite-api-sse:$CI_COMMIT_SHA"
2019-01-16 19:22:44 +01:00
-var "region=$REGION"
-var "zone=$ZONE"
-var "instance_type=$INSTANCE_TYPE"
-var "host=$HOST_STAGING"
-var "ssl_cert=$SSL_CERT_STAGING"
-var "timeout=$TIMEOUT"
-var "prom_service_acct=$PROM_SA"
-var "opsgenie_key=$OPSGENIE_KEY"
-var "rpcuser=$RPCUSER"
-var "rpcpass=$RPCPASS"
-input=false -auto-approve)
# Tag with production_v.* to deploy production (e.g. production_v0.1.1)
2019-01-16 19:22:44 +01:00
deploy_production:
stage: deploy
only:
- /^prod_v.*/
2019-01-16 19:22:44 +01:00
script:
- (cd terraform
&& terraform init -input=false
&& terraform workspace select prod
&& terraform apply
-var "ionosphere_docker=blockstream/satellite-api:$CI_COMMIT_SHA"
-var "ionosphere_sse_docker=blockstream/satellite-api-sse:$CI_COMMIT_SHA"
2019-01-16 19:22:44 +01:00
-var "region=$REGION"
-var "zone=$ZONE"
-var "instance_type=$INSTANCE_TYPE"
-var "host=$HOST"
-var "ssl_cert=$SSL_CERT"
-var "timeout=$TIMEOUT"
-var "prom_service_acct=$PROM_SA"
-var "opsgenie_key=$OPSGENIE_KEY"
-var "rpcuser=$RPCUSER"
-var "rpcpass=$RPCPASS"
-input=false -auto-approve)
# This deploys only tags/branches starting with misc_v.* (i.e. tor and others)
2019-01-18 23:57:15 +01:00
deploy_misc:
stage: deploy
only:
- /^misc_v.*/
script:
- (echo -n "$V3_PK" > terraform/modules/tor/v3.pk)
- (echo -n "$V3_PUBK" > terraform/modules/tor/v3.pubk)
- (cd terraform
&& terraform init -input=false
&& terraform workspace select misc
2019-01-19 00:15:42 +01:00
&& terraform apply
2019-01-18 23:57:15 +01:00
-var "region=$REGION"
-var "zone=$ZONE"
-var "instance_type=$INSTANCE_TYPE"
2019-01-18 23:57:15 +01:00
-var "onion_host=$ONION_HOST"
-var "prom_allowed_source_ip=$PROMETHEUS_ALLOWED_SOURCE_IP"
2019-02-26 23:03:37 +01:00
-var "prom_service_acct=$PROM_SA"
-var "opsgenie_key=$OPSGENIE_KEY"
2019-02-26 23:03:37 +01:00
-var "satellite_lb=$SATELLITE_LB"
-var "satellite_api_lb=$SATELLITE_API_LB"
-var "satellite_api_lb_staging=$SATELLITE_API_LB_STAGING"
2019-01-18 23:57:15 +01:00
-input=false -auto-approve)
# Pushing to this branch destroys the staging infrastructure
2019-01-16 19:22:44 +01:00
cleanup_staging:
stage: deploy
image:
name: hashicorp/terraform:light
entrypoint: [""]
only:
- cleanup_staging@satellite/ionosphere
script:
- (cd terraform && terraform init -input=false &&
terraform workspace select staging &&
terraform destroy
-target module.blc.google_compute_instance_group_manager.blc
-auto-approve)