CICD 배포/CICD 배포

[ GitHub ] Action

김붕어87 2023. 10. 25. 10:43
반응형

 

GitHub Action으로 CI/CD를 구성할 수 있습니다.
GitHub-hosted-runner는 GitHub 자원을 사용하며, 한달에 스토리지 : 500MB, 시간 : 2000분을 무료 제공
Self-hosted-runner는 개인 노트북,서버 자원을 사용하여 CI/CD 진행

 

 

1. GitHub Action 사용방법

# 사용할 이름을 지정
name: test

# 해당 Action은 아래의 조건을 만족할 때 실행됨
on:
  push:
    branches: [ main ] # main 브랜치에 push가 발생할 때
  pull_request:
    branches: [ main ] # main 브랜치에 pull_request가 발생할 때
  workflow_call		   # 워크플로우 호출
      outputs:
      IMAGE_TAG:
        description: "IMAGE TAG"
        value: ${{ jobs.application-ci.outputs.IMAGE_TAG }}  
      inputs:
      IMAGE_TAG:
        required: true
        type: string
   
  # 수동으로 해당 action을 실행하고 싶을때 필요한 옵션 
  # 분기 또는 태그에 대한 머지 & 커밋 발생할 때
  workflow_dispatch:

jobs:
  # test-nginx 라는 job 정의
  test-nginx:
    # ubuntu-latest github hosted runner를 사용
    runs-on: ubuntu-latest
    
    # setps에 오는 내용들은 순서대로 수행
    steps:
      # repository 접근을 위해 checkout 수행
      - uses: actions/checkout@v2

      # [Script 1] 실행
      - name: "[Script 1]"
        run: echo Hello!

      - name: "[Script 2]"
        run: |
          echo Hi! Hi!
          echo This is multi line script​

 

 

반응형

2. docker buildx

  • 도커 작동 과정
    • 과정1) dockerfile을 OCI 이미지로 빌드 
    • 과정2) OCI 이미지를 Container 빌드
  • docker buildx는 OCI 이미지를 만들어주는 역
... 중간 생략 ...

jobs:
  build:
    # ubuntu-latest github runner 사용
    runs-on: ubuntu-latest
    steps:
      # repository checkout
      - uses: actions/checkout@v2
      
      # 태그명을 다른 setp에서 사용할 수 있도록 output에 저장
      - name: Set output
        id: vars
        run: echo ::set-output name=tag::${GITHUB_REF#refs/*/}
      
      # tonistiigi/binfmt 이미지를 이용해 qemu 설치
      - name: Docker Setup QEMU
        uses: docker/setup-qemu-action@v1.2.0

      # docker buildx 설치
      - name: Docker Setup Buildx
        uses: docker/setup-buildx-action@v1.6.0

      # secrets를 이용해 Docker Hub 로그인
      - name: Docker Login
        uses: docker/login-action@v1.10.0
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_TOKEN }}
      
      # buildx 명령어로 amd64, arm64, arm/v6, arm/v7 아키텍처 이미지 빌드 및 
      - name: Build Image
        working-directory: python
        run: docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6 -t inerplat/github-action-example:${{ steps.vars.outputs.tag }} --push .

 

 

 

 

    steps:
      - name: Checkout DDO
        uses: actions/checkout@v3
        # GitHub Repository를 git checkout으로 코드 다운로드 받기

      - uses: actions/setup-java@v3
        with:
          distribution: "adopt"
          java-version: "17"
        # java 설치하기 

      - uses: actions/setup-node@v3
        with:
          node-version: "16.15.1"
       # node js 설치하기

      - name: Cache Build Artifacts
        uses: ./.github/actions/cache-build-artifacts
        with:
          cache-python: "false"
       # 반복되는 작업은 작업 시간을 줄이기 위해서 "Cache Action"이 가능합니다.
       
      - name: Setup Gradle
        uses: gradle/gradle-build-action@v2
		# Gradle를 사용해서 Java 빌드 및 테스트       

      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v1
        id: login-aws
        with:
          role-to-assume: ${{ secrets.role_to_assume }}
          role-session-name: rolesession
          aws-region: ${{ inputs.aws-region }}
          mask-aws-account-id: false
        # AWS Role 권한 획득
        
      - name: Login to Amazon ECR
        id: login-ecr
        uses: aws-actions/amazon-ecr-login@v1        
        # ECR 로그인
        
      - name: Install yq
        run: |
          sudo add-apt-repository ppa:rmescandon/yq
          sudo apt update
          sudo apt install yq -y
       # yaml를 수정할 수 있는 Tool

 

 

 

 

 

반응형