개발관련/ETC..

AWS CodeBuild, CodeDeploy

Diademata 2019. 7. 25. 15:37
반응형

AWS 설정

  1. IAM 역할 추가
    • CodeDeploy
      1. AWSCodeDeployRole
    • EC2Deploy
      1. AmazonEC2RoleforAWSCodeDeploy
      2. CouldWatchFullAccess
      3. AWSCodeDeployFullAccess
      4. AWSCodeDeployRole
    • CodeDeploy는 CodeDeploy 설정에 역할에 들어가는 것이고 EC2Deploy인 경우는 EC2 인스턴스에 들어가는 역할이다.
  2. CodeBuild 설정
    • 아티팩트 설정
      1. secondary-artifacts가 작성될 시에 아티팩트 추가 기능을 사용하여 buildspec.yml에 작성된 아티팩트 키와 맵핑 시켜야 한다.
  3. CodeDeploy 설정
    1. appspec.yml은 배포된 압축 파일을 풀었을때 root에 있어야 한다.
    2. root : C:\ProgramData\Amazon\CodeDeploy\d1f6949f-bb5e-45b1-b60e-eeaff407a9f0\d-59GUNXLYA\deployment-archive\ 경로로 배포가 된다.
    3. 배포될 EC2 인스턴스에 IAM 역할 추가(EC2Deploy)
    4. 배포될 EC2 인스턴스에 CodeDeloyAgent 설치 : 
    5. powershell.exe -Command Get-Service -Name codedeployagent 명령어로 agent 가 작동 중인지 확인한다.
  4. CodeDeploy 실패 경우
    1. views events => ApplicationStop 에서 아무런 오류코드 없이 실패하는 경우
      1. ec2 인스턴스를 재부팅 한다.
      2. 'CodeDeploy agent did not find an AppSpec file within the unpacked revision directory at revision-relative path “appspec.yml” ' 에러가 나오는 경우
        1. https://stackoverflow.com/questions/53501365/codedeploy-agent-did-not-find-an-appspec-file-within-the-unpacked-revision-direc
        2. S3 버킷에 올라간 zip 파일의 root에 appspec.yml 파일 확인을 한다.
        3. ec2 인스턴스를 재부팅
  5. CodePipeline 설정

 

※ yml 설정 파일 작성시 주의 사항

  1. 띄어쓰기로 계층 표현을 함으로써 작성시에 유의할 것
  2. 문단의 종료는 /r/n가 아닌 리눅스 방식의 /n이 들어가야한다. /r/n이 들어가는 경우 aws에서 파싱을 못하고 에러 뱉음.
  3. yaml은 사용 안했으면 좋겠음.

 

buildspec.yml

예시)

https://docs.microsoft.com/en-us/dotnet/core/rid-catalog

 

version: 0.2


phases:
  install:
    runtime-versions:
      dotnet: 2.2
  build:
    commands:
      - dotnet restore server/TestProjectServer/TestProjectServer.csproj
      - dotnet build server/TestProjectServer/TestProjectServer.csproj
      - dotnet publish server/TestProjectServer/TestProjectServer.csproj -o ../../gameWebServer/bin -r win-x64


      - dotnet restore server/TestInterServer/TestInterServer.csproj
      - dotnet build server/TestInterServer/TestInterServer.csproj
      - dotnet publish server/TestInterServer/TestInterServer.csproj -o ../../interServer/bin -r win-x64
  post_build:
    commands:
      - cp server/Scripts/Deploy.bat gameWebServer/
      - cp server/Scripts/config.txt gameWebServer/
      - cp server/Scripts/Deploy.bat interServer/
      - cp server/Scripts/config.txt interServer/
      - cp server/TestProjectServer/appspec.yml gameWebServer/
      - cp server/TestProjectServer/appspec.yml interServer/
artifacts:
  files:
    - '**/*'
    - 'Deploy.bat'
  name: bin_build
  secondary-artifacts:
    gamewebserver:
      files:
        - '**/*'
      name: gamewebserver_build-$(date +%Y-%m-%d)
      base-directory: 'gameWebServer'
    interserver:
      files:
         - '**/*'
      name: interServer_build-$(date +%Y-%m-%d)
      base-directory: 'interServer'
※ buildspec.yml 파일은 root 경로에 두는 것을 권장하나 아무대나 둬도 상관은 없다. aws에서 경로 설정이 가능

 

appspec.yml

예시)

version: 0.0
os: windows
files:
- source: Server/
destination: C:\\Users\\Administrator\\Desktop\\deploy
hooks:
BeforeInstall:
AfterInstall:
ApplicationStart:
- location: ./Deploy.bat
timeout: 300
ValidateService:
- location: ./AfterService.bat
timeout: 300


※ Bat 파일 실행시 경로 설정을 다르게 하기 위해 솔루션이 아닌 프로젝트 상의 경로에 둔다.

배포시 실행되는 스크립트

AfterService.bat
0.00MB
config.json
0.00MB
Deploy.bat
0.00MB

  • appspec.yml에 적힌 hook 이벤트 중 ApplicationStart 실행시에 실행되는 프로그램
  • 작성된 기능
    1. 배포된 파일이 실제 서버 폴더로 복사 되기 전 현재 서버 폴더 백업
    2. 시작한 후 배포된 파일을 실제 서버 경로에 복사
    3. 서버 프로그램 시작
    4. config.txt에서 설정
  • bat 파일 실행시에 background로 어플리케이션이 실행이 되는데 변경해야함.

 

 

 

반응형

'개발관련 > ETC..' 카테고리의 다른 글

Linux에 서비스 등록  (0) 2023.01.10
Apple revoke token 처리  (0) 2022.07.09
객체 지향 설계의 원칙>SOLID  (0) 2019.05.08
javascript> Drag & Drop 파일 읽기  (0) 2018.12.05
C# ms referencesource 소스  (0) 2018.03.29