【新機能】Digdag v0.9.42でシンボリックリンクを含むプロジェクトでpush時に再帰的なコピーをするようになりました!
こんにちは。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
お手製のデプロイスクリプトを使用していた方、ぜひ試してみてください!