CodeBuild+CodeDeploy+CodePipeline에서 EC2에 자동 배포해 보았습니다.
7342 단어 CodePipelineCodeDeployCodeBuild
시도한 내용 개요

vue-chat/SourceArti
로 출력 vue-chat/BuildArtif
에 미리 빌드된 소스 출력 CodeBuild
AWS Management Console에서 CodeBuild를 선택하여 빌드 프로젝트 생성
github의 vue-chat 리포지토리를 빌드하는 설정
Buildspec
Buildspec은 "빌드 명령 삽입"을 선택하고 다음 명령을 작성합니다.
버전: 0.2
phases:
install:
runtime-versions:
nodejs: 10
pre_build:
commands:
- npm update -g npm
- npm install
build:
commands:
- npm run build
artifacts:
files:
- '**/*'
phases
빌드 프로세스를 설명하는 선언
install
빌드 환경 선언
pre_build
node.js를 CodeBuild 빌드 환경에 설치
build
npm 빌드 실행
artifacts
빌드된 소스를 출력하는 선언
files
출력하는 소스 CodeBuild 및 아티팩트 설정은 관리 콘솔에서도 가능합니다.
"Semanstic Versioning 활성화"를 체크하면
위의 Buildspec 내용이 우선합니다. 
IAM 역할(CodeBuild)
CodeBuild의 서비스 역할에 AmazonS3OutpostsReadOnlyAccess를 추가하여
미리 빌드된 소스를 S3에 업로드할 수 있도록 허용

서비스 역할은 CodeBuild-빌드 프로젝트-환경에 설명되어 있습니다.

로그(CodeBuild)
CodeBuild의 빌드 실행 로그는 S3에 출력하도록 했다

CodeBuild에서 빌드 실행하면 S3에는 압축된 로그 파일이 출력된다

배포할 EC2 만들기
AmazonLinux2에서 EC2 인스턴스 생성

IAM 롤(EC2)
CodeBuild가 S3에 출력한 빌드된 소스를 EC2에 배치하기 위해 AmazonS3ReadOnlyAccess를 설정

CodeDeploy Agent 설치
CodeDeploy에서 EC2로 배포할 수 있도록 EC2에 에이전트 라이브러리 설치
아래 명령은 EC2 배포를 위한 CodeDeploy 배포에서 인용되었습니다.
# ec2-userで実行
$ sudo yum update
$ sudo yum install ruby
$ sudo yum install aws-cli
$ cd /home/ec2-user
$ aws s3 cp s3://aws-codedeploy-ap-northeast-1/latest/install . --region ap-northeast-1
$ chmod +x ./install
$ sudo ./install auto
$ sudo service codedeploy-agent status
애플리케이션 시작에 필요한 라이브러리 설치
이번에는 Vue.js 프로젝트를 시작하기 때문에 vue-cli를 EC2에 설치
$ npm install -g @vue/cli
CodeDeploy
배포 프로젝트 만들기

IAM 역할(CodeDeploy)
CodeDeploy의 서비스 역할은
CodeBuild에서 출력한 미리 빌드된 소스를 받기 위해 "AmazonS3ReadOnlyAccess"와
EC2에 소스를 배치하기 위해 "AmazonEC2FullAccess"설정
(AmazonEC2RoleforAWSCodeDeploy라면 PermissionError가 되어 버렸다)

github 프로젝트에 배포 설정
CodeDeploy에서 배포하기 위해 프로젝트에 배포 프로세스를 설명하는 파일 만들기

appspec.yml
배포할 프로젝트의 루트 디렉터리에 appspec.yml 만들기
appspec.yml
version: 0.0
os: linux
files:
- source: /
destination: /var/www/html
hooks:
ApplicationStart:
- location: /scripts/codedeploy_start.sh
timeout: 180
AmazonLinux2에서 EC2 인스턴스 생성

IAM 롤(EC2)
CodeBuild가 S3에 출력한 빌드된 소스를 EC2에 배치하기 위해 AmazonS3ReadOnlyAccess를 설정

CodeDeploy Agent 설치
CodeDeploy에서 EC2로 배포할 수 있도록 EC2에 에이전트 라이브러리 설치
아래 명령은 EC2 배포를 위한 CodeDeploy 배포에서 인용되었습니다.
# ec2-userで実行
$ sudo yum update
$ sudo yum install ruby
$ sudo yum install aws-cli
$ cd /home/ec2-user
$ aws s3 cp s3://aws-codedeploy-ap-northeast-1/latest/install . --region ap-northeast-1
$ chmod +x ./install
$ sudo ./install auto
$ sudo service codedeploy-agent status
애플리케이션 시작에 필요한 라이브러리 설치
이번에는 Vue.js 프로젝트를 시작하기 때문에 vue-cli를 EC2에 설치
$ npm install -g @vue/cli
CodeDeploy
배포 프로젝트 만들기

IAM 역할(CodeDeploy)
CodeDeploy의 서비스 역할은
CodeBuild에서 출력한 미리 빌드된 소스를 받기 위해 "AmazonS3ReadOnlyAccess"와
EC2에 소스를 배치하기 위해 "AmazonEC2FullAccess"설정
(AmazonEC2RoleforAWSCodeDeploy라면 PermissionError가 되어 버렸다)

github 프로젝트에 배포 설정
CodeDeploy에서 배포하기 위해 프로젝트에 배포 프로세스를 설명하는 파일 만들기

appspec.yml
배포할 프로젝트의 루트 디렉터리에 appspec.yml 만들기
appspec.yml
version: 0.0
os: linux
files:
- source: /
destination: /var/www/html
hooks:
ApplicationStart:
- location: /scripts/codedeploy_start.sh
timeout: 180
CodeDeploy에서 배포하기 위해 프로젝트에 배포 프로세스를 설명하는 파일 만들기

appspec.yml
배포할 프로젝트의 루트 디렉터리에 appspec.yml 만들기
appspec.yml
version: 0.0
os: linux
files:
- source: /
destination: /var/www/html
hooks:
ApplicationStart:
- location: /scripts/codedeploy_start.sh
timeout: 180
응용 프로그램 시작 sh 파일
appspec.yml에 지정된 "codedeploy_start.sh"만들기
npm 명령으로 Vue.js 응용 프로그램을 실행하기 만하면됩니다.
codedeploy_start.sh
#!/bin/bash
npm run serve
CodePipeline
위에서 작성 및 설정한 내용으로 파이프라인을 작성

파이프라인 실행
이제 저장소로 변경 사항을 푸시하는 것만으로 배포 할 수 있습니까?
그러나 현실은
CodeDeploy가 실패했습니다. . .

오류를 보면 npm run serve
때 package.json을 찾을 수 없었습니다.

appspec.yml에서 codedeploy_start.sh를 실행할 때 현재 디렉토리는 /
이므로
codedeploy_start.sh에서 cd 配置したソースのディレクトリ
를 작성해야합니다.
배치한 소스의 디렉토리에는 파이프라인 실행마다 흔들리는 랜덤인 ID가 포함되어 있으므로 어떻게 기술하면 되는지 조사중
(배치 디렉토리 예: /opt/codedeploy-agent/deployment-root/3ee0a546-27db-4534-a055-098b9173f625/d-4ARZ3L0Q6/deployment-archive/vue-chat
)
Reference
이 문제에 관하여(CodeBuild+CodeDeploy+CodePipeline에서 EC2에 자동 배포해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/buto/items/f78c489d43be19445530
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이제 저장소로 변경 사항을 푸시하는 것만으로 배포 할 수 있습니까?
그러나 현실은
CodeDeploy가 실패했습니다. . .

오류를 보면
npm run serve
때 package.json을 찾을 수 없었습니다.
appspec.yml에서 codedeploy_start.sh를 실행할 때 현재 디렉토리는
/
이므로codedeploy_start.sh에서
cd 配置したソースのディレクトリ
를 작성해야합니다.배치한 소스의 디렉토리에는 파이프라인 실행마다 흔들리는 랜덤인 ID가 포함되어 있으므로 어떻게 기술하면 되는지 조사중
(배치 디렉토리 예:
/opt/codedeploy-agent/deployment-root/3ee0a546-27db-4534-a055-098b9173f625/d-4ARZ3L0Q6/deployment-archive/vue-chat
)
Reference
이 문제에 관하여(CodeBuild+CodeDeploy+CodePipeline에서 EC2에 자동 배포해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/buto/items/f78c489d43be19445530텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)