Search
Duplicate
📒

[GitOps CICD] 04. 언어(Java, JS) 빌드, 컨테이너 이미지 빌드

상태
완료
수업
GitOps CICD
주제
GithubAction
4 more properties
참고

언어 빌드

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와 동일함
실제로 올라감!