Skip to content

CI/CD Pipeline with Docker and EC2 #69

CI/CD Pipeline with Docker and EC2

CI/CD Pipeline with Docker and EC2 #69

Workflow file for this run

name: CI/CD Pipeline with Docker and EC2
on:
push:
branches: [ "develop" ]
workflow_dispatch:
jobs:
build-with-docker:
if: github.repository == 'INFLUY/INFLUY-BE' || github.event_name == 'workflow_dispatch'
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'
cache: 'gradle'
- name: Create application.yml
shell: bash
run: |
mkdir -p src/main/resources
cat <<'EOF' > src/main/resources/application.yml
${{ secrets.APPLICATION_PROD_YML }}
EOF
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
- name: Build with Gradle
run: |
chmod +x gradlew
./gradlew bootJar
- name: Login to DockerHub
run: echo "${{ secrets.DOCKER_HUB_TOKEN }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin
- name: Build and push Docker image
run: |
docker build --platform linux/amd64 -t ${{ secrets.DOCKER_USERNAME }}/${{ vars.DOCKER_CONTAINER_NAME }}:latest .
docker push ${{ secrets.DOCKER_USERNAME }}/${{ vars.DOCKER_CONTAINER_NAME }}:latest
deploy-with-ec2:
needs: build-with-docker
runs-on: ubuntu-latest
steps:
- name: Deploy to EC2
run: |
echo "${{ secrets.EC2_SSH_KEY }}" > private_key.pem
chmod 600 private_key.pem
ssh -i private_key.pem -o StrictHostKeyChecking=no ${{ secrets.EC2_USERNAME }}@${{ secrets.EC2_HOST }} "
sudo docker rm -f influy || true
cd /home/ubuntu
sudo docker-compose pull spring
sudo docker-compose up -d spring
"
rm -f private_key.pem