Example dotnet pipeline with private NuGet feeds and ACA deployment
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build-env WORKDIR /apps/projectName RUN curl -L https://raw.githubusercontent.com/Microsoft/artifacts-credprovider/master/helpers/installcredprovider.sh | sh # Copy csproj and restore as distinct layers COPY src/Site/Site.csproj ./ COPY NuGet.config ./ #Takes access token from ADO pipeline step ARG FEED_ACCESSTOKEN #Sets up the nuget feeds ENV VSS_NUGET_EXTERNAL_FEED_ENDPOINTS="{\"endpointCredentials\": [{\"endpoint\":\"https://pkgs.dev.azure.com/organisationName/_packaging/feedName/nuget/v3/index.json\", \"username\":\"docker\", \"password\":\"${FEED_ACCESSTOKEN}\"},{\"endpoint\":\"https://pkgs.dev.azure.com/organisationName/_packaging/feedName/nuget/v3/index.json\", \"username\":\"docker\", \"password\":\"${FEED_ACCESSTOKEN}\"}]}" #Restore the nuget packages RUN dotnet restore "Site.csproj" --configfile "NuGet.config" --ignore-failed-sources COPY src/Site/ ./ RUN dotnet publish -c Release -o out --verbosity n FROM mcr.microsoft.com/dotnet/sdk:8.0 WORKDIR /apps/projectName COPY --from=build-env /apps/projectName/out . EXPOSE 80 ENTRYPOINT ["dotnet", "projectName.Internet.Site.dll"]s
parameters: - name: serviceConnectionName - name: solution - name: acrName - name: environment - name: dockerFilePath - name: acaRG - name: acaName stages: - stage: 'BuildAndPush' variables: DOCKER_BUILDKIT: 1 jobs: - deployment: Deploy displayName: 'Build and Push Docker Image' environment: '${{parameters.environment}}' strategy: runOnce: deploy: steps: - checkout: self displayName: 'Checkout Repo' - task: UseDotNet@2 displayName: 'Install .NET SDK 8.x.x' inputs: packageType: 'sdk' - task: NuGetAuthenticate@1 - task: Docker@2 displayName: 'Build Docker Image' inputs: repository: ${{parameters.solution}} command: build Dockerfile: ${{parameters.dockerFilePath}} tags: $(Build.BuildId) arguments: '--build-arg FEED_ACCESSTOKEN=$(VSS_NUGET_ACCESSTOKEN)' - task: AzureCLI@2 displayName: 'Push Docker Image to ACR' inputs: azureSubscription: ${{parameters.serviceConnectionName}} scriptType: 'bash' scriptLocation: 'inlineScript' inlineScript: | az acr login --name '${{parameters.acrName}}' docker tag 'docker.io/library/${{parameters.solution}}:$(Build.BuildId)' '${{parameters.acrName}}.azurecr.io/${{parameters.solution}}:latest' docker push '${{parameters.acrName}}.azurecr.io/${{parameters.solution}}:latest' - task: AzureCLI@2 displayName: 'Update image in ACA' inputs: azureSubscription: '${{parameters.serviceConnectionName}}' scriptType: 'bash' scriptLocation: 'inlineScript' InlineScript: | az containerapp update -n '${{parameters.acaName}}' \ -g '${{parameters.acaRG}}' \ --image '${{parameters.acrName}}.azurecr.io/${{parameters.solution}}:latest' \ --revision-suffix '$(Build.BuildId)'