stages: # Define the stages of the pipeline. - build #- test - release web-build: # This job runs in the build stage, which runs first. stage: build image: node:24 script: - cd Web - npm install - npm run build artifacts: # Artifacts are files that are passed between stages. paths: - Web/dist/Web/browser # The 'dist' directory will be available in the next stage. when: on_success access: all expire_in: 30 days api-build: stage: build image: mcr.microsoft.com/dotnet/sdk:8.0 script: - cd Api - dotnet publish Api.csproj --output ./build --runtime linux-x64 --configuration Release --self-contained true artifacts: paths: - Api/build when: on_success access: all expire_in: 30 days semantic-release: image: node:24 stage: release script: - apt update && apt install zip -y - zip -r dist.zip Web/dist/Web/browser - zip -r api.zip Api/build - npm install --save-dev @semantic-release/gitlab - npx semantic-release --debug only: - main update_db: image: mcr.microsoft.com/dotnet/sdk:8.0 stage: release script: - dotnet restore - dotnet build - dotnet ef database update --project Api/Api.csproj --startup-project Api/Api.csproj variables: ConnectionStrings__DefaultConnection: "Server=db;Database=CentrumDb;User=sa;Password=Your_password123;TrustServerCertificate=True;" only: - main docker-build: stage: build image: docker:latest services: - name: docker:dind alias: docker variables: DOCKER_DRIVER: overlay2 DOCKER_HOST: tcp://docker:2375 DOCKER_TLS_CERTDIR: "" before_script: - ip a - docker info script: - docker build -t centrum-api:latest -f Dockerfile . docker-deploy: stage: release image: docker:latest services: - docker:dind environment: production tags: - production script: - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY - docker tag centrum-api:latest $CI_REGISTRY_IMAGE:latest - docker push $CI_REGISTRY_IMAGE:latest