Yunindyo Prabowo

Wanna Be a Pythonist

Github Action : Solusi cerdas untuk automation deploying static site generator

2020-12-14 Yunindyo Prabowogithubcicdgithub action

Halo para pembaca, lama tak membuat tulisan yang bisa membuat komputer/pc anda njebluk, eh wkwkwkkw.

Pada tulisan kali ini, saya ingin menceritakan pengalaman saya pindah perkakas continous integration and Continous Delivery dari yang sebelumnya menggunakan Travis-CI dan sekarang saya menggunakan github action sebagai perkakas CI/CD yang baru untuk mendeploy blog saya yang saya buat menggunakan Gatsby JS.

Github Action

Github Action Is Your Workflow: built by you, run by us The Github Blog

Sesuai dengan motto mereka, artinya saat ini, github menyediakan layanan CI/CD layaknya gitlab ci, ataupun travis ci dan lain sebagainya.

Mengapa Harus Github Action ?

Sebelumnya, saya menggunakan TRAVIS-CI sebagai layanan untuk mendeploy static web saya namun terkadang, saya mengalami kendala saat proses mendeploy, seperti proses yang gagal akibat masalah koneksi antar github pages dan travis ataupun masalah lain seperti cache folder yang sering tidak terupdate sehingga membuat blog saya tidak dapat diakses. Namun pada intinya, mengapa saya pindah, karena saya ingin memudahkan proses build dan deploy menjadi satu platform, yaitu Github.

Menggunakan Github Action pada Static Website generator

Seperti pada banyak perangkat CI/CD lainnya, github action juga memiliki kapabilitas untuk membuild dan mendeploy static site generator. Dalam hal ini saya menggunakan Gatsby sebagai media static website saya.

Langkahnya pun terbilang mudah dan hampir sama dengan kebanyakan perangkat ci/cd lainnya, yaitu dengan menggunakan file .yml.

Langkah-langkah menggunakan Github Action Pada Static Website Gatsby

Membuat folder konfigurasi {.github/workflows}

Untuk memulai, kita buat dulu beberapa konfigurasi file, tepat nya pada root project static website kita, kita buat folder .github/workflows atau dalam kasus saya, seperti di gambar berikut,

dilanjutkan dengan membuat file konfigurasi .yml atau saya menggunakan file main.yml.

Membuat file konfigurasi {main.yml}

kemudian isikan file dengan perintah berikut

name: github pages

on:
  push:
    branches:
      - develop

jobs:
  deploy:
    runs-on: ubuntu-18.04
    steps:
      - uses: actions/checkout@v2

      - name: Setup Node
        uses: actions/setup-node@v2.1.2
        with:
          node-version: '10.x'

      - name: Cache dependencies
        uses: actions/cache@v2
        with:
          path: ~/.npm
          key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
          restore-keys: |
            ${{ runner.os }}-node-

      - name: INSTALL DEPENDENCIES
        run: npm ci

      - name: BUILING SITE
        run: npm run build
        env:
          ALGOLIA_APP_ID: ${{secrets.ALGOLIA_APP_ID}}
          ALGOLIA_SEARCH_ONLY_API_KEY: ${{secrets.ALGOLIA_SEARCH_ONLY_API_KEY}}
          ALGOLIA_ADMIN_API_KEY: ${{secrets.ALGOLIA_ADMIN_API_KEY}}
          ALGOLIA_INDEX_NAME: ${{secrets.ALGOLIA_INDEX_NAME}}
          FB_APP_ID: ${{secrets.FB_APP_ID}}

      - name: Deploy
        uses: peaceiris/actions-gh-pages@v3
        with:
          github_token: ${{ secrets.ACCESS_TOKEN }}
          deploy_key: ${{ secrets.SECRET_KEY_DEPLOY_SITE }}
          publish_dir: ./public
          publish_branch: master
          enable_jekyll: true
          force_orphan: true
          full_commit_message: ${{ github.event.head_commit.message }}
          user_name: 'github-actions[bot]'
          user_email: 'github-actions[bot]@users.noreply.github.com'

secara sederhana, langkah diatas dapat dijabarkan sebagai berikut:

  • Checkout repository
  • setup node versi 10
  • install dependency via npm
  • build the sites
  • deploy the result

untuk penjelasan lebih lanjut mengenai github action dan cara mendeploynya, tunggu artikel selanjutnya yaaaa XD.