ตัวอย่าง Github Action สำหรับ Push Docker image ไปที่ Github Package (Kotlin + Spring)

บันทึกการ Setup Gihub Action สำหรับ Kotlin Project โดยจะทำการ build image บน Github Action จากนั้นจึงจะ Push image ไปที่ github package

สำหรับ Dockerfile

FROM eclipse-temurin:17-alpine as build
COPY .mvn .mvn                                               
COPY mvnw .                                                  
COPY pom.xml .                                               
COPY src src                                                 
RUN ./mvnw package                                        


FROM eclipse-temurin:17-alpine                            
COPY --from=build target/kotlin-api-0.0.1-SNAPSHOT.jar .         
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "kotlin-api-0.0.1-SNAPSHOT.jar"] 

โดยจะเป็นการทำ Multistep build ด้วยคำสั่ง ./mvnw package ซึ่งจะได้ ไฟล์ .Jar มา จากนั้นจึงจะใช้แค่ไฟล์ .Jar ในการรัน application

สำหรับ Github Action

name: Create and publish a Docker image

on:
  push:
    branches: ['release']

env:
  REGISTRY: ghcr.io
  IMAGE_NAME: ${{ github.repository }}

jobs:
  build-and-push-image:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write

    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Log in to the Container registry
        uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
        with:
          registry: ${{ env.REGISTRY }}
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Extract metadata (tags, labels) for Docker
        id: meta
        uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38
        with:
          images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}

      - name: Build and push Docker image
        uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc
        with:
          context: .
          push: true
          tags: ${{ steps.meta.outputs.tags }}
          labels: ${{ steps.meta.outputs.labels }}

หาต้องการ Github Action ที่สามารถ Deploy ได้ด้วยให้เพิ่มเติม Step นี้ใน Github Action Fiel

    - name: executing remote ssh commands using password
      uses: appleboy/ssh-action@master
      with:
        host: ${{ secrets.HOST }}
        username: ${{ secrets.USER }}
        key: ${{ secrets.KEY_SSH }}
        script: |
          cd nginx-config
          docker-compose down
          docker-compose up -d  

โดยที่เราจะต้องเพิ่ม secrets enviroments ให้ 3 อย่างคือ HOST (ip ของเครื่องปลายทาง) , USER (user สำหรับ เข้าใช้เครื่องปลายทาง) และ KEY_SSH คือ public key สำหรับเข้า access ไปใช้ในเครื่องที่ปลายทาง โดยตัวอย่างนั้นจะเป็นการ restart ตัว docker-compose

โดยข้อมูลสำหรับ ไฟล์นี้จะอยู่ที่ https://docs.github.com/en/actions/publishing-packages/publishing-docker-images
ดูตัวอย่างได้ที่ https://github.com/tao-Isaman/kotlin-spring-101

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out /  เปลี่ยนแปลง )

Connecting to %s