Github Actions Login to Docker Hub
Syncronize terlebih dahulu vscode kita ke github, nanti ada tambahan file YAML yang terbentuk dari membuat workflow Go di Github Actions.
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 variable username kita belum simpan ke github secret, untuk variable 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.
Pada proses jobs build Login Success Ke Docker Hub
Github Actions Build and Push Docker Image
edit file go.yaml kembali
.....
- 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 kembali
cek docker hub apakah sudah ada docker image.
Terlihat sudah ada image dengan Tag 5 yang berarti hasil dari proses job Build Github Actions.
sampai sini sukses untuk automate build and push docker image ke docker hub.
Provisioning Docker Image to Server Instance AWS EC2
Pada tahap ini kita akan menyiapkan server untuk menjalankan image docker yang sudah kita letakkan di Docker Hub.
edit file go.yaml kembali.
Di sini akan di buatkan jobs baru dengan nama provisioning-server.
......
jobs:
build:
.....
provisioning-server:
untuk dapat terkoneksi antara github actions ke server instance 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 variable script merupakan command docker untuk
mengambil (pull) image dari Docker Hub
menghapus jika ada duplicate container (rm)
dan jalankan (run).
oke lakukan commit and push untuk melihat apakah sukses proses Job Provisioning Server
cek ke server instance AWS EC2 apakah sudah running docker container nya.
cek menggunakan browser
oke sukses
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 langsung 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 terdeteksi ada notification ada branch baru yang di buat.
biasa nya kita review dulu tuh apa yang di push di branch staging baru kita merge ke branch main.
hasil nya yang sudah kita edit.
DONE !!