iT邦幫忙

2024 iThome 鐵人賽

DAY 28
0
Modern Web

我阿嬤都會的 kintone 客製化開發系列 第 28

Day 28 | 定期更新 kintone 之 Github Action Cron

  • 分享至 

  • xImage
  •  

cover

寫排程有很多方式可以達到,我們來玩玩 Github Action 的 Cron job,讓它在每天的固定時間幫我們更新 kintone 上面的紀錄。

關於 Cron job

Github Free Plan 每個月有 2,000 分鐘的免費使用時間,正好適合讓我們玩玩看,不過這個排程並不是那麼準時,都會延遲個 10 分鐘以上才執行,且如果是設定每分鐘執行這種高頻率的話,會被忽略掉。

所以如果你的專案要非常準時執行,且短時間要執行多次,那就要挑選其他工具。

建立 kintone 欄位

先在 kintone 的應用程式中建立一個 日期 欄位,這個日期會顯示年月日,如 2024-10-12,我們的排程每天會將這個欄位更新成今天的日期,更新時間是晚上的 9 點。

開個環境吧

以下用 python 寫個更新紀錄的程式,先在本地建好專案並測試沒問題後,我們再推到 Github 上。先來開個虛擬環境(MAC):

python3 -m venv cron_env

啟動虛擬環境:

source cron_env/bin/activate

接著安裝發送請求的套件

pip3 install requests

再來就可以開始寫 code 了!

更新紀錄內的時間欄位

我們先取得當天的時間,接著把這時間寫進名為 date 的 kintone 欄位,token 跟 url 之類的我就直接寫死了,如果有需要的話可以放在 .env,推到 github 的時候再做設定。

import requests
from datetime import datetime
from typing import Dict, Any

base_url = 'https://xxx.cybozu.com/k/v1/record.json'
headers = {
    'X-Cybozu-API-Token': 'xxxxxx',
    'Content-Type': 'application/json'
}

def create_today_date() -> str:
    return datetime.now().strftime('%Y-%m-%d')

def get_payload(date: str) -> Dict[str, Any]:
    return {
        'app': '175',
        'id': 1,
        'record': {
            'date': {
                'value': date
            }
        }
    }

def update_record():
    today_date = create_today_date()
    payload = get_payload(today_date)
    response = requests.put(base_url, json=payload, headers=headers)
    print(response.json())

順利的話應該會 print 出 {'revision': ''} 的訊息,我就不多做錯誤處理了。

最後我們把需要用的套件輸出到 requirements.txt

pip3 freeze > requirements.txt

建立 yml

專案內建立 .github/workflows/python-script.ym,等等推到 Github 上讓他跑,我們讓這個程式碼在每天的晚上九點執行,實測大概會延遲 10 - 20 分鐘左右。

name: Run Python Script Daily

on:
  schedule:
    - cron: '0 13 * * *'

jobs:
  run-python:
    runs-on: ubuntu-latest

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

    - name: Set up Python
      uses: actions/setup-python@v4
      with:
        python-version: '3.x'

    - name: Cache Python packages
      uses: actions/cache@v3
      with:
        path: ~/.cache/pip
        key: ${{ runner.os }}-pip-${{ hashFiles('requirements.txt') }}
        restore-keys: |
          ${{ runner.os }}-pip-

    - name: Install dependencies
      run: pip install -r requirements.txt

    - name: Run Python script
      run: python app.py

排程的時程,可以用 cron expression 來生成。

最後的最後,只要把專案推到 github 上就可以了,可以在 Action 的地方看看是否有成功。


上一篇
Day 27 | setProxyConfig 隱藏敏感資料
下一篇
Day 29 | 替 kintone 程式碼寫單元測試
系列文
我阿嬤都會的 kintone 客製化開發30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言