--- image: mcr.microsoft.com/dotnet/core/sdk:3.0-alpine3.11 variables: OBJECTS_DIRECTORY: 'obj' NUGET_PACKAGES_DIRECTORY: '.nuget' SOURCE_CODE_PATH: 'ChaosBot/*/' stages: - version - build - test - release - docker - deploy cache: key: "$CI_JOB_STAGE-$CI_COMMIT_REF_SLUG" paths: # Specify three paths that should be cached: # # 1) Main JSON file holding information about package dependency tree, packages versions, # frameworks etc. It also holds information where to the dependencies were restored. - '$SOURCE_CODE_PATH$OBJECTS_DIRECTORY/project.assets.json' # 2) Other NuGet and MSBuild related files. Also needed. - '$SOURCE_CODE_PATH$OBJECTS_DIRECTORY/*.csproj.nuget.*' # 3) Path to the directory where restored dependencies are kept. - '$NUGET_PACKAGES_DIRECTORY' # policy: pull-push version: stage: version only: changes: - ChaosBot/**/* refs: - master tags: - docker - hawkeye script: - 'apk add git' - 'git describe --tags | tr -d "\n" > version' artifacts: paths: - version build: stage: build only: changes: - ChaosBot/**/* refs: - master dependencies: - version tags: - docker - hawkeye script: - 'dotnet restore --packages $NUGET_PACKAGES_DIRECTORY' - 'dotnet build --no-restore' tests: stage: test only: changes: - ChaosBot/**/* refs: - master dependencies: - build tags: - docker - hawkeye script: - 'dotnet restore --packages $NUGET_PACKAGES_DIRECTORY' - 'dotnet test --no-restore' release: stage: release only: changes: - ChaosBot/**/* refs: - master dependencies: - tests tags: - docker - hawkeye script: - 'dotnet restore --packages $NUGET_PACKAGES_DIRECTORY' - 'dotnet publish -c Release --runtime linux-musl-x64 -o build -p:PublishSingleFile=true ChaosBot' artifacts: paths: - build/* docker: image: docker:stable stage: docker only: changes: - ChaosBot/**/* refs: - master tags: - docker - hawkeye dependencies: - version - release script: # Log in to the registry - 'docker login -u=$REGISTRY_USER -p=$REGISTRY_PASS registry.chaoticlogic.us' # Build the image - 'docker -H unix:///var/run/docker.sock image build -t chaosbot:`cat version` ./' # Tag the image with a registry tag - 'docker -H unix:///var/run/docker.sock image tag chaosbot:`cat version` registry.chaoticlogic.us/chaosbot:$CI_COMMIT_SHA' - 'docker -H unix:///var/run/docker.sock image tag chaosbot:`cat version` registry.chaoticlogic.us/chaosbot:latest' # Push the registry images - 'docker -H unix:///var/run/docker.sock image push registry.chaoticlogic.us/chaosbot:`cat version`' - 'docker -H unix:///var/run/docker.sock image push registry.chaoticlogic.us/chaosbot:latest' deploy: stage: deploy only: changes: - ChaosBot/**/* refs: - master tags: - docker - hawkeye dependencies: - docker script: - 'apk add curl jq' - 'curl -X POST $API_URI/api/endpoints/$ENDPOINT_URI/docker/containers/$CONTAINER_ID/restart -H "Authorization: Bearer `curl -X POST $API_URI/api/auth -H "Content-Type: application/json" -d "{\\"Username\\": \\"$API_USER\\", \\"Password\\": \\"$API_PASS\\"}" | jq -r ".jwt"`"'