Gitlab review apps mit dem aws cdk
Mit gitlab review apps kann für jeden merge request ein environment gestartet werden um die gemachten änderungen direkt zu testen, ohne den MR extra auschecken zu müssen. Das erlaubt für schnellere reviews und außerdem leuten ohne programmierkenntnisse, z.B. aus dem Marketing feedback am MR zu geben.
Ich habe mal versucht, review apps für unserer Homepage zu aktivieren.
Da wir unsere Homepage mit dem aws cdk deployen, war das gar nicht so schwierig:
-
ich musste die cdk.ts anpassen, um den stack dynamisch anhand von environment variablen zu erstellen:
const ENV_NAME = process.env.HOMEPAGE_ENV_NAME; const ENV_TYPE = process.env.HOMEPAGE_ENV_TYPE; if (ENV_NAME && ENV_TYPE) { new CdkStack(app, ENV_NAME, { tags: { Project: "Homepage", responsible: "lucas.meurer@newcubator.com", environment: ENV_TYPE, }, }); } else { throw new Error( "Missing environment variables: HOMEPAGE_ENV_NAME, HOMEPAGE_ENV_TYPE", ); }
-
Scripts in der package.json anpassen:
"cdk": "cdk", "cdk:deploy": "cdk deploy ${HOMEPAGE_ENV_NAME} --require-approval never --outputs-file ./cdk.out.json", "cdk:destroy": "cdk destroy ${HOMEPAGE_ENV_NAME} --require-approval never",
-
Ein script schreiben welches den output vom cdk parsed um an die deployte url zu kommen:
cat cdk.out.json DYNAMIC_ENVIRONMENT_URL=https://$(cat cdk.out.json | jq -r --arg env_name "$HOMEPAGE_ENV_NAME" '.[$env_name].AppRunnerServiceURL') echo "Deployed successfully to $DYNAMIC_ENVIRONMENT_URL 🚀" echo "DYNAMIC_ENVIRONMENT_URL=$DYNAMIC_ENVIRONMENT_URL" >> deploy.env
-
Die gitlab-ci.yml anpassen um entsprechende pipelines zu erstellen:
.deploy: extends: .default stage: deploy services: - docker:24.0.5-dind variables: DOCKER_HOST: tcp://docker:2375 script: - npm run cdk:deploy - ./scripts/parse_cdk_output.sh. # sucht in der cdk.out.json nach der deployten url artifacts: reports: dotenv: deploy.env # lässt gitlab wissen, das es hier nach evironment variablen schauen soll environment: url: $DYNAMIC_ENVIRONMENT_URL. # nach dem job wird dies aus der deploy.env geholt deployReview: extends: .deploy needs: ["build-and-push"] except: - main variables: HOMEPAGE_ENV_NAME: NextLevelHomepageReview-$CI_COMMIT_REF_SLUG HOMEPAGE_ENV_TYPE: preview environment: name: Review/$CI_COMMIT_REF_NAME deployment_tier: testing on_stop: stopReview auto_stop_in: 1 week resource_group: preview stopReview: stage: deploy when: manual needs: [] except: - main services: - docker:24.0.5-dind variables: DOCKER_HOST: tcp://docker:2375 HOMEPAGE_ENV_NAME: NextLevelHomepageReview-$CI_COMMIT_REF_SLUG script: - npm run cdk:destroy environment: name: Review/$CI_COMMIT_REF_NAME action: stop on_stop: stopReview resource_group: preview
Sobald newcubator/marketing/homepage!913 (merged) gemerged ist, sind die review apps aktiv.
Aktuell sind die domains der review apps standart aws app runner domains, also z.B. https://mt2arkm2a4.eu-west-1.awsapprunner.com/. Da könnte man in zukunft nochmal schauen ob das besser geht, idealerweise so was wie review-env-name.review.newcubator.com oder so.
Zu bedenken ist natürlich, dass durch die zusätzlichen environments zusätzliche kosten entstehen, das müssen wir nochmal beobachten und eventuell die lebensdauer der environments reduzieren oder die evironments nur manuell deployen.
Standort Hannover
newcubator GmbH
Bödekerstraße 22
30161 Hannover
Standort Dortmund
newcubator GmbH
Westenhellweg 85-89
44137 Dortmund