貧者のための 「cron」
まつばら
注意!
貧者 = どーしても   をかけたくない
 社会人   学生
学生の頃を思い出しながら聞いてください
1. Google Apps Script
2. TravisCI / CircleCI
3. Arukas + Ofelia
Google Apps Script
わりと強力なスケージューリング機能がある
もちろん GAS コードを書かないといけない
例: 催促してくる Slack Bot
アドベントカレンダーを催促してくる Bot
 
Webhook も使えるので Bot 開発に重宝
Travis CI
Montly/Weekly/Dayly を指定できる
ただし、パブッリクリポジトリしか使えない
例: Haskell Antenna
Haskell の日本語記事を集めるサイト
TravisCI の Daily cron で更新
CircleCI
こっちは cron のように指定可
ただし、無料枠にはビルドタイムの上限有
スーパー合わせ技
GAS は Webhook も行える
1. GAS で Webhook
2. GAS から GitHub API を叩いて空コミット
3. コミットフックで CircleCI を回す
CircleCI は Docker が使えるので 
ビルドタイム上限を超えない限りなんでもできる 
(すごいみみっちぃ)
例: アドカレの更新通知
Selenium 使ってスクレイピングまでしてる
Slack => GAS => GitHub => CircleCI => Slack 
という経路をわざわざ踏んでいる
(ほんとはこんなことする必要はなかったけど)
Arukas + Ofelia
Arukas
Docker コンテナのホスティングサービス
Free プランで 1App は利用可能
Ofelia
Alt. cron が目標の Docker ベースのスケジューラー
Ofelia
例えば:
[job-local "test"]
schedule = */30 * * * *
command = echo hi
[global]
slack-only-on-error = false
slack-webhook = ...
という config.ini ファイルを書いて 
ofelia daemon --config /path/to/config.ini  とするだけ
Ofelia on Arukas
やってみた matsubara0507/ofelia­example
1. webhook の URL をスクリプトで埋め込む
直接書きたくなかったので
#!/bin/bash
echo "slack-webhook = $SLACK_WEBHOOK" 
>> /etc/ofelia/config.ini
exec "$@"
Ofelia on Arukas
2. Dockerfile を適当に書く
FROM mcuadros/ofelia AS ofelia
FROM ubuntu
RUN apt-get update && apt-get install -y ca-certificates
COPY --from=ofelia /usr/bin/ofelia /usr/bin/ofelia
COPY ofelia/config.ini /etc/ofelia/
COPY bin/append-slack-webhook.sh /usr/bin/
ENTRYPOINT ["/usr/bin/append-slack-webhook.sh"]
CMD ["/usr/bin/ofelia", "daemon",
"--config", "/etc/ofelia/config.ini"]
Docker Hub で自動ビルドを設定しとく
Ofelia on Arukas
3. Arukas の設定をする
Ofelia on Arukas
届いた
Haskell Antenna の載せ替え
Build Docker Image with Stack
stack docker integration :
Docker コンテナ内でビルド
バイナリをコピペした Docker イメージを作成
docker:
repo: fpco/stack-build
enable: true
image:
container:
name: antenna-bin
base: fpco/ubuntu-with-libgmp
stack build  して  stack image container  するだけ
Ofelia の設定
[job-local "test"]
schedule = @hourly
command = /usr/bin/run.sh
#!/bin/bash
cd /work
git clone -b gh-pages 
"https://${GH_TOKEN}@github.com/haskell-jp/antenna.git"
cp sites.yaml antenna/sites.yaml
cd antenna
antenna sites.yaml
git config user.name "${GIT_NAME}"
git add -A
git diff --quiet && git diff --staged --quiet
|| git commit -am "[skip ci] Update Haskell antenna!"
git push origin gh-pages
Ofelia を持ってくる
FROM mcuadros/ofelia AS ofelia
FROM antenna-bin
RUN apt-get update && apt-get install -y ca-certificates
COPY --from=ofelia /usr/bin/ofelia /usr/bin/ofelia
COPY ofelia/config.ini /etc/ofelia/
COPY bin/append-slack-webhook.sh /usr/bin/
COPY bin/run.sh /usr/bin/
WORKDIR /work
COPY sites.yaml /work/
ENTRYPOINT ["/usr/bin/append-slack-webhook.sh"]
CMD ["/usr/bin/ofelia", "daemon",
"--config", "/etc/ofelia/config.ini"]
果たしてできているのか
(; ・`д・´)…ゴクリ
(まだ載せ替えてない)
まとめ
みみっちぃコトしてないで   をかけろ
おしまい

貧者のための「cron」