Forest Gump?

github-action 을 이용한 cicd구축기 -1부 본문

카테고리 없음

github-action 을 이용한 cicd구축기 -1부

code1010 2023. 3. 6. 09:02

CI ( Continuous Integration) CD ( Continous deply) 
지속적인 통합과 지속적인 배포의 준말이다. 
 
 
ec2 인스턴스를 만들고, jenkins 를 설치해 CI/CD 를 구축하려고 했다. 그런데! 

Jenkins 파이프 라인 설정 중..

찾아보다 보니 github Actions 이라는 도구가 새로 나왔다고 했다. 심지어 간편하다고 하다. 
새로운건 빠르게 적용시켜보고 싶어서, 젠킨스 대신 사용해보려고 한다 .
 

 
각각의 용어의 명칭은 다음과 같다.
 

  • Workflows: 작업 뭉치
  • Events: 작업 뭉치 동작하는 이벤트, push, release, pull request, 스케줄, 등
  • Jobs: 동시 수행 가능한 작업 단위
  • Runners: Job 실행되는 곳. GitHub이 제공하는 가상 머신(Linux, macOS, Windows)
  • Steps: 순서대로 실행되는 쉘 커맨드 또는 action
  • Actions: 재사용할 수 있는 job의 step. 공유된 action은 GitHub Marketplace에서 구할 수 있음.

 

위 설정들을 바탕으로, .gradle/workflows에 git action 스크립트와 설정을 했다.

다음은 계속된 실패의 흔적..


name: jay-CiCD # workflow의 이름을 지정해준다.

on: # 작동 트리거로 설정할 부분을 작성하는 곳이다.
  push: # 이 스크립트는 개발서버용 이므로 dev 브렌치에 push될 때 작동하도록 해두었다.
     branches: [ master ]


# jobs에선 action의 단계(step)를 설정할 수 있다.
# 여러 개의 job을 사용할 수 있고, job끼리 서로 정보를 교환할 수도 있다.

 

 

 Git action yml은 스크립트는 다음과 같다.

jobs:

  build:
    name: Build # job의 이름을 지정해 준다.
    runs-on: ubuntu-latest # job을 실행할 환경을 정해준다.

    steps:
      - name: SSH Remote Commands
        uses: appleboy/ssh-action@v0.1.8
        # with라는 키워드로 Action에 값을 전달할 수 있다.
        # 아까 설정했던 secrets를 사용해서 값을 가져오자.
        with:
          host: ${{ secrets.HOST }}
          username: ${{ secrets.USERNAME }}
          key: ${{ secrets.KEY }}
          port: ${{ secrets.PORT }}
          # ssh 연결이 아무리 늦어도 20초 정도면 된다.
          timeout: 25s
          
          # ssh 접속이 되면 실행할 스크립트
          script: |
            echo "#START"
            cd home/ubuntu/service/jay

            
            # 1
            REPOSITORY=/home/ubuntu/service/jay
            PROJECT_NAME=multi-source

            # 2
            cd $REPOSITORY/$PROJECT_NAME/

            # 3
            echo "> Git Pull"

            git pull origin master

            echo "> 프로젝트 Build 시작"

            # 4
            ./gradlew build

            echo "> step1 디렉토리로 이동"

            cd $REPOSITORY

            #echo "> Build 파일 복사"

            # 5
            #cp $REPOSITORY/$PROJECT_NAME/target/*.jar $REPOSITORY/

            echo "> 현재 구동중인 애플리케이션 pid 확인"

            # 6
            CURRENT_PID=$(pgrep -f $PROJECT_NAME)


            echo "현재 구동 중인 애플리케이션 pid: $CURRENT_PID"

            # 7
            if [ -z "$CURRENT_PID" ]; then
                echo "> 현재 구동 중인 애플리케이션이 없으므로 종료하지 않습니다."
            else
                echo "> kill -15 $CURRENT_PID"
                kill -15 $CURRENT_PID
                sleep 5
            fi

            echo "> 새 애플리케이션 배포"

            # 8
            #JAR_NAME=$(ls -tr $REPOSITORY/ | grep jar | tail -n 1)

            #echo "> JAR Name: $JAR_NAME"

            # 9
            nohup java -jar build/libs/multi-source-0.0.1-SNAPSHOT.jar  &

 

 

자세한 내용은 2부에서 더 써봐야겠다. 

 

Reference : 


https://inpa.tistory.com/entry/GitHub-%F0%9F%8F%9B%EF%B8%8F-%EA%B9%83%ED%97%99-%ED%86%A0%ED%81%B0-%EB%B0%9B%EA%B8%B0