개발자는 자동화를 좋아해(cd편)

YEONGHUN KO·2024년 5월 9일
0

DEVOPS

목록 보기
6/6
post-thumbnail

앞에서 ci 편을 통해 테스트 이후 코드가 배포되는 workflow를 자동화 시켜보았다.

그럼 이제 드뎌, 내가 원래 ci/cd를 도입하고자 했던 목적!

바로 oracle에 배포하는 과정을 자동화해보려고 한다.

실제 production환경에 코드를 배포하는 일이기 때문에 cd(continuous deployment)라고 해도 될것 같다.

그럼 바로 코드를 보면서 알아보자.


  deployment:
    needs: test
    runs-on: ubuntu-latest
    if: ${{ !contains(github.event.head_commit.message, '[ci skip]') }}
    steps:
      - uses: actions/checkout@v3.3.0
      - name: executing remote ssh commands using password
        uses: appleboy/ssh-action@v1.0.3
        with:
          host: ${{ secrets.HOST }}
          username: ${{ secrets.USERNAME }}
          password: ${{ secrets.PASSWORD }}
          port: ${{ secrets.PORT }}
          key: ${{ secrets.KEY }}
          script: |
            cd chat-app-server/
            git pull origin master
            npm run build:prod
            pm2 restart dist/bundle.js
            echo "build compleleted✅"

위의 on,env,jobs context는 ci에서 다루었으니 생략하였다.

그럼 바로 살펴보자.

needs라는 context이다. 이름에서도 알 수 있듯이 test라는 jobs가 통과되어야만 실행이 된다는 뜻. 나중에 밑에 첨부한 ui 스샷에서도 볼 수 있지만, test ▶️ deployment 처럼 진행이 되게끔할때 필요한 context이다.

그리고 밑에를 보면 if문이 나온다. ci에서 언급했으므로 생략하겠다.

쭉쭉 내려가면 ssh-action이라는 액션이 나온다. 이 액션이 바로 ci/cd 서버에서 원격으로 ssh에접속할 수 있게 하는 액션이다.
ssh접속할때 host,username,port,key 에 대한 정보가 필요하다.(일종의 환경변수)

이 정보를 with에다가 입력하면 된다.

입력에 필요한 정보를 secrets에 저장하였고 with에서 사용하였다.

그럼 oracle vm에 접속을 할 수 있다.

그리고 나면 인제 깃헙 저장소의 코드를 다운받아서 빌드하고 빌드파일을 실행시켜야한다.

script context에서 그 명령들을 실행시킨다.

이렇게 하고 저장소에 코드를 푸쉬하면 아래와 같이 ui가 표시된다.

need context에 의해 test job뒤에 deployment job이 실행되는 것을 볼 수 있다.(즉 test가 실패하면 deloyment job이 실행되지 않는다)

이로써 나만의 꼬봉이 탄생했다.

알고보면 아무것도 아닌.

인생자체가 그런것이 아닌가? 여튼 이렇게 ci/cd 글을 마무리해본다.

끝!

profile
'과연 이게 최선일까?' 끊임없이 생각하기

0개의 댓글