Deploy Docker Container with Github Actions - Session 3

Deploy Docker Container with Github Actions - Session 3

Github Actions Login to Docker Hub

Syncron terlebih dahulu vscode kita ke github, nanti ada tambahan file YAML yang terbentuk dari membuat workflow Go. Edit file go.yaml

Dokumentasi nya di ambil dari sini Docker Build Push Action.

......

- name: Test
      run: go test -v ./...

- name: Login ke Docker Hub
  uses: docker/login-action@v2
  with:
    username: ${{ secrets.DOCKER_USERNAME }}
    password: ${{ secrets.DOCKER_HUB }}

pada bagian username kita belum simpan ke github secret, untuk password sudah kita simpan dengan nama DOCKER_HUB cek materi sebelum nya, jadi kita kembali ke github > settings > Secrets and variables > Actions

jika sudah add secret, kembali ke vscode lakukan git commit.

lihat di github ke bagian menu actions ada proses build. cek apakah sukses untuk login ke docker hub.

Login Succeeeded!!

Github Actions Build and Push Docker Image

edit file go.yaml kembali, tambahkan line

.....

- name: Build and push docker image
  uses: docker/build-push-action@v3
  with:
    push: true
    tags: cehamot/golang-apiserver:${{ github.run_number }}

pada bagian tags kita coba ikuti number dari github actions karena jika menggunakan latest nanti akan error. oke lakukan commit and push

cek docker hub apakah sudah ada docker image.

sampai sini sukses untuk automate build and push docker image ke docker hub.

Provisioning Docker Image to Server Instance AWS EC2

edit file go.yaml kembali. Di sini akan di buatkan jobs baru dengan nama provisioning-server.

......

jobs:
  build:
   .....

  provisioning-server:

untuk bisa github actions ke server berarti kita memerlukan SSH server, cara untuk konfigurasinya ada di dokumentasi SSH for GitHub Actions.

.......
provisioning-server:
    runs-on: ubuntu-latest
    needs: build    
    steps:
    - name: Login ke Docker Hub
      uses: docker/login-action@v2
      with:
        username: ${{ secrets.DOCKER_USERNAME }}
        password: ${{ secrets.DOCKER_HUB }}
    - name: executing remote ssh deploy container
      uses: appleboy/ssh-action@v0.1.7
      with:
        host: ${{ secrets.SSH_IP }}
        username: ${{ secrets.SSH_USER }}
        key: ${{ secrets.SSH_KEY }}
        script: |
          docker pull cehamot/golang-apiserver:${{ github.run_number }}
          docker rm -f apiserver
          docker run --name apiserver -d -p 80:8144 cehamot/golang-apiserver:${{ github.run_number }}

pada bagian script merupakan command docker untuk mengambil (pull) menghapus jika ada duplicate (rm) dan jalankan (run), pasti masih ingat dong command dasar docker kalau lupa bisa check ke Docker Series.

oke lakukan commit and push

cek ke server instance AWS EC2 apakah sudah running docker container nya.

cek menggunakan browser

oke sukses broo...

Resize Docker Image

Docker image sekarang yang kita build memiliki size yang cukup besar ya mengakibatkan proses waktu deploy lumayan cukup lama.

Bagaimana kalau kita resize Docker image nya? cara nya kita modify Dockerfile nya.

FROM golang:alpine3.16 AS build
WORKDIR /app
COPY go.mod ./
COPY go.sum ./
RUN go mod download
COPY *.go ./
RUN go build -o /aplikasi

FROM alpine:latest
WORKDIR /
COPY --from=build /aplikasi /aplikasi
EXPOSE 8144
ENTRYPOINT ["/aplikasi"]

check docker hub repository,

berkurang sangat jauh yang tadi nya 100an MB menjadi 8.66 MB

Create Branch Staging Github Actions

Biasa nya kalau di lapangan kan gak mungkin tuh lgsung push ke branch master/main, biasanya ke branch staging atau development dahulu coba kita lakukan seperti itu ya.

edit file main.go terserah yang penting bisa kita commit dan buat branch baru kasih nama staging.

sampai di github pasti ada notification ada branch baru.

biasa nya kita review dlu tuh apa yang di push di branch staging baru kita merge.

hasil nya yang sudah kita edit.

Oke sampai disini semoga dapat dipahami. See Youu..