CI/CD 빌드 Github 프로모션 (1)

CI/CD

서비스 기능을 개발한 후 빌드, 테스트, 소스 병합, 릴리스 및 배포와 같은 일련의 프로세스를 거칩니다. 그러나 이러한 작업은 예상보다 번거롭고 프로젝트의 범위가 커질수록 고통도 ​​커집니다.

CI/CD는 Continuous Integration, Continuous Delivery, Continuous Deployment의 약자로 위의 프로세스를 자동화하여 불필요한 작업 시간을 줄이고 더 빠른 서비스를 제공할 수 있습니다.

CI/CD 배포를 지원하는 도구는 생각보다 많습니다.

  • 젠킨스
  • 트래비스 CI
  • 서클 CI
  • 구글 클라우드 빌드
  • AWS 코드빌드

각 도구는 가격 구조에 따라 특성이 다르므로 프로젝트에 적합한 도구를 선택할 수 있습니다. 이 게시물에서는 Github Actions를 사용하여 빌드를 시도합니다.

Github 작업이란 무엇입니까?

Github 액션은 2018년에 출시되어 베타 테스트를 거쳐 2019년부터 운영되고 있는 비교적 새로운 기술입니다. 아래는 github에서 제공하는 개요입니다.

GitHub Actions를 사용하여 리포지토리에서 바로 소프트웨어 개발 워크플로를 자동화, 사용자 지정 및 실행하십시오. CI/CD를 포함한 모든 작업을 수행하기 위한 작업을 검색, 생성 및 공유하고 완전히 사용자 지정된 워크플로에서 작업을 결합할 수 있습니다.

Github 액션은 단순히 ci/cd를 위한 도구가 아니라 다양한 워크플로를 생성할 수 있어야 합니다. 예를 들어 cron 표현식을 사용하여 배치 작업을 실행하는 기능을 제공합니다. 또한 github에서 자체적으로 제공하는 기능이기 때문에 다른 타사 제공업체를 이용하는 것보다 관리할 포인트가 적다는 장점이 있습니다.

워크플로를 작성하기 전에!

저는 Java 11과 JDK 11로 시작했습니다.

프로젝트를 마우스 오른쪽 버튼으로 클릭하고 디렉토리를 클릭한 다음 build.gradle을 빌드하고 필요한 종속성을 주입한 다음 Build Link를 클릭하여 주입을 강제합니다.

src폴더 생성, 메인폴더와 테스트폴더 생성, 서브폴더 완성까지 완료하면 자동삽입 완료!!
해당되지 않는 경우 “다음으로 디렉토리 표시”를 선택하십시오!!


그렇지 않은 경우 프로젝트 구성에서 모듈을 클릭하여 삽입할 수 있습니다!


먼저 IntelliJ의 폴더 구조


상위 폴더에서 시작하세요!

초기 설정부터 최상위 폴더부터 시작하세요!

디렉토리에서 파일 추출

디렉토리가 다음과 같이 구성되어 있는지 확인해야 합니다!
아직 디렉토리가 있어서 몇주째 고생중입니다…
물론 디렉토리에서 하는 방법도 있지만 액션이 빌드를 인식하지 못하는 단점이 있습니다.
폴더에서 꺼내서 실행해도 되지만 실행하면 에러가 납니다…

결국 처음부터 다시 만들기 시작했습니다.


227 … 모든 행동 시도 …


쓰기 워크플로

Gradle과 함께 Java를 선택했습니다.

name: Deploy to Amazon EC2

on:
#   push:
#     branches: ( "main" )
  pull_request:
    branches: ( "feature" )

이름은 무엇이든 될 수 있습니다.
우선, 우리 프로젝트는 주로 기능 개발, 실험, dev로 전환하고 변경 사항이 없을 때 main으로 전환하는 git 흐름을 선택했습니다.

permissions:
  contents: read

jobs:
  deploy:
    name: Deploy
    runs-on: ubuntu-latest
    environment: production

    steps:
    #  기본 체크아웃
    - name: Checkout
      uses: actions/checkout@v2
   #  JDK 11 세팅
    - name: Set up JDK 11
      uses: actions/setup-java@v1
      with:
        java-version: '11'
        distribution: 'temurin'
        
    # Gradle build (Test 제외)
    - name: Build with Gradle
      uses: gradle/gradle-build-action@(깃허브 액션에서 주는 것 이용!!)
      with:
        arguments: clean build -x test

우리는 테스트를 배제했습니다. 구성에 따라 jdk 11의 @1 또는 @2가 달라지므로 기본 사항을 숙지하고 길을 찾는 것이 중요합니다!

        - name: Build with Gradle
          uses: gradle/gradle-build-action@v2
          with:
            gradle-version: 7.5.1
            arguments: build 

빌드가 작동하지 않으면 버전 주입을 시도해야 합니다!

    #  디렉토리 생성
    - name: Make Directory
      run: mkdir -p deploy
    #  Jar 파일 복사
    - name: Copy Jar
      run: cp ./build/libs/*.jar ./deploy

위의 내용을 추가하지 않아도 동작하는 것을 확인했으나 문제가 있을 경우를 대비하여 추가하였습니다.


여기까지 했다면 Git Actions의 기본 구조는 완성된 것입니다!

    # (2) application.yml 추가
    - run: touch ./src/main/resources/application.yml
    - run: echo "${{ secrets.APPLICATION }}" > ./src/main/resources/application.yml
    - run: cat ./src/main/resources/application.yml

yml 파일로 실행하기 때문에 yml을 설정했습니다!
GitHub 리포지토리 설정으로 이동하여 키를 입력하세요!


첫 완성 코드

name: Deploy to Amazon EC2

on:
#   push:
#     branches: ( "main" )
  pull_request:
    branches: ( "feature" )

env:
  APPLICATION: ./src/main/resources/application.yml

permissions:
  contents: read

jobs:
  deploy:
    name: Deploy
    runs-on: ubuntu-latest
    environment: production

    steps:
    # (1) 기본 체크아웃
    - name: Checkout
      uses: actions/checkout@v2
      
    # (2) application.yml 추가
    - run: touch ./src/main/resources/application.yml
    - run: echo "${{ secrets.APPLICATION }}" > ./src/main/resources/application.yml
    - run: cat ./src/main/resources/application.yml
    
    # (3) JDK 11 세팅
    - name: Set up JDK 11
      uses: actions/setup-java@v1
      with:
        java-version: '11'
        distribution: 'temurin'
        
    # (4) Gradle build (Test 제외)
    - name: Build with Gradle
      uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1
      with:
        arguments: clean build -x test
    # (5) 디렉토리 생성
    - name: Make Directory
      run: mkdir -p deploy
    # (6) Jar 파일 복사
    - name: Copy Jar
      run: cp ./build/libs/*.jar ./deploy

./src/main/resources/application.yml -> 파일 위치 설정!! 확인!!
디렉토리에서 일하는 사람들
./directory filename/src/main/resources/application.yml 진행 방법!