Skip to content

ci/cd: run-docker-image-on-server-1에서 필요한 job 추가 #100

ci/cd: run-docker-image-on-server-1에서 필요한 job 추가

ci/cd: run-docker-image-on-server-1에서 필요한 job 추가 #100

Workflow file for this run

name: Java CICD with Gradle
on:
push:
branches:
- feature/CICD-test
pull_request:
branches:
- main
types: [closed]
permissions:
contents: read
jobs:
set-variable:
runs-on: [self-hosted, loadbalancer-server]
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Check Blue Environment
id: check-blue
run: |
IS_BLUE_ENV=$(sh /usr/local/bin/scripts/is_blue_env.sh)
echo "IS_BLUE_ENV=$IS_BLUE_ENV" >> $GITHUB_ENV
shell: bash
- name: Print Environment
run: |
echo "IS_BLUE_ENV is ${{ env.IS_BLUE_ENV }}"
build-docker-image:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
- name: Set YML
run: |
mkdir -p lime-api/src/main/resources
echo "${{ secrets.APPLICATION_YML }}" | base64 --decode > lime-api/src/main/resources/application.yml
echo "${{ secrets.APPLICATION_API_YML }}" | base64 --decode > lime-api/src/main/resources/application-api.yml
find lime-api/src
mkdir -p lime-domain/src/main/resources
echo "${{ secrets.APPLICATION_DOMAIN_YML }}" | base64 --decode > lime-domain/src/main/resources/application-domain.yml
find lime-domain/src
mkdir -p lime-infrastructure/src/main/resources
echo "${{ secrets.APPLICATION_INFRA_YML }}" | base64 --decode > lime-infrastructure/src/main/resources/application-infra.yml
find lime-infrastructure/src
- name: Build with Gradle
uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1
with:
arguments: clean bootJar
- name: docker image build
run: docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/lime-image .
- name: docker login
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
- name: docker Hub push
run: docker push ${{ secrets.DOCKERHUB_USERNAME }}/lime-image
run-docker-image-on-server-1:
needs: [ build-docker-image, set-variable ]
runs-on: [ self-hosted, lime-was-server-1 ]
steps:
- name: docker pull
run: sudo docker pull ${{ secrets.DOCKERHUB_USERNAME }}/lime-image
- name: Run Docker Container
run: |
if [ "${{ env.IS_BLUE_ENV }}" == "true" ]; then
echo "Running with GREEN_PORT..."
sudo docker run --name lime-image --rm -d -p ${{ secrets.GREEN_PORT }}:8080 ${{ secrets.DOCKERHUB_USERNAME }}/lime-image
else
echo "Running with BLUE_PORT..."
sudo docker run --name lime-image --rm -d -p ${{ secrets.BLUE_PORT }}:8080 ${{ secrets.DOCKERHUB_USERNAME }}/lime-image
fi
- name: Test Application Response from /actuator
id: test_response
continue-on-error: true
run: |
PORT=${{ env.IS_BLUE_ENV == 'true' && secrets.GREEN_PORT || secrets.BLUE_PORT }}
response=$(curl -s http://localhost:$PORT/actuator)
if [[ -z "$response" ]]; then
echo "::set-output name=passed::false"
else
echo "Actuator response received: $response"
echo "::set-output name=passed::true"
fi
- name: Stop Docker Container After Test
run: |
PORT=${{ steps.test_response.outputs.passed == 'true' && secrets.BLUE_PORT || secrets.GREEN_PORT }}
echo "Stopping Docker container on port $PORT..."
container_id=$(sudo docker ps -q --filter "publish=$PORT")
if [ ! -z "$container_id" ]; then
sudo docker stop $container_id
echo "Container on port $PORT stopped."
else
echo "No container found running on port $PORT"