일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 김골라
- node
- S3
- 이미지 맵
- netlify variables
- 어셈블리어
- CSS
- nodejs
- rwdImageMaps
- NODE_VERSION
- aws ec2
- ogr2ogr
- Unable to find the global bin directory
- 이미지 좌표 추출
- react
- 반응형 페이지 좌표 변환
- can't getting credentials
- C언어
- AWS CodePipeline
- Error:error:0308010C:digital envelope routines::unsupported
- ERR_PNPM_NO_GLOBAL_BIN_DIR
- credential error
- SASS
- expo
- GeoJSON object too complex/large
- Sequelize Error: Dialect needs to be explicitly supplied as of v4.0.0
- AWS CodeBuild
- EC2
- AWS
- 설치완료안됨
- Today
- Total
ImFe's study
[AWS] Java 환경에서 CodeBuild와 CodePipeline을 통해 배포/빌드 자동화 본문
AWS-Codebuild-test-java
AWS 공식 가이드가 Maven기준이여서, Maven을 이용하여 빌드하였습니다.
공식 가이드
1단계: 소스 코드 생성
(디렉토리 구조)
(root directory name)
|-- pom.xml
`-- src
|-- main
| `-- java
| `-- MessageUtil.java
`-- test
`-- java
`-- TestMessageUtil.java
2단계: buildspec 파일 생성
이 단계에서는 빌드 사양(buildspec) 파일을 생성합니다.
AbuildSpec은 CodeBuild가 빌드를 실행하는 데 사용하는 YAML형식의 빌드 명령 및 관련 설정의 모음입니다.
빌드 사양이 없으면 CodeBuild가 빌드 입력을 빌드 출력으로 성공적으로 변환하거나 빌드 환경의 빌드 출력 결과물을 찾아 출력 버킷에 업로드할 수 없습니다.
buildspec.yml 파일을 루트 디렉토리에 작성합니다.
version: 0.2
phases:
install:
runtime-versions:
java: corretto11
pre_build:
commands:
- echo Nothing to do in the pre_build phase...
build:
commands:
- echo Build started on `date`
- mvn install
post_build:
commands:
- echo Build completed on `date`
artifacts:
files:
- target/messageUtil-1.0.jar
aws-codebuild-test 에서는 빌드 프로젝트를 생성할때 빌드스펙을 주입하였고, 현재 프로젝트의 경우 buildspec.yml 파일을 작성하는 방식을 사용하였습니다.
buildspec 선언에서
- version은 사용 중인 빌드 사양 표준의 버전을 나타냅니다.(0.2가 최신)
- phases는 CodeBuild가 명령을 실행하도록 지시할 수 있는 빌드 단계를 나타냅니다. 빌드 단계는 install, pre_build, build 및 post_build로 나열되어 있습니다. 이 빌드 단계 이름의 철자는 바꿀 수 없으며, 추가적인 빌드 단계 이름을 생성할 수도 없습니다.
이 예제에서는 build단계의 "mvn install" 명령어로 빌드합니다.
이 명령은 Apache Maven이 Java 클래스 파일을 컴파일 및 테스트하고 컴파일된 Java 클래스 파일을 빌드 출력 결과물에 패키지하도록 지시합니다.
echo 명령은 빌드 과정을 이해하기 위해 포함됐습니다.
이 예제의 buildspec에는 모든 빌드 단계가 포함되어 있지만, 해당 단계에서 아무 명령도 실행하지 않으려면 빌드 단계를 포함하지 않아도 됩니다. - artifacts는 Codebuild가 출력 버킷에 업로드하는 빌드 출력 아티팩트 집합을 나타냅니다. 코드빌드가 단일 업로드 messageUtil-1.0.jar에서 찾은 파일 target 빌드 환경의 상대 디렉터리입니다.
파일 이름 messageUtil-1.0.jar 및 디렉터리 이름 target은 Apache Maven이 이 예제에서만 빌드 출력 결과물을 생성 및 저장하는 방식에 따라 달라집니다. 사용자 자체 빌드에서는 이러한 파일 이름과 디렉터리가 다릅니다.
(root directory name)
|-- pom.xml
|-- buildspec.yml
`-- src
|-- main
| `-- java
| `-- MessageUtil.java
`-- test
`-- java
`-- TestMessageUtil.java
3단계: 2개의 S3 버킷 생성
한 개의 버킷으로도 실습이 가능하지만, 두 개의 버킷을 사용해야 빌드 입력이 들어오는 위치 및 빌드 출력이 나가는 위치를 쉽게 확인할 수 있습니다.
- 이러한 버킷 중 하나(입력 버킷)는 빌드 입력을 저장합니다.
이 입력 버킷의 이름은 codebuild-[regionID]-[accountID]-input-bucket입니다.
여기서 [regionID]는 버킷의 AWS 리전이고 [accountID]는 AWS계정 ID입니다. - 다른 버킷(출력 버킷)은 빌드 출력을 저장합니다. 이 출력 버킷의 이름은 codebuild-[regionID]-[accountID]-output-bucket입니다.
이 두 버킷(입력, 출력)은 빌드와 같은 AWS리전에 있어야 합니다.
예를 들어, CodeBuild가 오하이오 리전에서 빌드를 실행하도록 명령을 지정하는 경우, 입출력을 담당하는 두 버킷도 오하이오 리전에 있어야 합니다.
버킷 생성 가이드
4단계: 소스 코드 및 buildspec 파일 업로드
이 단계에서는 소스 코드 및 buildspec.yml파일을 입력 버킷에 추가합니다.
사용하는 운영체제의 zip 유틸리티를 사용하여 MessageUtil.java, TestMessageUtil.java, pom.xml, buildspec.yml을 포함하는 MessageUtil.zip이라는 파일을 생성합니다.
MessageUtil.zip파일의 디렉터리 구조가 다음과 같이 나타나야 합니다.
MessageUtil.zip
|-- pom.xml
|-- buildspec.yml
`-- src
|-- main
| `-- java
| `-- MessageUtil.java
`-- test
`-- java
`-- TestMessageUtil.java
프로젝트 폴더를 압축하는것이 아닌, 프로젝트 폴더 안에 있는 디렉터리(=폴더) 및 파일만 포함하십시오.
MessageUtil.zip파일을 codebuild-[regionID]-[accountID]-input-bucket이라는 입력 버킷에 업로드합니다.
5단계: 빌드 프로젝트 생성
이 단계에서는 AWS CodeBuild가 실행하는 데 사용할 빌드 프로젝트를 생성합니다. 이 빌드 프로젝트에는 소스 코드를 가져올 위치, 사용할 빌드 환경, 실행할 빌드 명령 및 빌드 출력을 저장할 위치를 비롯하여 빌드 실행 방법에 대한 정보가 포함되어 있습니다.
빌드 환경은 가 빌드를 실행하는 데 사용하는 운영 체제, 프로그래밍 언어 런타임 및 CodeBuild가 빌드를 실행하는 데 사용하는 도구의 조합을 나타냅니다. 빌드 환경은 Docker 이미지로 표현됩니다.
이 빌드의 경우 CodeBuild에 JDK버전 및 Apache Maven을 포함하는 Docker 이미지를 사용하도록 지시합니다.
빌드 프로젝트를 생성하려면
- AWS Management Console에서 AWS CodeBuild콘솔에 로그인
- AWS CodeBuild에서 AWS 영역 선택 가이드
(위 가이드에서) 엔드포인트 지정은 옵션 사항입니다. CodeBuild를 사용할 엔드포인트를 명시적으로 알려주지 않으면 서비스는 해당 리전과 연결된 엔드포인트를 사용합니다.
실습에서는 S3 버킷들이 모두 오레건 리전(us-west-2)에 있으므로 CodeBuild 프로젝트도 오레건 리전에 생성하겠습니다. - CodeBuild 프로젝트 생성 버튼을 누릅니다.
- 빌드 프로젝트 이름을 입력합니다. 각 AWS 계정에서 빌드 프로젝트 이름은 고유해야 합니다.
만약 해당 작업을 수행할 수 있는 권한이 없다는 오류가 발생시, 사용 계정에 AWSCodeBuildAdminAccess, AmazonS3ReadOnlyAccess, IAMFullAccess 권한을 IAM을 통하여 부여해줍니다.
- "소스 공급자"에서 Amazon S3를 선택해주세요.
- "버킷"에서 input-bucket 용도로 생성했던 버킷을 선택해주세요.
- "S3 객체 키"에는 압축했었던 MessageUtil.zip을 넣어주세요.
- 환경에서는 환경이미지에 관리형 이미지를 선택합니다.
- 운영 체제에서 Amazon Linux2를 선택합니다.
- 런타임에서 표준을 선택합니다.
- 이미지에서aws/codebuild/amazonlinux2-x86_64-standard:2.0
- 서비스 역할과 역할이름은 변경하지 않습니다.
- 이 실습은 디렉토리 루트에 buildspec.yml파일이 있기에, 빌드 사양은 변경하지 않습니다.
- 아티팩트는 Amazon S3를 선택합니다.
- 버킷 이름은 생성하였던 output버킷을 선택해줍니다.
- 이름과 경로는 비워둡니다.
- 최하단 좌측의 빌드 프로젝트 생성버튼을 눌러줍니다.
6단계: 빌드 실행
생성된 CodeBuild 프로젝트에서 빌드 시작을 눌러줍니다.
CLIENT_ERROR: NoSuchKey: The specified key does not exist. status code: 404
위 오류 발생 시, 버킷 내에 업로드되었어야하는 MessageUtil.zip이 제대로 있는지 확인해주세요.
정상적으로 빌드가 성공했다면
위와 같은 화면이 출력됩니다.
7단계: 요약된 빌드 정보 보기
8단계: 자세한 빌드 정보 보기
9단계: 빌드 출력 아티팩트 가져오기
이 단계에서 messageUtil-1.0.jar는 CodeBuild가 빌드하고 출력 버킷에 업로드한 파일입니다.
CoudBuild 콘솔 또는 Amazon S3 콘솔을 사용하여 이 단계를 수행할 수 있습니다.
빌드 출력 결과물을 가져오려면
위 messageUtil을 빌드한 CodeBuild 프로젝트로 진입 - 빌드 세부 정보 - 하단의 "아티팩트" 부분에서
아티팩트 업로드 위치를 확인해주세요.
빌드 출력 아티팩트를 가져오려면
S3 콘솔에서 output 버킷으로 진입 - aws-codebuild-test-java(codebuild 프로젝트명과 동일)
messageUtil-1.0.jar 빌드 출력 결과물 파일을 찾을 수 있습니다.
10단계: S3 버킷 삭제
지속적인 과금을 방지하기 위해 입력 버킷과 출력 버킷을 삭제할 수 있습니다.
IAM 유저나 관리자 IAM 유저 계정을 사용해서 이 버킷들을 삭제하려는 경우, 계정은 추가적인 엑세스 권한이 필요합니다.
사용자의 기존 액세스 정책에 마커 사이의 다음 명령문(### BEGIN ADDING STATEMENT HERE ### 및 ### END ADDING STATEMENTS HERE ###)을 추가합니다.
AWS CodePipeline을 이용하여 레파지토리 변경시 자동 빌드
AWS CodePipeline의 소스 스테이지를 설정해주세요
배포 스테이지의 경우 아래와 같이 설정합니다.
이전에는 input버킷에 빌드 내용을 올려서 빌드 후, output버킷에서 빌드된 .jar파일을 확인하였으나, CodePipeline 테스트에는 input 버킷만 사용하였습니다. 객체 키는 CodeBuild 설정과 동일하게 설정하였습니다.
성공적으로 파이프라인이 생성되어 커밋 시 빌드와 배포가 자동으로 이루어진 모습입니다.
'AWS' 카테고리의 다른 글
[Docker] failed to solve: alpine:latest: error getting credentials 오류 (1) | 2023.11.20 |
---|---|
[AWS] AWS CodeBuild 빌드 로그 S3에 저장 (0) | 2022.04.13 |
[AWS] Node.js 환경에서 CodeBuild와 CodePipeline을 통해 배포 자동화 (0) | 2022.04.08 |
[AWS] Error: listen EADDRINUSE: address already in use :::3001 오류 해결 (0) | 2022.02.18 |
[AWS] Lambda 다운로드 (0) | 2022.01.20 |