この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは。DA事業本部の春田です。
先週Digdagのバージョン0.9.42がリリースされ、シンボリックリンクの再帰的コピーの機能が追加されました!個人的にかなり待望していた機能です。
CLI: push command supports symbolic links outside of project. [#1199]
この記事では、本機能の解説と検証をしていきます。
従来までの課題
例えば、以下のような階層構造のDigdagプロジェクトがあるとします。projectA/A.dig
とprojectB/B.dig
で、共通のpython/print.py
を使用している場合、従来ではA.dig
あるいはB.dig
は、同じディレクトリ階層かそれ以下のスクリプトまでしか読み込めなかったため、digdag push
をする時にpython/print.py
をprojectA/
とprojectB/
配下へいちいちコピーする必要がありました。
gitrepo/
├ projects/
│ ├ projectA/
│ │ └ A.dig
│ └ projectB/
│ └ B.dig
└ python/
└ print.py
それが今回のアップデートによって、projectA
とprojectB
にpython
ディレクトリへのシンボリックリンクを貼ることによって、push時に内部で自動的にコピーしてくれるようになったのです。シンボリックリンクを再帰的にコピーするには、以下のように--copy-outgoing-symlinks
オプションを付与します。
$ cd gitrepo
$ digdag push projectA --project projects/projectA --copy-outgoing-symlinks
検証
環境はDockerで整えているので、詳細に知りたい方は以下のリポジトリを落としてみてください。
ディレクトリ構造は、以下のようになっています。project
配下には、python/print_var.py
を使用するparam_server.dig
やparams_file.dig
があり、相対パスでproject
外のpythonディレクトリを指したシンボリックリンクも合わせて配置しています。ちなみに相対パスで指定する時は、以下のようにリンクを貼るディレクトリに入ってから作成する必要があります。
$ cd digdag_params/digdag/project
$ ln -s ../python python
digdag_params/
├ digdag/
| ├ project/
│ │ ├ export_local_store.dig
│ │ ├ param_server.dig
│ │ ├ params_file.dig
│ │ └ python@ -> ../python
│ └ python/
│ └ print_var.py
└ postgres/
コンテナを立ち上げてdigdag push --copy-outgoing-symlinks
を実行すると、実行ログ上にもコピーされていることが確認できます。
$ docker-compose up -d
Creating network "digdag_params_default" with the default driver
Creating digdag_params_postgresql_1 ... done
Creating digdag_params_digdag_1 ... done
$ docker exec -it $(docker-compose ps -q digdag) bash
root@e3e5787473b3:/# digdag push test --project /opt/etc/digdag/project/ --copy-outgoing-symlinks
2020-07-07 09:15:13 +0000: Digdag v0.9.42
Creating .digdag/tmp/archive-7459060208874350976.tar.gz...
Archiving export_local_store.dig
Archiving params_file.dig
Archiving python/print_var.py
Archiving param_server.dig
Workflows:
export_local_store.dig
params_file.dig
param_server.dig
Uploaded:
id: 1
name: test
revision: 39a88e6d-51c5-48c0-a70b-51f90b1ac7d0
archive type: db
project created at: 2020-07-07T08:31:09Z
revision updated at: 2020-07-07T09:15:14Z
Use `digdag workflows` to show all workflows.
WebUI上からもスクリプトの存在が確認できました。
まとめ
Digdag v0.9.42以降では、シンボリックリンクをあるプロジェクト配下に貼れば、以下のコマンドで再帰的なコピーが可能です。
digdag push hoge --copy-outgoing-symlinks
お手製のデプロイスクリプトを使用していた方、ぜひ試してみてください!