CI/CD Pipeline #213
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI/CD Pipeline | |
| on: | |
| pull_request_target: | |
| branches: | |
| - "develop" | |
| types: [closed] | |
| paths: | |
| - 'monicar-collector/**' | |
| - 'monicar-control-center/**' | |
| - 'monicar-event-hub/**' | |
| workflow_dispatch: | |
| inputs: | |
| tags: | |
| description: 'Test scenario tags' | |
| env: | |
| BRANCH_NAME: ${{ github.head_ref || github.ref_name }} | |
| jobs: | |
| build: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v3 | |
| - name: Set up JDK 21 | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: '21' | |
| distribution: 'corretto' | |
| - uses: actions/checkout@v3 | |
| - name: make collector application-prod.yml | |
| run: | | |
| cd monicar-collector/src/main/resources | |
| touch ./application.yml | |
| echo "${{ secrets.MONICAR_COLLECTOR_YML }}" > ./application.yml | |
| echo "${{ secrets.MONICAR_COLLECTOR_YML }}" | |
| shell: bash | |
| - name: apply control-center application.yml | |
| run: | | |
| cd monicar-control-center/src/main/resources | |
| touch ./application.yml | |
| echo "${{ secrets.MONICAR_CONTROL_CENTER_YML }}" > ./application.yml | |
| echo "${{ secrets.MONICAR_CONTROL_CENTER_YML }}" | |
| shell: bash | |
| - name: make control-center env.properties | |
| run: | | |
| mkdir monicar-control-center/src/main/resources/properties | |
| cd monicar-control-center/src/main/resources/properties | |
| touch ./env.properties | |
| echo "${{ secrets.MONICAR_CONTROL_CENTER_ENV }}" > ./env.properties | |
| echo "${{ secrets.MONICAR_CONTROL_CENTER_ENV }}" | |
| shell: bash | |
| - name: make event-hub application-prod.yml | |
| run: | | |
| cd monicar-event-hub/src/main/resources | |
| touch ./application.yml | |
| echo "${{ secrets.MONICAR_EVENT_HUB_YML }}" > ./application.yml | |
| echo "${{ secrets.MONICAR_EVENT_HUB_YML }}" | |
| shell: bash | |
| - name: Setup Gradle | |
| uses: gradle/actions/setup-gradle@417ae3ccd767c252f5661f1ace9f835f9654f2b5 | |
| - name: Grant execute permission for gradlew | |
| run: chmod +x gradlew | |
| - name: Build with Gradle Wrapper | |
| run: ./gradlew clean build -x test | |
| - name: Build and Image Deploy to DockHub | |
| if: success() | |
| run: | | |
| sudo docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }} | |
| cd ./monicar-collector | |
| sudo docker build --platform linux/amd64 -t monicar-collector . | |
| IMAGE_TAG=suxxxxhyun/monicar-collector:latest | |
| echo "Image Tag: $IMAGE_TAG" | |
| sudo docker tag monicar-collector $IMAGE_TAG | |
| sudo docker push $IMAGE_TAG | |
| cd ../monicar-control-center | |
| sudo docker build --platform linux/amd64 -t monicar-control-center . | |
| IMAGE_TAG=suxxxxhyun/monicar-control-center:latest | |
| echo "Image Tag: $IMAGE_TAG" | |
| sudo docker tag monicar-control-center $IMAGE_TAG | |
| sudo docker push $IMAGE_TAG | |
| cd ../monicar-event-hub | |
| sudo docker build --platform linux/amd64 -t monicar-event-hub . | |
| IMAGE_TAG=suxxxxhyun/monicar-event-hub:latest | |
| echo "Image Tag: $IMAGE_TAG" | |
| sudo docker tag monicar-event-hub $IMAGE_TAG | |
| sudo docker push $IMAGE_TAG | |
| # - name: Connect to WAS & Execute Application (monicar-collector) | |
| # uses: appleboy/[email protected] | |
| # with: | |
| # host: ${{ secrets.EC2_COLLECTOR_HOST }} | |
| # username: ${{ secrets.EC2_COLLECTOR_USER }} | |
| # key: ${{ secrets.EC2_COLLECTOR_PRIVATE_KEY }} | |
| # script: | | |
| # echo "Pulling and running monicar-collector image on collector EC2..." | |
| # sudo docker stop $(sudo docker ps -a -q) | |
| # sudo docker rm $(sudo docker ps -a -q) | |
| # sudo docker rmi -f $(sudo docker images -q) | |
| # sudo docker pull suxxxxhyun/monicar-collector:latest | |
| # sudo docker run -d --name monicar-collector -p 8080:8080 suxxxxhyun/monicar-collector:latest | |
| - name: Connect to WAS & Execute Application (monicar-control-center) | |
| uses: appleboy/[email protected] | |
| with: | |
| host: ${{ secrets.EC2_CONTROL_CENTER_HOST }} | |
| username: ${{ secrets.EC2_CONTROL_CENTER_USER }} | |
| key: ${{ secrets.EC2_CONTROL_CENTER_PRIVATE_KEY }} | |
| script: | | |
| echo "=== [배포 시작] Monicar Control Center ===" | |
| # 1️⃣ Redis와 Elasticsearch 컨테이너가 실행 중인지 확인 | |
| if [ ! "$(sudo docker ps -q -f name=redis-container)" ]; then | |
| if [ "$(sudo docker ps -aq -f status=exited -f name=redis-container)" ]; then | |
| echo "기존 Redis 컨테이너 제거 중..." | |
| sudo docker rm redis-container | |
| fi | |
| echo "Redis 컨테이너 실행 중이 아님 → 새로 시작합니다..." | |
| sudo docker run -d --name redis-container -p 6379:6379 redis | |
| else | |
| echo "Redis 컨테이너가 이미 실행 중입니다." | |
| fi | |
| if [ ! "$(sudo docker ps -q -f name=monicar-es)" ]; then | |
| if [ "$(sudo docker ps -aq -f status=exited -f name=monicar-es)" ]; then | |
| echo "기존 Elasticsearch 컨테이너 제거 중..." | |
| sudo docker rm monicar-es | |
| fi | |
| echo "Elasticsearch 컨테이너 실행 중이 아님 → 새로 시작합니다..." | |
| sudo docker run -d --name monicar-es -p 9200:9200 -p 9300:9300 bhoonk/monicar-es:latest | |
| else | |
| echo "Elasticsearch 컨테이너가 이미 실행 중입니다." | |
| fi | |
| # 2️⃣ 기존 `monicar-control-center` 컨테이너 중지 및 삭제 | |
| echo "기존 monicar-control-center 컨테이너 중지 및 삭제..." | |
| sudo docker stop monicar-control-center || true | |
| sudo docker rm monicar-control-center || true | |
| # 3️⃣ 기존 이미지 삭제 | |
| echo "기존 monicar-control-center 이미지 삭제..." | |
| sudo docker rmi -f suxxxxhyun/monicar-control-center:latest || true | |
| # 4️⃣ 최신 이미지 Pull | |
| echo "최신 monicar-control-center 이미지 가져오는 중..." | |
| sudo docker pull suxxxxhyun/monicar-control-center:latest | |
| # 5️⃣ 새로운 컨테이너 실행 (Redis와 같은 네트워크 사용) | |
| echo "새로운 monicar-control-center 컨테이너 실행..." | |
| sudo docker run -d --name monicar-control-center --network host -p 8081:8081 suxxxxhyun/monicar-control-center:latest | |
| echo "=== [배포 완료] Monicar Control Center가 실행되었습니다! ===" | |
| # | |
| # - name: Connect to WAS & Execute Application (monicar-event-hub) | |
| # uses: appleboy/[email protected] | |
| # with: | |
| # host: ${{ secrets.EC2_EVENT_HUB_HOST }} | |
| # username: ${{ secrets.EC2_EVENT_HUB_USER }} | |
| # key: ${{ secrets.EC2_EVENT_HUB_PRIVATE_KEY }} | |
| # script: | | |
| # echo "Pulling and running monicar-event-hub image on event-hub EC2..." | |
| # sudo docker stop $(sudo docker ps -a -q) | |
| # sudo docker rm $(sudo docker ps -a -q) | |
| # sudo docker rmi -f $(sudo docker images -q) | |
| # sudo docker pull suxxxxhyun/monicar-event-hub:latest | |
| # sudo docker run -d --name monicar-event-hub -p 8082:8082 suxxxxhyun/monicar-event-hub:latest |