Continuous Integration (CI):
Continuous Delivery/Deployment (CD):
Инструмент | Использование |
---|---|
GitHub Actions | Для репозиториев на GitHub |
Azure DevOps | Полный CI/CD стек от Microsoft |
GitLab CI/CD | Для репозиториев на GitLab |
Jenkins | Для сложных enterprise-решений |
name: .NET Core CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup .NET
uses: actions/setup-dotnet@v1
with:
dotnet-version: '6.0.x'
- name: Restore dependencies
run: dotnet restore
- name: Build
run: dotnet build --configuration Release --no-restore
- name: Test
run: dotnet test --no-build --configuration Release
- name: Publish
run: dotnet publish -c Release -o ./publish
- name: Upload artifact
uses: actions/upload-artifact@v2
with:
name: webapp
path: ./publish
deploy:
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/download-artifact@v2
with:
name: webapp
- name: Azure Login
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Deploy to Azure Web App
uses: azure/webapps-deploy@v2
with:
app-name: 'my-dotnet-app'
slot-name: 'staging'
package: ./webapp
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: us-east-1
- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v1
- name: Build and push Docker image
run: |
docker build -t myapp .
docker tag myapp:latest ${{ steps.login-ecr.outputs.registry }}/myapp:latest
docker push ${{ steps.login-ecr.outputs.registry }}/myapp:latest
Blue-Green Deployment:
Canary Releases:
Feature Flags:
if (FeatureFlags.IsEnabled("NewCheckout"))
{
// Новая реализация
}
else
{
// Старая реализация
}
resource webApp 'Microsoft.Web/sites@2021-02-01' = {
name: 'myapp-${environment}'
location: resourceGroup().location
properties: {
serverFarmId: appServicePlan.id
httpsOnly: true
}
}
const cluster = new ecs.Cluster(this, 'MyCluster', {
vpc,
clusterName: 'my-dotnet-cluster'
});
new ecs_patterns.ApplicationLoadBalancedFargateService(this, 'MyService', {
cluster,
taskImageOptions: {
image: ecs.ContainerImage.fromRegistry('my-dotnet-app'),
containerPort: 80,
},
});
Health Checks в приложении:
app.MapHealthChecks("/health");
Автоматические откаты при:
Уведомления в Slack/Teams при:
эффективный CI/CD для .NET Core требует автоматизации сборки, тестирования, инфраструктуры как кода и стратегического подхода к деплоям. Используйте облачные-native инструменты и внедряйте постепенные стратегии развертывания для минимизации рисков.