참고
언어 빌드
Java 빌드
NOTE
name: Java with Gradle
on: workflow_dispatch
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: 체크아웃
uses: actions/checkout@v3
- name: 자바 샘플 코드로 이동
run: |
mv build_sample/java/* ./
- name: 자바설정(17)
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
- name: Gradle 래퍼 검증
uses: gradle/wrapper-validation-action@v1
- name: Gradle 설정
uses: gradle/gradle-build-action@v2
with:
gradle-version: '8.3'
- name: Gradle 빌드 실행
run: ./gradlew build
- name: 빌드 아티팩트 저장 # app/build/libs에 jar 저장
uses: actions/upload-artifact@v2
with:
name: java-build-artifacts
path: app/build/libs
s3:
name: Upload to S3
needs: build # 선행작업 설정
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write
steps:
- name: 빌드 아티팩트 다운로드
uses: actions/download-artifact@v2
with:
name: java-build-artifacts
- name: AWS 증명 설정
uses: aws-actions/configure-aws-credentials@v1
with:
aws-region: us-east-1
role-to-assume: ${{ secrets.AWS_ASSUME_ROLE_ARN }}
role-duration-seconds: 3600
- name: S3에 jar 업로드
run: |
aws s3 cp app.jar s3://${{ vars.BUCKET_NAME }}/
YAML
복사
JS NPM 패키징
NOTE
NPM 빌드 시나리오
name: JS-Node
on: workflow_dispatch
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: JS 코드로 이동
run: |
mv build_sample/js/humancat/* ./
- name: 노드 설정
uses: actions/setup-node@v3
with:
node-version: '18.x'
registry-url: 'https://registry.npmjs.org/'
- name: npm 설치
run: npm install
- name: 배포
run: npm publish
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
YAML
복사
실제 올라간 패키지
컨테이너 이미지 빌드
GitHub Action - DockerHub 연동
NOTE
워크플로우에서 만든 이미지를 도커허브에 업로드!
워크플로우 흐름
name: DockerHub build
on: workflow_dispatch
jobs:
build:
name: Humancat Server Build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: 파이썬 코드 이동
run: |
mv build_sample/container_build/* ./
- name: 파이썬 설정
uses: actions/setup-python@v4
with:
python-version: "3.8"
- name: 도커허브 로그인
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: 컨테이너 이미지 빌드 및 푸시
uses: docker/build-push-action@v2
with:
context: ./ # 실행 경로
file: ./Dockerfile # 파일
push: true # false면 빌드만하고 끝남
tags: ${{ secrets.DOCKERHUB_USERNAME }}/scofe # 저장경로
YAML
복사
Github-Action 코드
FROM python:3.8-slim
ENV PORT 8000
ENV SRC_DIR /opt/app
ENV PKG_TMP_DIR /tmp
COPY pip_requirements.txt ${PKG_TMP_DIR}/
RUN pip install --upgrade pip && \
pip install -r ${PKG_TMP_DIR}/pip_requirements.txt
RUN mkdir -p ${SRC_DIR}
COPY . ./${SRC_DIR}
WORKDIR ${SRC_DIR}
EXPOSE ${PORT}
ENTRYPOINT ["uvicorn"]
CMD ["main:app", "--host", "0.0.0.0", "--port", "8000"]
Docker
복사
Dockerfile
성공적으로 업로드!
# 실제 도커이미지 사용 해보기
docker run --name scofe -d -p 8080:8080 scofe/scofe
Bash
복사
Github-Action - ECR 연동
NOTE
DockerHub대신 AWS 서비스인 ECR을 사용하는 방식
AWS ECR을 사용한다면, AWS 인프라를 활용해서 컨테이너 이미지 관리를 운영할 수 있다는 장점과 IAM을 통해 컨테이너 이미지에 대한 접근 제어를 관리할 수 있다.
•
ECR은 기본적으로 Pirvate Image Registry이다.
워크플로우 흐름
name: AWS ECR Build and Push
on: workflow_dispatch
env:
ECR_REPOSITORY: ${{ vars.ECR_REPOSITORY }}
jobs:
build:
name: Humancat Build
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
steps:
- uses: actions/checkout@v3
- name: 샘플 코드로 이동
run: |
mv build_sample/container_build/* ./
- name: 파이썬 환경 설정
uses: actions/setup-python@v4
with:
python-version: "3.8"
- name: AWS OICD 인증
uses: aws-actions/configure-aws-credentials@v1
with:
aws-region: ap-northeast-2
role-to-assume: ${{ secrets.AWS_ASSUME_ROLE_ARN }}
role-duration-seconds: 900
- name: ECR 로그인
id: login-ecr
uses: aws-actions/amazon-ecr-login@v1
- name: 도커 빌드
run: |
docker build -t $ECR_REPOSITORY:latest .
- name: ECR에 이미지 푸시
run: |
docker push $ECR_REPOSITORY:latest
YAML
복사
도커파일은 DockerHub와 동일함
실제로 올라감!