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..