برنامه نویسی

با استفاده از AWS CDK و Azure DevOps، به طور خودکار روی برنامه AWS Runner اجرا شود

آپدیت چیه؟

به‌روزرسانی‌های جریان Azure DevOps

من جریان را به روز کردم و یک مرحله برای اجرای آن اضافه کردم cdk deploy فرمان

DevOps Flow

من ساخت و توسعه را به دو قالب جدا می کنم. من الگوها را در خطوط لوله خود قرار می دهم.

  • خطوط لوله (azure-pipelines.yml)
trigger:
- main

pr:
- main

variables:
- group: 'AWS'

pool:
  vmImage: ubuntu-22.04

parameters:
  - name: awsCredentials
    displayName: AWS Credentials
    type: string
    default: 'AWS-Dev-AssumeRole'
  - name: region
    displayName: AWS Region
    type: string
    default: 'ap-southeast-1'

steps:
- template: build.yml
  parameters:
    awsCredentials: ${{ parameters.awsCredentials }}
    region: ${{ parameters.region }}
- ${{ if and(ne(variables['Build.Reason'], 'PullRequest'), eq(variables['Build.SourceBranch'], 'refs/heads/main')) }}:
  - template: deploy.yml
    parameters:
      awsCredentials: ${{ parameters.awsCredentials }}
      region: ${{ parameters.region }}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

parameters:
  - name: awsCredentials
    displayName: AWS Credentials
    type: string
    default: 'AWS-Dev-AssumeRole'
  - name: region
    displayName: AWS Region
    type: string
    default: 'ap-southeast-1'

steps:
- script: npm install -g aws-cdk
  displayName: 'Install AWS CDK'
- script: cd SimplePasswordManagerService.Infra && cdk synth
  displayName: 'CDK Synth'
- task: Docker@2
  displayName: 'Build Docker Image'
  inputs:
    command: 'build'
    Dockerfile: 'Dockerfile'
    repository: 'spms'
    tags: '$(Build.BuildId)'
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

parameters:
  - name: awsCredentials
    displayName: AWS Credentials
    type: string
    default: "AWS-Dev-AssumeRole"
  - name: region
    displayName: AWS Region
    type: string
    default: "ap-southeast-1"

steps:
  - task: ECRPushImage@1
    displayName: "Push Image to ECR"
    inputs:
      awsCredentials: "${{ parameters.awsCredentials }}"
      regionName: "${{ parameters.region }}"
      sourceImageName: "spms"
      sourceImageTag: "$(Build.BuildId)"
      repositoryName: "spms"
      pushTag: "$(Build.BuildId)"
  - script: cd SimplePasswordManagerService.Infra && cdk deploy SimplePasswordManagerServiceInfraStack --parameters "imageTag=$(Build.BuildId)"
    displayName: CDK Deploy
    env:
      AWS_ACCESS_KEY_ID: $(AWS_ACCESS_KEY_ID)
      AWS_SECRET_ACCESS_KEY: $(AWS_SECRET_ACCESS_KEY)
      AWS_DEFAULT_REGION: ${{ parameters.region }}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ساختارهای CDK!

من ارائه دهنده ECR را به کلاس SpamsRepo (پشته متفاوت) منتقل می کنم. من مقداری تنظیمات را به پشته قبلی اضافه می کنم:

  1. ECR ایجاد شده را بخوانید.
  2. اسرار ایجاد شده از Secret Manager را بخوانید.
  3. پارامتر را بخوانید imageTag و ارائه App Runner Service.

توجه داشته باشید: پشته قبلی را حذف می کنم. شما ممکن است این کار را در تولید خود انجام ندهید! من هنوز در حال آزمایش هستم، بنابراین با از دست دادن داده ها مشکلی ندارم.

خط لوله فراهم خواهد کرد imagesTag. به هر حال من در حال حاضر این خط لوله را یک محیط توسعه می دانم. به طور خودکار برنامه را در App Runner مستقر می کند. من قصد دارم خط لوله انتشار را برای پست بعدی اضافه کنم.

می توانید به کدهای cdk من نگاه کنید.

using Amazon.CDK;
using Amazon.CDK.AWS.AppRunner.Alpha;
using Amazon.CDK.AWS.ECR;
using Constructs;
using System.Collections.Generic;

namespace SimplePasswordManagerService.Infra {
  public class SimplePasswordManagerServiceInfraStack : Stack {
    internal SimplePasswordManagerServiceInfraStack(Construct scope, string id, IStackProps props = null) : base(scope, id, props) {
      // 0.0 ECR
      var repository = Repository.FromRepositoryName(this, "spms-ecr", "spms");

      // 1.0 AppRunner
      var appRunnerSecret = Amazon.CDK.AWS.SecretsManager.Secret.FromSecretNameV2(this, "apprunner-secret", "dev/AppRunner/spms");

      var imageTag = new CfnParameter(this, "imageTag", new CfnParameterProps {
        Type = "String",
        Description = "Target tag"
      });

      var appRunner = new Service(this, "spms-apprunner", new ServiceProps {
        Source = Source.FromEcr(new EcrProps {
          Repository = repository,
          ImageConfiguration = new ImageConfiguration {
            Port = 80,
            EnvironmentSecrets = new Dictionary<string, Secret> {
              {"Authentication__Microsoft__ClientId", Secret.FromSecretsManager(appRunnerSecret, "Authentication__Microsoft__ClientId")},
              {"Authentication__Microsoft__ClientSecret", Secret.FromSecretsManager(appRunnerSecret, "Authentication__Microsoft__ClientSecret")},
              {"ConnectionStrings__mongo", Secret.FromSecretsManager(appRunnerSecret, "ConnectionStrings__mongo")},
            },
            EnvironmentVariables = new Dictionary<string, string> {
              {"ASPNETCORE_FORWARDEDHEADERS_ENABLED", "true" }
            }
          },
          TagOrDigest = imageTag.ValueAsString
        }),
      });

      new CfnOutput(this, "output-spms-apprunner-url", new CfnOutputProps {
        Value = appRunner.ServiceUrl
      });
    }
  }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مخازن

برنامه من منبع باز است. با خیال راحت خطوط لوله و کدهای CDK را ببینید! در صورت تمایل کمی بازخورد بدهید.

وب سرویس مدیریت رمز عبور ساده

ساخت SPMS (.NET)
codecov
نشان کدسی

سرویس مدیریت رمز عبور ساده

ابزار

.خالص

خطوط لوله

Azure DevOps

flowchart TD
    A[Install AWS CDK CLI] --> B(CDK Synth)
    B --> C[Docker Build]
    C --> D{Is Running in Main?}
    D -->|Yes| E[Push to ECR]
    D -->|No| F[End]
    E --> G[CDK Deploy]
    G --> F




مجوز

با

برنامه اجرا شده است

متشکرم

با تشکر از شما برای خواندن! روز خوبی داشته باشی.

گیف روز خوبی داشته باشید

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا