-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weβll occasionally send you account related emails.
Already on GitHub? Sign in to your account
π Deploy - CICD Pipeline κ΅¬μΆ #21
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,93 @@ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
name: Web Application Develop Server CI/CD | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
on: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
pull_request: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
branches: [ "dev" ] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
types: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- opened | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- synchronize | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- closed | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
jobs: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CI: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
runs-on: ubuntu-20.04 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
steps: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- name: Checkout | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
uses: actions/checkout@v3 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
# Cache Gradle~ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- name: Cache Gradle | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
uses: actions/cache@v3 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
with: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
path: | | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
~/.gradle/caches | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
~/.gradle/wrapper | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
restore-keys: | | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
${{ runner.os }}-gradle- | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
### runner application java μ€μ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- name: Set up JDK 17 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
uses: actions/setup-java@v3 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
with: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
java-version: '17' | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
distribution: 'temurin' | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
### application.yml μ€μ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- name: Set YML | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
run: | | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
echo "${{ secrets.APPLICATION_DEV_YML }}" | base64 --decode > ./src/main/resources/application-dev.yml | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
### gradlew μ€ν κΆν λΆμ¬ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- name: Grant execute Permission for gradlew | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
run: | | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
chmod +x gradlew | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
### project build | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- name: Build with Gradle | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
run: | | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
./gradlew clean build -x test | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+48
to
+50
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Skipping tests in the build process is risky The
- name: Build with Gradle
run: |
- ./gradlew clean build -x test
+ ./gradlew clean build π Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
### Docker Image Build and Push | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- name: Login to Docker Hub | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if: github.event.pull_request.merged == true | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
uses: docker/login-action@v2 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
with: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
username: ${{ secrets.DOCKERHUB_USERNAME }} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
password: ${{ secrets.DOCKERHUB_PASSWORD }} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- name: Set up Docker Buildx | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if: github.event.pull_request.merged == true | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
uses: docker/setup-buildx-action@v2 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- name: Build and push | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if: github.event.pull_request.merged == true | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
uses: docker/build-push-action@v4 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
with: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
context: . | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
file: ./Dockerfile | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
push: true | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
tags: ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_REPONAME }} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+64
to
+71
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. π οΈ Refactor suggestion Add version tagging for Docker images Using only the latest tag makes rollbacks difficult and version tracking impossible. - name: Build and push
if: github.event.pull_request.merged == true
uses: docker/build-push-action@v4
with:
context: .
file: ./Dockerfile
push: true
- tags: ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_REPONAME }}
+ tags: |
+ ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_REPONAME }}:latest
+ ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_REPONAME }}:${{ github.sha }} π Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
# closedμ λν server deploy | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CD: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if: github.event.pull_request.merged == true | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
needs: [CI] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
runs-on: ubuntu-20.04 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
steps: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
### SSH Connect and Docker Image Pull and Container Run | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- name: Docker Image Pull and Container Run | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
uses: appleboy/[email protected] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
with: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
host: ${{ secrets.DEV_SSH_HOST }} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
username: ${{ secrets.DEV_SSH_USERNAME }} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
key: ${{ secrets.DEV_SSH_KEY }} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
port: ${{ secrets.DEV_SSH_PORT }} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
script: | | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
docker stop api-server | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
docker rm api-server | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
docker image rm ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_REPONAME }} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
docker run -d -p 8080:8080 --name api-server --network ${{secrets.DOCKER_NETWORKNAME}} ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_REPONAME }} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+89
to
+93
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. π οΈ Refactor suggestion Improve deployment reliability and minimize downtime The current deployment process has several areas for improvement:
script: |
+ # Pull new image first to minimize downtime
+ docker pull ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_REPONAME }}
+
+ # Backup current container name if exists
+ CURRENT_CONTAINER=$(docker ps -q -f name=api-server)
+
+ # Start new container on different port
+ docker run -d -p 8081:8080 --name api-server-new --network ${{secrets.DOCKER_NETWORKNAME}} ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_REPONAME }}
+
+ # Wait for container to be healthy
+ sleep 10
+ if ! curl -f http://localhost:8081/health; then
+ echo "New container failed health check"
+ docker stop api-server-new
+ docker rm api-server-new
+ exit 1
+ fi
+
+ # Stop and remove old container
docker stop api-server
docker rm api-server
- docker image rm ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_REPONAME }}
- docker run -d -p 8080:8080 --name api-server --network ${{secrets.DOCKER_NETWORKNAME}} ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_REPONAME }}
+
+ # Rename new container
+ docker rename api-server-new api-server
+
+ # Cleanup old images
+ docker image prune -f π Committable suggestion
Suggested change
π§° Toolsπͺ yamllint[error] 93-93: no new line character at the end of file (new-line-at-end-of-file) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
π οΈ Refactor suggestion
Improve YAML file handling robustness
The current base64 decoding might be susceptible to newline issues. Consider using a more robust approach:
π Committable suggestion