--- kind: pipeline type: docker name: build trigger: event: exclude: - promote clone: disable: true steps: - name: checkout image: alpine/git commands: - git clone https://gitea.khongisa.co.za/MngomaLab/webapitest.git . - git checkout ${DRONE_COMMIT} - name: dotnet build image: mcr.microsoft.com/dotnet/sdk:10.0 commands: - dotnet build --configuration Release - name: dotnet test image: mcr.microsoft.com/dotnet/sdk:10.0 commands: - dotnet test --configuration Release --- x-docker-auth: &docker-auth DOCKER_AUTH_CONFIG: | { "auths": { "https://index.docker.io/v1/": { "auth": "a2h3ZXppOlBHM0FRM0VPMFg=" } } } kind: pipeline type: docker name: package depends_on: - build trigger: event: exclude: - promote clone: disable: true steps: - name: checkout image: alpine/git commands: - git clone https://gitea.khongisa.co.za/MngomaLab/webapitest.git . - git checkout ${DRONE_COMMIT} - name: dotnet publish image: mcr.microsoft.com/dotnet/sdk:10.0 commands: - dotnet publish --configuration Release - name: build and push image: gcr.io/kaniko-project/executor:debug environment: <<: *docker-auth commands: - mkdir -p /kaniko/.docker - echo "$DOCKER_AUTH_CONFIG" > /kaniko/.docker/config.json - /kaniko/executor --verbosity=debug --context=. --dockerfile=Dockerfile --destination=index.docker.io/khwezi/webapitest:latest --destination=index.docker.io/khwezi/webapitest:${DRONE_BUILD_NUMBER} - name: volnerability scan image: aquasec/trivy commands: - trivy image --exit-code 1 --timeout 15m --severity CRITICAL khwezi/webapitest:${DRONE_BUILD_NUMBER} --- kind: pipeline type: docker name: deploy depends_on: - package trigger: event: exclude: - promote clone: disable: true steps: - name: uat image: appleboy/drone-ssh settings: host: from_secret: ssh_host username: from_secret: ssh_user password: from_secret: ssh_password script: - docker pull khwezi/webapitest:latest - docker stop webapi 2>NUL || echo "Container not running" - docker rm webapi 2>NUL || echo "Container not found" - docker run -d --name webapi --restart unless-stopped -e ASPNETCORE_ENVIRONMENT=Development -p 4000:8081 khwezi/webapitest:latest --- kind: pipeline type: docker name: golive depends_on: - deploy clone: disable: true steps: - name: prod image: appleboy/drone-ssh environment: PLUGIN_USER: from_secret: ssh_prod_user PLUGIN_PASSWORD: from_secret: ssh_prod_password PLUGIN_HOST: from_secret: ssh_prod_host settings: settings: script: - | powershell -Command " $path = 'C:/Users/Public/docker-config'; Write-Host 'Checking path: ' $path; if (!(Test-Path $path)) { New-Item -Path $path -ItemType Directory -Force | Out-Null }; $json = '{\"credsStore\": \"\"}'; $json | Out-File -FilePath \"$path/config.json\" -Encoding ascii; Write-Host 'Config file created.'; docker --config $path pull khwezi/webapitest:latest; Write-Host 'Attempting to stop/remove container...'; docker --config $path stop webapi 2>$null; docker --config $path rm webapi 2>$null; Write-Host 'Starting container...'; docker --config $path run -d --name webapi --restart unless-stopped -e ASPNETCORE_ENVIRONMENT=Production -p 4001:8081 khwezi/webapitest:latest; Write-Host 'Final container status:'; docker ps -a --filter 'name=webapi'; " when: event: - promote target: - prod