diff --git a/.github/workflows/cicd.yml b/.github/workflows/cicd.yml new file mode 100644 index 0000000..4b01d64 --- /dev/null +++ b/.github/workflows/cicd.yml @@ -0,0 +1,66 @@ +name: CI/CD + +on: + push: + branches: + - main + pull_request: + branches: + - '**' + +permissions: + contents: read + +jobs: + build: + runs-on: ubuntu-latest + + steps: + # 기본 체크아웃 + - name: Checkout + uses: actions/checkout@v3 + # Gradlew 실행 허용 + - name: Run chmod to make gradlew executable + run: chmod +x ./gradlew + # JDK 17 세팅 + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'temurin' + # 환경 변수 설정 + - name: Set environment values + run: | + touch ./.env + echo "${{ secrets.ENV }}" > ./.env + touch ./src/main/resources/env.properties + echo "${{ secrets.ENV_PROPERTIES }}" > ./src/main/resources/env.properties + + shell: bash + # Gradle build + - name: Build with Gradle + uses: gradle/gradle-build-action@v2 + with: + arguments: clean build -x test + + # Docker build + - name: Docker build + run: | + echo ${{ secrets.DOCKERHUB_PASSWORD }} | docker login -u ${{ secrets.DOCKERHUB_USERNAME }} --password-stdin + docker build -t ${{ secrets.DOCKERHUB_REPOSITORY }} . + docker tag ${{ secrets.DOCKERHUB_REPOSITORY }} ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_REPOSITORY }}:${GITHUB_SHA::7} + docker push ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_REPOSITORY }}:${GITHUB_SHA::7} + + # Deploy + - name: Deploy + uses: appleboy/ssh-action@master + with: + host: 35.216.106.69 + username: ${{ secrets.SSH_USERNAME }} + key: ${{ secrets.SSH_PRIVATE_KEY }} + envs: GITHUB_SHA + script: | + sudo echo ${{ secrets.DOCKERHUB_PASSWORD }} | docker login -u ${{ secrets.DOCKERHUB_USERNAME }} --password-stdin + sudo docker pull ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_REPOSITORY }}:${GITHUB_SHA::7} + sudo docker tag ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_REPOSITORY }}:${GITHUB_SHA::7} alchive_spring + sudo docker-compose up -d \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 9963627..2600035 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -6,6 +6,8 @@ services: container_name: mysql ports: - "3306:3306" + env_file: + - ./.env environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} MYSQL_DATABASE: ${MYSQL_DATABASE} @@ -20,23 +22,20 @@ services: networks: - alchive - # springboot: - # container_name: springboot - # build: - # context: . - # dockerfile: Dockerfile - # restart: always - # depends_on: - # - mysql - # ports: - # - "8080:8080" - # environment: - # SPRING_DATASOURCE_URL: ${SPRING_DATASOURCE_URL} - # SPRING_DATASOURCE_USERNAME: ${SPRING_DATASOURCE_USERNAME} - # SPRING_DATASOURCE_PASSWORD: ${SPRING_DATASOURCE_PASSWORD} - # SPRING_PROFILES_ACTIVE: ${SPRING_PROFILES_ACTIVE} - # networks: - # - alchive + springboot: + container_name: springboot + restart: always + depends_on: + - mysql + ports: + - "8080:8080" + environment: + SPRING_DATASOURCE_URL: ${SPRING_DATASOURCE_URL} + SPRING_DATASOURCE_USERNAME: ${SPRING_DATASOURCE_USERNAME} + SPRING_DATASOURCE_PASSWORD: ${SPRING_DATASOURCE_PASSWORD} + SPRING_PROFILES_ACTIVE: ${SPRING_PROFILES_ACTIVE} + networks: + - alchive # # Monitoring # prometheus: