Secret Ninja Blog

Support Engineering Director してます

Github Actionsを使ってDigdagのDockerとシェルスクリプトを動かす

Github Actionsで、DigdagのワークフローをTreasure WorkflowにPushするテンプレートを以前サンプルで作ってみた。

blog.torut.tokyo

Github Actionsのテンプレートを使わずに、ワークフローを管理するリポジトリの中で完結させ、DigdagのDockerをPullして、シェルスクリプトを動かすにはどうしたらいいかなと思い、試してみた。

フォルダ構成をこんな感じにしておく。一つのリポジトリに複数のプロジェクトがある。

  • .github/workflows/Dockerfile
  • .github/workflows/entrypoint.sh
  • .github/workflows/deploy.yml
  • project1/xxx.dig
  • project2/xxx.dig

Dockerfileを下記のように作る。

FROM szyn/docker-digdag:latest
ADD entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

entrypoint.shではTreasure WorkflowにPushする。--projectのオプションでプロジェクトを別々にプッシュすることを忘れずに。

#!/bin/bash
digdag push project1 --project project1/ --endpoint $td_wf_endpoint -X client.http.headers.authorization="TD1 $td_master_apikey"
digdag push project2 --project project2/ --endpoint $td_wf_endpoint -X client.http.headers.authorization="TD1 $td_master_apikey"

uses: actions/checkout@v2でリポジトリがCloneできる。

uses: ./.github/workflows/でDockerfileがあるディレクトリを指定するとDockerで色々できる。

name: Treasure Workflow Deploy

on: push

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - uses: ./.github/workflows/
      env:
        # Treasure Workflow API Endpoint
        td_wf_endpoint: api-workflow.treasuredata.com
        # Treasure Data Master API
        td_master_apikey: ${{ secrets.td_master_apikey }}

サンプルのリポジトリはこちら。

github.com

はまったところ

uses: docker://~というフォーマットでDockerのimageを指定できるので、これとscriptとかrunのアクションを組み合わせて実現するのかと思っていたら、全然違っていたのでここに供養する。(あれ、scriptを組み合わせてできるのかな?)