Webinar – GitLab Continuous Integration & Delivery
Mam do zaproponowania dwa terminy na webinar GitLab CI/CD
- 2020.05.05 (wtorek) 11:00 – 13:00
- 2020.05.06 (środa) 11:00 – 13:00
Rejestracja
https://event.webinarjam.com/channel/GitLab
Co wykonamy
- Utworzymy aplikację internetową w .Net Core
- Wgramy kod do repozytorium kodu GitLab
- Zbudujemy kod za pomocą GitLab CI/CD
- Utworzymy ścieżkę automatycznego wdrażania do AWS Elastic Beanstalk
Co potrzebujesz
Jeśli chcesz wykonać wszystkie kroki równolegle ze mną, to potrzebujesz:
- Visual Studio Code => https://code.visualstudio.com
- Dodatek do VS Code do języka C# => https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csharp
- .Net Core SDK => https://dotnet.microsoft.com/download
- Konto w serwisie GitLab => https://gitlab.com/users/sign_up (jest darmowe)
- Konto w chmurze AWS => https://aws.amazon.com/free/ (darmowe 12-m-cy)
- SourceTree => https://www.sourcetreeapp.com
Pliki i kody użyte podczas spotkania
Budowanie aplikacji
cd AAIT dotnet new razor dotnet build dotnet new gitignore
Ręczne budowanie pliku zip
dotnet publish -c Release -o build cd build zip -r -X ../build.zip * cd .. cp Properties/aws-windows-deployment-manifest.json aws-windows-deployment-manifest.json zip ToDeploy.zip build.zip aws-windows-deployment-manifest.json
Plik aws-windows-deployment-manifest.json
{ "manifestVersion": 1, "deployments": { "aspNetCoreWeb": [ { "name": "AAIT", "parameters": { "appBundle": "build.zip", "iisPath": "/", "iisWebSite": "Default Web Site" } } ] } }
Pierwsza wersja .gitlab-ci.yml
stages: - build - test - deploy before_script: - echo "Before script section" after_script: - echo "After script section" build: stage: build script: - echo "Building" - mkdir build - cd build - touch info.txt - echo "Wersja Version" >> info.txt - echo $CI_PIPELINE_IID - sed -i "s/Version/$CI_PIPELINE_IID/" info.txt artifacts: paths: - build/ test: stage: test script: - echo "Testowanie" - test -f "build/info.txt" test2: stage: test script: - echo "Testowanie równoległe" - ls - cd build - cat info.txt - grep "$CI_PIPELINE_IID" info.txt deploy: stage: deploy when: manual script: - echo "Wdrożenie aplikacji"
Group Setting Variables
S3_BUCKET AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_DEFAULT_REGION
Druga wersja .gitlab-ci.yml
variables: ARTIFACT_NAME: AAIT1-v$CI_PIPELINE_IID.zip APP_NAME: AAIT1 stages: - build - test - deploy_test - deploy_prod build: image: mcr.microsoft.com/dotnet/core/sdk:3.1 stage: build before_script: - dotnet restore script: - dotnet build -c Release - dotnet publish -c Release -o build - apt-get update -qq && apt-get install -y -qq unzip zip - cd build - zip -r -X ../build.zip * - cd .. - cp Properties/aws-windows-deployment-manifest.json aws-windows-deployment-manifest.json - zip $ARTIFACT_NAME build.zip aws-windows-deployment-manifest.json artifacts: paths: - $ARTIFACT_NAME test: stage: test script: - echo "Testowanie" - test -f $ARTIFACT_NAME deploy to test: stage: deploy_test image: name: banst/awscli entrypoint: [""] script: - aws s3 cp $ARTIFACT_NAME s3://$S3_BUCKET/$ARTIFACT_NAME - aws elasticbeanstalk create-application-version --application-name $APP_NAME --version-label $CI_PIPELINE_IID --source-bundle S3Bucket=$S3_BUCKET,S3Key=$ARTIFACT_NAME - aws elasticbeanstalk update-environment --application-name $APP_NAME --environment-name "AAIT1-test" --version-label=$CI_PIPELINE_IID deploy to prod: stage: deploy_prod image: name: banst/awscli entrypoint: [""] when: manual script: - aws elasticbeanstalk update-environment --application-name $APP_NAME --environment-name "AAIT1-prod" --version-label=$CI_PIPELINE_IID