.NET 코어용 CI/CD

3035 단어 dotnetawsdocker
:WIP

컨테이너화하려는 .NET API가 있는 경우 준비 단계는 다음과 같습니다.

설명
-- AWS용 CI/CD 설정
-- 단계
  • 도커 이미지 생성
  • 저장소로 푸시
  • ECS 설정

  • 부록, 상태 확인을 추가하는 방법.

    다음은 두 개의 파일입니다.

    SQL Server 데이터베이스가 TLS 1.2를 지원하지 않는 경우 TLS 1.0 옵션이 필요합니다. 권장 옵션은 데이터베이스를 보안 프로토콜로 업데이트하는 것입니다.

    아직 6.0으로 업데이트하지 않은 경우 sdk 및 aspnet 버전을 5.0으로 변경할 수도 있습니다.

    이 Dockerfile은 다단계 빌드를 사용하여 최적의 이미지 크기를 얻습니다.

    도커파일

    FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build-env
    WORKDIR /app
    
    # Copy csproj and restore as distinct layers
    COPY *.csproj ./
    RUN dotnet restore
    
    # Copy everything else and build
    COPY . ./
    RUN dotnet publish -c Release -o out
    
    # Build runtime image
    FROM mcr.microsoft.com/dotnet/aspnet:6.0
    WORKDIR /app
    
    # Enable TLS 1.0
    RUN sed -i 's/DEFAULT@SECLEVEL=2/DEFAULT@SECLEVEL=1/g' /etc/ssl/openssl.cnf
    RUN sed -i 's/MinProtocol = TLSv1.2/MinProtocol = TLSv1/g' /etc/ssl/openssl.cnf
    RUN sed -i 's/DEFAULT@SECLEVEL=2/DEFAULT@SECLEVEL=1/g' /usr/lib/ssl/openssl.cnf
    RUN sed -i 's/MinProtocol = TLSv1.2/MinProtocol = TLSv1/g' /usr/lib/ssl/openssl.cnf
    
    COPY --from=build-env /app/out .
    ENTRYPOINT ["dotnet", "myapp-whatever.dll"]
    


    buildspec.yml

    version: 0.2
    
    phases:
      pre_build:
        commands:
          - echo Logging in to Amazon ECR...
          - aws --version
          - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com
          - REPOSITORY_URI=$AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME
          - COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)
          - IMAGE_TAG=${COMMIT_HASH:=latest}
      build:
        commands:
          - echo Build started on `date`
          - echo Building the Docker image...
          - docker build -t $REPOSITORY_URI:latest .
          - docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG
      post_build:
        commands:
          - echo Build completed on `date`
          - echo Pushing the Docker images...
          - docker push $REPOSITORY_URI:latest
          - docker push $REPOSITORY_URI:$IMAGE_TAG
          - echo Writing image definitions file...
          - printf '[{"name":"%s","imageUri":"%s"}]' $IMAGE_REPO_NAME $REPOSITORY_URI:$IMAGE_TAG > imagedefinitions.json
    artifacts:
        files: imagedefinitions.json
    


    상태 확인 엔드포인트가 없는 경우 오케스트레이터가 컨테이너가 준비되었는지 또는 다시 시작해야 하는지를 알기 위해 컨테이너에 중요합니다.

    Program.cs

    builder.Services.AddHealthChecks();
    var app = builder.Build();
    app.MapHealthChecks("/api/health");
    


    Startup.cs

                app.UseEndpoints(endpoints =>
                {
                    endpoints.MapControllers();
                    endpoints.MapHealthChecks("/api/health");
                });
    

    좋은 웹페이지 즐겨찾기