Attempt to build review apps for dev/* branches
This commit is contained in:
		
							parent
							
								
									a81956359b
								
							
						
					
					
						commit
						de17d506a4
					
				
					 2 changed files with 303 additions and 14 deletions
				
			
		|  | @ -1,5 +1,10 @@ | ||||||
|  | variables: | ||||||
|  |   2019_CONTAINER_IMAGE=asia.gcr.io/linuxconfsydney/symposion_app_2019 | ||||||
|  |   DOCKER_DRIVER: overlay2 | ||||||
|  | 
 | ||||||
| build_image: | build_image: | ||||||
|   image: docker:git |   image: docker:git | ||||||
|  |   stage: build | ||||||
|   services: |   services: | ||||||
|   - docker:dind |   - docker:dind | ||||||
|   script: |   script: | ||||||
|  | @ -30,21 +35,36 @@ k8s-prod-deploy: | ||||||
|   only: |   only: | ||||||
|   - master |   - master | ||||||
|   environment: |   environment: | ||||||
|     name: prod |     name: 2019/prod | ||||||
|     url: https://rego.linux.conf.au |     url: https://rego.linux.conf.au | ||||||
| 
 | 
 | ||||||
|  | build_review_deployment: | ||||||
|  |   image: sparkprime/jsonnet | ||||||
|  |   services: | ||||||
|  |     - docker:dind | ||||||
|  |   stage: build | ||||||
|  |   script: | ||||||
|  |     - docker run -v ${PWD}/k8s:/src sparkprime/jsonnet /src/deployment_template.jsonnet --tla-str slug="${CI_COMMIT_REF_SLUG}" > ${CI_COMMIT_REF_SLUG}.json | ||||||
|  |   artifacts: | ||||||
|  |     paths: | ||||||
|  |       - ${CI_COMMIT_REF_SLUG}.json  | ||||||
|  | 
 | ||||||
| build_2019_dev_image: | build_2019_dev_image: | ||||||
|   image: docker:git |   image: docker:git | ||||||
|  |   stage: build | ||||||
|   services: |   services: | ||||||
|   - docker:dind |   - docker:dind | ||||||
|   script: |   script: | ||||||
|     - docker build -f docker/Dockerfile -t asia.gcr.io/linuxconfsydney/symposion_app_2019:$CI_COMMIT_SHA . |  | ||||||
|     - docker build --build-arg CI_COMMIT_SHA=$CI_COMMIT_SHA -f docker/Dockerfile.dev -t asia.gcr.io/linuxconfsydney/symposion_app_2019_dev:$CI_COMMIT_SHA . |  | ||||||
|     - docker login -u _json_key -p "$GOOGLE_KEY" https://asia.gcr.io |     - docker login -u _json_key -p "$GOOGLE_KEY" https://asia.gcr.io | ||||||
|     - docker push asia.gcr.io/linuxconfsydney/symposion_app_2019:$CI_COMMIT_SHA |     - docker pull "${2019_CONTAINER_IMAGE}"_dev:latest || true | ||||||
|     - docker push asia.gcr.io/linuxconfsydney/symposion_app_2019_dev:$CI_COMMIT_SHA |     - docker build --cache-from "${2019_CONTAINER_IMAGE}"_dev:latest -f docker/Dockerfile -t "${2019_CONTAINER_IMAGE}":$CI_COMMIT_SHA . | ||||||
|     - docker tag asia.gcr.io/linuxconfsydney/symposion_app_2019_dev:$CI_COMMIT_SHA asia.gcr.io/linuxconfsydney/symposion_app_2019_dev:latest |     - docker build --build-arg CI_COMMIT_SHA=$CI_COMMIT_SHA -f docker/Dockerfile.dev -t "${2019_CONTAINER_IMAGE}"_dev:$CI_COMMIT_SHA . | ||||||
|     - docker push asia.gcr.io/linuxconfsydney/symposion_app_2019_dev:latest |     - docker push "${2019_CONTAINER_IMAGE}":$CI_COMMIT_SHA | ||||||
|  |     - docker push "${2019_CONTAINER_IMAGE}"_dev:$CI_COMMIT_SHA | ||||||
|  |     - docker tag "${2019_CONTAINER_IMAGE}"_dev:$CI_COMMIT_SHA "${2019_CONTAINER_IMAGE}"_dev:latest | ||||||
|  |     - docker tag "${2019_CONTAINER_IMAGE}"_dev:$CI_COMMIT_SHA "${2019_CONTAINER_IMAGE}"_dev:$CI_COMMIT_REF_SLUG | ||||||
|  |     - docker push "${2019_CONTAINER_IMAGE}"_dev:latest | ||||||
|  |     - docker push "${2019_CONTAINER_IMAGE}"_dev:${CI_COMMIT_REF_SLUG} | ||||||
|   except: |   except: | ||||||
|     - master |     - master | ||||||
| 
 | 
 | ||||||
|  | @ -56,14 +76,46 @@ k8s-2019_dev-deploy: | ||||||
|   - kubectl config set-cluster cluster --server="${KUBE_SERVER}" --embed-certs=true --certificate-authority=cert.crt |   - kubectl config set-cluster cluster --server="${KUBE_SERVER}" --embed-certs=true --certificate-authority=cert.crt | ||||||
|   - kubectl config set-context cluster --cluster=cluster --namespace=rego-dev --user=gitlab-sa |   - kubectl config set-context cluster --cluster=cluster --namespace=rego-dev --user=gitlab-sa | ||||||
|   - kubectl config use-context cluster |   - kubectl config use-context cluster | ||||||
|   - kubectl --token "${GL_KUBE_TOKEN}" set image deployment/symposion-app symposion-app=asia.gcr.io/linuxconfsydney/symposion_app_2019_dev:$CI_COMMIT_SHA |   - kubectl --token "${GL_KUBE_TOKEN}" set image deployment/symposion-app symposion-app="${2019_CONTAINER_IMAGE}"_dev:$CI_COMMIT_SHA | ||||||
|   only: |   only: | ||||||
|   - dev/2019 |   - dev/2019 | ||||||
|   - dev/* |  | ||||||
|   environment: |   environment: | ||||||
|     name: dev_2019 |     name: 2019/dev | ||||||
|     url: https://dev.lca2019.org |     url: https://dev.lca2019.org | ||||||
| 
 | 
 | ||||||
|  | k8s-2019_dev_review-deploy: | ||||||
|  |   image: google/cloud-sdk | ||||||
|  |   stage: deploy | ||||||
|  |   script: | ||||||
|  |   - echo "${CA_CERT}" > cert.crt | ||||||
|  |   - kubectl config set-cluster cluster --server="${KUBE_SERVER}" --embed-certs=true --certificate-authority=cert.crt | ||||||
|  |   - kubectl config set-context cluster --cluster=cluster --namespace=rego-dev --user=gitlab-sa | ||||||
|  |   - kubectl config use-context cluster | ||||||
|  |   - kubectl --token "${GL_KUBE_TOKEN}" apply -f ${CI_COMMIT_REF_SLUG}.json | ||||||
|  |   only: | ||||||
|  |   - /^dev\/.*$/ | ||||||
|  |   environment: | ||||||
|  |     name: 2019/dev/${CI_COMMIT_REF_SLUG} | ||||||
|  |     url: https://${CI_COMMIT_REF_SLUG}.dev.lca2019.org | ||||||
|  |     on_stop: k8s-2019_dev_review-stop-deploy | ||||||
|  | 
 | ||||||
|  | k8s-2019_dev_review-stop-deploy: | ||||||
|  |   image: google/cloud-sdk | ||||||
|  |   stage: deploy | ||||||
|  |   script: | ||||||
|  |   - echo "${CA_CERT}" > cert.crt | ||||||
|  |   - kubectl config set-cluster cluster --server="${KUBE_SERVER}" --embed-certs=true --certificate-authority=cert.crt | ||||||
|  |   - kubectl config set-context cluster --cluster=cluster --namespace=rego-dev --user=gitlab-sa | ||||||
|  |   - kubectl config use-context cluster | ||||||
|  |   - kubectl --token "${GL_KUBE_TOKEN}" delete -f ${CI_COMMIT_REF_SLUG}.json | ||||||
|  |   only: | ||||||
|  |   - /^dev\/.*$/ | ||||||
|  |   when: manual | ||||||
|  |   environment: | ||||||
|  |     name: 2019/dev/${CI_COMMIT_REF_SLUG} | ||||||
|  |     url: https://${CI_COMMIT_REF_SLUG}.dev.lca2019.org | ||||||
|  |     action: stop | ||||||
|  | 
 | ||||||
| k8s-2019_staging-deploy: | k8s-2019_staging-deploy: | ||||||
|   image: google/cloud-sdk |   image: google/cloud-sdk | ||||||
|   stage: deploy |   stage: deploy | ||||||
|  | @ -72,12 +124,12 @@ k8s-2019_staging-deploy: | ||||||
|   - kubectl config set-cluster cluster --server="${KUBE_SERVER}" --embed-certs=true --certificate-authority=cert.crt |   - kubectl config set-cluster cluster --server="${KUBE_SERVER}" --embed-certs=true --certificate-authority=cert.crt | ||||||
|   - kubectl config set-context cluster --cluster=cluster --namespace=lca2019-staging --user=gitlab-ci |   - kubectl config set-context cluster --cluster=cluster --namespace=lca2019-staging --user=gitlab-ci | ||||||
|   - kubectl config use-context cluster |   - kubectl config use-context cluster | ||||||
|   - kubectl --token "${GL_KUBE_TOKEN}" set image deployment/symposion-app symposion-app=asia.gcr.io/linuxconfsydney/symposion_app_2019_dev:$CI_COMMIT_SHA |   - kubectl --token "${GL_KUBE_TOKEN}" set image deployment/symposion-app symposion-app="${2019_CONTAINER_IMAGE}"_dev:$CI_COMMIT_SHA | ||||||
|   when: manual |   when: manual | ||||||
|   only: |   only: | ||||||
|   - dev/2019 |   - dev/2019 | ||||||
|   environment: |   environment: | ||||||
|     name: staging |     name: 2019/staging | ||||||
|     url: https://staging.lca2019.org |     url: https://staging.lca2019.org | ||||||
| 
 | 
 | ||||||
| .docs_template: &sphinx | .docs_template: &sphinx | ||||||
|  | @ -101,6 +153,6 @@ pages: | ||||||
|     name: docs |     name: docs | ||||||
|     url: https://laconfdev.gitlab.io/symposion_app/ |     url: https://laconfdev.gitlab.io/symposion_app/ | ||||||
| 
 | 
 | ||||||
| test_sphinx: | build_sphinx: | ||||||
|   <<: *sphinx |   <<: *sphinx | ||||||
|   stage: test |   stage: build | ||||||
|  |  | ||||||
							
								
								
									
										237
									
								
								k8s/deployment_template.jsonnet
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										237
									
								
								k8s/deployment_template.jsonnet
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,237 @@ | ||||||
|  | function (slug) { | ||||||
|  | 
 | ||||||
|  |   local namespace = slug + "-rego-dev", | ||||||
|  |   local domain = slug + ".dev.lca2019.org", | ||||||
|  |   local tls_certname = slug + "-dev-lca2019-org", | ||||||
|  |   local tls_secret = tls_certname + "-tls", | ||||||
|  |    | ||||||
|  |   "apiVersion": "v1", | ||||||
|  |   "items": [ | ||||||
|  |     { | ||||||
|  |       "apiVersion": "v1", | ||||||
|  |       "kind": "Namespace", | ||||||
|  |       "metadata": { | ||||||
|  |         "name": namespace, | ||||||
|  |         "namespace": "", | ||||||
|  |       }, | ||||||
|  |       "spec": { | ||||||
|  |         "finalizers": [ | ||||||
|  |           "kubernetes" | ||||||
|  |         ] | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "apiVersion": "certmanager.k8s.io/v1alpha1", | ||||||
|  |       "kind": "Certificate", | ||||||
|  |       "metadata": { | ||||||
|  |         "name": tls_certname, | ||||||
|  |         "namespace": namespace | ||||||
|  |       }, | ||||||
|  |       "spec": { | ||||||
|  |         "acme": { | ||||||
|  |           "config": [ | ||||||
|  |             { | ||||||
|  |               "domains": [ | ||||||
|  |                 domain | ||||||
|  |               ], | ||||||
|  |               "http01": { | ||||||
|  |                 "ingress": "", | ||||||
|  |                 "ingressClass": "nginx" | ||||||
|  |               } | ||||||
|  |             } | ||||||
|  |           ] | ||||||
|  |         }, | ||||||
|  |         "commonName": domain, | ||||||
|  |         "issuerRef": { | ||||||
|  |           "kind": "ClusterIssuer", | ||||||
|  |           "name": "letsencrypt-prod" | ||||||
|  |         }, | ||||||
|  |         "secretName": tls_secret | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "apiVersion": "extensions/v1beta1", | ||||||
|  |       "kind": "Ingress", | ||||||
|  |       "metadata": { | ||||||
|  |         "name": "symposion-app-ingress", | ||||||
|  |         "namespace": namespace | ||||||
|  |       }, | ||||||
|  |       "spec": { | ||||||
|  |         "backend": { | ||||||
|  |           "serviceName": "symposion-app", | ||||||
|  |           "servicePort": 80 | ||||||
|  |         }, | ||||||
|  |         "rules": [ | ||||||
|  |           { | ||||||
|  |             "host": domain, | ||||||
|  |             "http": { | ||||||
|  |               "paths": [ | ||||||
|  |                 { | ||||||
|  |                   "backend": { | ||||||
|  |                     "serviceName": "symposion-app", | ||||||
|  |                     "servicePort": 8000 | ||||||
|  |                   }, | ||||||
|  |                   "path": "/" | ||||||
|  |                 } | ||||||
|  |               ] | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  |         ], | ||||||
|  |         "tls": [ | ||||||
|  |           { | ||||||
|  |             "hosts": [ | ||||||
|  |               domain | ||||||
|  |             ], | ||||||
|  |             "secretName": tls_secret | ||||||
|  |           } | ||||||
|  |         ] | ||||||
|  |       }, | ||||||
|  |       "status": { | ||||||
|  |         "loadBalancer": { | ||||||
|  |           "ingress": [ | ||||||
|  |             { | ||||||
|  |               "ip": "127.0.0.1" | ||||||
|  |             } | ||||||
|  |           ] | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "apiVersion": "v1", | ||||||
|  |       "kind": "Service", | ||||||
|  |       "metadata": { | ||||||
|  |         "labels": { | ||||||
|  |           "app": "symposion-app" | ||||||
|  |         }, | ||||||
|  |         "name": "symposion-app", | ||||||
|  |         "namespace": namespace | ||||||
|  |       }, | ||||||
|  |       "spec": { | ||||||
|  |         "ports": [ | ||||||
|  |           { | ||||||
|  |             "port": 8000, | ||||||
|  |             "protocol": "TCP", | ||||||
|  |             "targetPort": 8000 | ||||||
|  |           } | ||||||
|  |         ], | ||||||
|  |         "selector": { | ||||||
|  |           "app": "symposion-app" | ||||||
|  |         }, | ||||||
|  |         "sessionAffinity": "None", | ||||||
|  |         "type": "ClusterIP" | ||||||
|  |       }, | ||||||
|  |       "status": { | ||||||
|  |         "loadBalancer": {} | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "apiVersion": "extensions/v1beta1", | ||||||
|  |       "kind": "Deployment", | ||||||
|  |       "metadata": { | ||||||
|  |         "labels": { | ||||||
|  |           "app": "symposion-app" | ||||||
|  |         }, | ||||||
|  |         "name": "symposion-app", | ||||||
|  |         "namespace": namespace | ||||||
|  |       }, | ||||||
|  |       "spec": { | ||||||
|  |         "replicas": 1, | ||||||
|  |         "revisionHistoryLimit": 1, | ||||||
|  |         "selector": { | ||||||
|  |           "matchLabels": { | ||||||
|  |             "app": "symposion-app" | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         "strategy": { | ||||||
|  |           "rollingUpdate": { | ||||||
|  |             "maxSurge": 1, | ||||||
|  |             "maxUnavailable": 1 | ||||||
|  |           }, | ||||||
|  |           "type": "RollingUpdate" | ||||||
|  |         }, | ||||||
|  |         "template": { | ||||||
|  |           "metadata": { | ||||||
|  |             "labels": { | ||||||
|  |               "app": "symposion-app" | ||||||
|  |             } | ||||||
|  |           }, | ||||||
|  |           "spec": { | ||||||
|  |             "containers": [ | ||||||
|  |               { | ||||||
|  |                 "env": [ | ||||||
|  |                   { | ||||||
|  |                     "name": "SYMPOSION_APP_DEBUG", | ||||||
|  |                     "value": "1" | ||||||
|  |                   }, | ||||||
|  |                   { | ||||||
|  |                     "name": "DJANGO_SECRET_KEY", | ||||||
|  |                     "value": "paGhahQuain5ohYoh0moorai" | ||||||
|  |                   }, | ||||||
|  |                   { | ||||||
|  |                     "name": "DATABASE_URL", | ||||||
|  |                     "value": "sqlite:////tmp/symposion.sqlite" | ||||||
|  |                   }, | ||||||
|  |                   { | ||||||
|  |                     "name": "GCS_BUCKET", | ||||||
|  |                     "value": "CEA51A5-A613-4AEF-A9FB-D0A57D77C13B" | ||||||
|  |                   }, | ||||||
|  |                   { | ||||||
|  |                     "name": "GOOGLE_APPLICATION_CREDENTIALS", | ||||||
|  |                     "value": "/dev/null" | ||||||
|  |                   }, | ||||||
|  |                   { | ||||||
|  |                     "name": "STRIPE_PUBLIC_KEY", | ||||||
|  |                     "value": "5CEA51A5-A613-4AEF-A9FB-D0A57D77C13B" | ||||||
|  |                   }, | ||||||
|  |                   { | ||||||
|  |                     "name": "STRIPE_SECRET_KEY", | ||||||
|  |                     "value": "5CEA51A5-A613-4AEF-A9FB-D0A57D77C13B" | ||||||
|  |                   }, | ||||||
|  |                 ], | ||||||
|  |                 "image": "asia.gcr.io/linuxconfsydney/symposion_app_2019_dev:" + slug, | ||||||
|  |                 "imagePullPolicy": "Always", | ||||||
|  |                 "livenessProbe": { | ||||||
|  |                   "failureThreshold": 3, | ||||||
|  |                   "httpGet": { | ||||||
|  |                     "path": "/admin/login/", | ||||||
|  |                     "port": 8000, | ||||||
|  |                     "scheme": "HTTP" | ||||||
|  |                   }, | ||||||
|  |                   "initialDelaySeconds": 120, | ||||||
|  |                   "periodSeconds": 10, | ||||||
|  |                   "successThreshold": 1, | ||||||
|  |                   "timeoutSeconds": 2 | ||||||
|  |                 }, | ||||||
|  |                 "name": "symposion-app", | ||||||
|  |                 "ports": [ | ||||||
|  |                   { | ||||||
|  |                     "containerPort": 8000, | ||||||
|  |                     "protocol": "TCP" | ||||||
|  |                   } | ||||||
|  |                 ], | ||||||
|  |                 "resources": {}, | ||||||
|  |                 "terminationMessagePath": "/dev/termination-log", | ||||||
|  |                 "terminationMessagePolicy": "File" | ||||||
|  |               } | ||||||
|  |             ], | ||||||
|  |             "dnsPolicy": "ClusterFirst", | ||||||
|  |             "restartPolicy": "Always", | ||||||
|  |             "schedulerName": "default-scheduler", | ||||||
|  |             "securityContext": {}, | ||||||
|  |             "terminationGracePeriodSeconds": 30, | ||||||
|  |             "volumes": [ | ||||||
|  |               { | ||||||
|  |                 "hostPath": { | ||||||
|  |                   "path": "/etc/ssl/certs", | ||||||
|  |                   "type": "" | ||||||
|  |                 }, | ||||||
|  |                 "name": "ssl-certs" | ||||||
|  |               } | ||||||
|  |             ] | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   ], | ||||||
|  |   "kind": "List" | ||||||
|  | } | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 James Polley
						James Polley