カピバラ好きなエンジニアブログ

ITのこととか趣味のカメラのことなどを赴くままに書いていきます。カピバラの可愛さこそ至高。

digdag v0.10.0でPowerShellを使えなかったので調査してみた

以前以下のような記事を書きました。
www.capybara-engineer.com


最近digdagの新しいバージョンv0.10.0でdigdag serverに認証を設定する記事を書いたのですが、その環境でPowershellを実行したところ何故かうまく実行できなかったので、今回はそれを調査してみました。
www.capybara-engineer.com


【実施環境】

Cloud:AWS
OS:Windows Server 2019
IIS:Version 10.0.17763.1
digdag:0.10.0
PSVersion:5.1.17763.1007
※前回同様ある程度は過去使用した設定を流用しています

結論

v0.10.0でpowershellは実行できる
ただし、個別で改修・ビルドすることが必要
digdag serverで実行できるかは未確認

実施作業

workflow実行(1回目)

まずはv0.10.0のdigdagを使って起動されたserverに対して、過去の記事で使用した以下のworkflowファイルをアップロードして、実行できるか試してみます。

timezone: UTC

_export:
    sh:
      shell: ["powershell.exe", "-"]

+date:
  sh>: Get-Date -Format G

+setup:
  echo>: start ${session_time}

+disp_current_date:
  echo>: ${moment(session_time).utc().format('YYYY-MM-DD HH:mm:ss Z')}

+repeat:
  for_each>:
    order: [first, second, third]
    animal: [dog, cat]
  _do:
    echo>: ${order} ${animal}
  _parallel: true

+teardown:
  echo>: finish ${session_time}



アップロードしました。RUNボタンから実行します。
f:id:live-your-life-dd18:20210414211011p:plain


エラーで失敗しました。
f:id:live-your-life-dd18:20210414211201p:plain


ログを見ると以下のように出力されていました。

2021-04-14 12:10:14.630 +0000 [ERROR] (0075@[0:test]+sample+date) io.digdag.core.agent.OperatorManager: Task failed with unexpected error: Command failed with code -196608
java.lang.RuntimeException: Command failed with code -196608
	at io.digdag.standards.operator.ShOperatorFactory$ShOperator.runCode(ShOperatorFactory.java:121)
	at io.digdag.standards.operator.ShOperatorFactory$ShOperator.runTask(ShOperatorFactory.java:88)
	at io.digdag.util.BaseOperator.run(BaseOperator.java:35)
	at io.digdag.core.agent.OperatorManager.callExecutor(OperatorManager.java:365)
	at io.digdag.server.metrics.DigdagTimedMethodInterceptor.invokeMain(DigdagTimedMethodInterceptor.java:58)
	at io.digdag.server.metrics.DigdagTimedMethodInterceptor.invoke(DigdagTimedMethodInterceptor.java:31)
	at io.digdag.core.agent.OperatorManager.runWithWorkspace(OperatorManager.java:298)
	at io.digdag.server.metrics.DigdagTimedMethodInterceptor.invokeMain(DigdagTimedMethodInterceptor.java:58)
	at io.digdag.server.metrics.DigdagTimedMethodInterceptor.invoke(DigdagTimedMethodInterceptor.java:31)
	at io.digdag.core.agent.OperatorManager.lambda$runWithHeartbeat$2(OperatorManager.java:151)
	at io.digdag.core.agent.ExtractArchiveWorkspaceManager.withExtractedArchive(ExtractArchiveWorkspaceManager.java:77)
	at io.digdag.core.agent.OperatorManager.runWithHeartbeat(OperatorManager.java:149)
	at io.digdag.server.metrics.DigdagTimedMethodInterceptor.invokeMain(DigdagTimedMethodInterceptor.java:58)
	at io.digdag.server.metrics.DigdagTimedMethodInterceptor.invoke(DigdagTimedMethodInterceptor.java:31)
	at io.digdag.core.agent.OperatorManager.run(OperatorManager.java:132)
	at io.digdag.server.metrics.DigdagTimedMethodInterceptor.invokeMain(DigdagTimedMethodInterceptor.java:58)
	at io.digdag.server.metrics.DigdagTimedMethodInterceptor.invoke(DigdagTimedMethodInterceptor.java:31)
	at io.digdag.core.agent.MultiThreadAgent.lambda$null$0(MultiThreadAgent.java:132)
	at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
	at java.util.concurrent.FutureTask.run(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)



わかりにくいので他のログを調べてみると以下のような出力がされていました。
文字コードの関係で文字化けしていますが、パッと見る限りpowershellの-Command関係でエラーが出ているようです。

2021-04-14 12:10:12.937 +0000 [INFO] (0075@[0:test]+sample+date) io.digdag.core.agent.OperatorManager: sh>: Get-Date -Format G
-Command  p[^[Š'-' w肳ꂜB-Command ̂̑̈�gpł܂񁂍

PowerShell[.exe] [-PSConsoleFile <t@C> | -Version <o[W>]
    [-NoLogo] [-NoExit] [-Sta] [-Mta] [-NoProfile] [-NonInteractive]
    [-InputFormat {Text | XML}] [-OutputFormat {Text | XML}]
    [-WindowStyle <X^C>] [-EncodedCommand <Base64 GR[h̃R}h>]
    [-ConfigurationName <񾝍
    [-File <t@C pX> <� [-ExecutionPolicy <
s|V[>]
    [-Command { - | <XNvg ubN> [-args <�z񾝍
                  | <񾠛<R}h p[^[>] } ]

PowerShell[.exe] -Help | -? | /?


原因調査1

powershellの-Commandを使用しているようなので、helpコマンドで説明を見てみます。

-Command
    PowerShell のコマンド プロンプトに入力された場合と同様に、指定されたコマ
    ンド (および任意のパラメーター) を実行します。NoExit が指定されていない場
    合は、そのまま終了します。Command の値には、"-"、文字列、またはスクリプト
    ブロックを指定できます。

    Command の値が "-" の場合、コマンド テキストは標準入力から読み込まれます。

    Command の値がスクリプト ブロックの場合は、スクリプト ブロックを中かっこ
    ({}) で囲む必要があります。スクリプト ブロックを指定できるのは、Windows
    PowerShell で PowerShell.exe を実行している場合だけです。スクリプト ブロ
    ックの結果は、ライブ オブジェクトではなく逆シリアル化 XML オブジェクトと
    して親シェルに返されます。

    Command の値が文字列の場合、Command はコマンド内で最後のパラメーターである
    必要があります。コマンドの後に入力された文字は、コマンド引数として解釈さ
    れるためです。

    Windows PowerShell コマンドを実行する文字列を記述するには、次の形式を使用します。
        "& {<コマンド>}"
    引用符によりこれが文字列であることを示し、呼び出し演算子 (&) によりコマ
    ンドが実行されます。

-Help, -?, /?
    このメッセージを表示します。Windows PowerShell で PowerShell.exe のコマン
    ドを入力する場合、コマンド パラメーターの前にスラッシュ (/) ではなくハイ
    フン (-) を入力してください。Cmd.exe では、ハイフンまたはスラッシュのいずれかを使用できます。

例
    PowerShell -PSConsoleFile SqlSnapIn.Psc1
    PowerShell -version 2.0 -NoLogo -InputFormat text -OutputFormat XML
    PowerShell -ConfigurationName AdminRoles
    PowerShell -Command {Get-EventLog -LogName security}
    PowerShell -Command "& {Get-EventLog -LogName security}"

    # -EncodedCommand パラメーターを使用する場合:
    $command = 'dir "c:\program files" '
    $bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
    $encodedCommand = [Convert]::ToBase64String($bytes)
    powershell.exe -encodedCommand $encodedCommand

この中で注目するべきはこの部分

Command の値が "-" の場合、コマンド テキストは標準入力から読み込まれます。



workflowファイルのPowershellの設定を見ると以下のようにハイフンとPowershellのEXEファイルを指定しており、恐らくですが[Powershell.exe -Command - (sh>で指定したコマンド)]という風にコマンドが作成されているのではないでしょうか。

shell: ["powershell.exe", "-"]



試しに上記の構成でコマンドを作成してコマンドプロンプトで実行してみます。

>Powershell.exe -Command - Get-Date -Format G
-Command  パラメーターで '-' が指定されました。-Command のその他の引数は使用できません。

PowerShell[.exe] [-PSConsoleFile <ファイル> | -Version <バージョン>]
    [-NoLogo] [-NoExit] [-Sta] [-Mta] [-NoProfile] [-NonInteractive]
    [-InputFormat {Text | XML}] [-OutputFormat {Text | XML}]
    [-WindowStyle <スタイル>] [-EncodedCommand <Base64 エンコードのコマンド>]
    [-ConfigurationName <文字列>]
    [-File <ファイル パス> <引数>] [-ExecutionPolicy <実行ポリシー>]
    [-Command { - | <スクリプト ブロック> [-args <引数の配列>]
                  | <文字列> [<コマンド パラメーター>] } ]

PowerShell[.exe] -Help | -? | /?



以下のエラーが発生し、見る限り文字化けしていたエラー出力と同じようです。

workflow実行(2回目)

workflowの設定でハイフンをPowershellに設定したことでエラーとなっているようなので、ハイフンを削除して再度実行してみます。


ハイフンを削除したworkflowファイルをアップロードして実行します。
f:id:live-your-life-dd18:20210414212614p:plain

途中コマンドプロンプトが立ち上がりましたが、実行としては正常終了しています。
f:id:live-your-life-dd18:20210414212658p:plain
f:id:live-your-life-dd18:20210414212739p:plain


ログを見てみると、一見うまくいっているように思えますが、echoしている処理は正常に動作してstartから始まるメッセージが表示されていますが、shで実行されたGet-Dataコマンドは実行されていないのか、何も表示されていません。
f:id:live-your-life-dd18:20210414212848p:plain

原因調査2

今度はサーバーのログから追ってみます。
サーバーのログは起動時にpropertiesファイルで以下のように設定されているので、まずはそのログを見てみます。

log-server.type=local
log-server.local.path=C:/opt/digdag/tasklog
log-server.local.split_size=10240



以下がその出力されたタスクログですが、これではほとんど情報がないので、どこまで処理が進んでどこでエラーが発生したのかが追えません。

2021-04-14 13:42:55.615 +0000 [DEBUG] (0075@[0:test]+sample+date) io.digdag.core.agent.OperatorManager: evaluated config: {"project_id":1,"session_id":54,"session_time":"2021-04-14T13:42:54+00:00","attempt_id":54,"task_name":"+sample+date","last_executed_session_time":"","session_uuid":"f98cd477-778b-40af-9f4e-ca0c48772150","timezone":"UTC"}
2021-04-14 13:42:55.624 +0000 [INFO] (0075@[0:test]+sample+date) io.digdag.core.agent.OperatorManager: sh>: Get-Date -Format G
2021-04-14 13:42:55.666 +0000 [DEBUG] (0075@[0:test]+sample+date) io.digdag.standards.command.EcsCommandExecutor: Fall back to DockerCommandExecutor: Parameter 'agent.command_executor.ecs.name' is required but not set 
-Command  パラメーターで '-' が指定されました。-Command のその他の引数は使用できません。

PowerShell[.exe] [-PSConsoleFile <ファイル> | -Version <バージョン>]
    [-NoLogo] [-NoExit] [-Sta] [-Mta] [-NoProfile] [-NonInteractive]
    [-InputFormat {Text | XML}] [-OutputFormat {Text | XML}]
    [-WindowStyle <スタイル>] [-EncodedCommand <Base64 エンコードのコマンド>]
    [-ConfigurationName <文字列>]
    [-File <ファイル パス> <引数>] [-ExecutionPolicy <実行ポリシー>]
    [-Command { - | <スクリプト ブロック> [-args <引数の配列>]
                  | <文字列> [<コマンド パラメーター>] } ]

PowerShell[.exe] -Help | -? | /?



そこで試しにサーバーの起動時に-l debugをつけて実行し、エラー時にコンソールに出力されたログを確認してみます。

> digdag server -c .\server\server.properties -l debug  > .\serverlog\server.log



サーバーログならもう少し詳細なログが見れるかと思いましたが、出力された内容はタスクログを特に変わりませんでした。

2021-04-15 00:22:41 +0000 [DEBUG] (workflow-executor-0) io.digdag.core.workflow.WorkflowExecutor: Queuing task of attempt_id=55: id=233 +sample+date
2021-04-15 00:22:41 +0000 [DEBUG] (0075@[0:test]+sample+date) io.digdag.core.agent.OperatorManager: evaluated config: {"project_id":1,"session_id":55,"session_time":"2021-04-15T00:22:41+00:00","attempt_id":55,"task_name":"+sample+date","last_executed_session_time":"","session_uuid":"2470c9d2-434e-42b1-8495-d41fd7cda733","timezone":"UTC"}
2021-04-15 00:22:41 +0000 [INFO] (0075@[0:test]+sample+date) io.digdag.core.agent.OperatorManager: sh>: Get-Date -Format G
2021-04-15 00:22:41 +0000 [DEBUG] (0075@[0:test]+sample+date) io.digdag.standards.command.EcsCommandExecutor: Fall back to DockerCommandExecutor: Parameter 'agent.command_executor.ecs.name' is required but not set 
-Command  パラメーターで '-' が指定されました。-Command のその他の引数は使用できません。

PowerShell[.exe] [-PSConsoleFile <ファイル> | -Version <バージョン>]
    [-NoLogo] [-NoExit] [-Sta] [-Mta] [-NoProfile] [-NonInteractive]
    [-InputFormat {Text | XML}] [-OutputFormat {Text | XML}]
    [-WindowStyle <スタイル>] [-EncodedCommand <Base64 エンコードのコマンド>]
    [-ConfigurationName <文字列>]
    [-File <ファイル パス> <引数>] [-ExecutionPolicy <実行ポリシー>]
    [-Command { - | <スクリプト ブロック> [-args <引数の配列>]
                  | <文字列> [<コマンド パラメーター>] } ]

PowerShell[.exe] -Help | -? | /?


原因調査3

次は実際のロジックから追ってみます。
エラーログを見る限り、以下の処理でエラーが発生しているようです。
digdag/ShOperatorFactory.java at master · treasure-data/digdag · GitHub


その中で気になるのはここの部分です。
digdag/ShOperatorFactory.java at 42ea7cb71270957ea6424c2df88dd7c65d248789 · treasure-data/digdag · GitHub
f:id:live-your-life-dd18:20210416132430p:plain


ここでは一時ディレクトリ配下にrunner.shを作成し、スクリプトの中身を書き込んでいるようです。

そのrunner.shは以下の処理でパスをコマンドライン変数に設定され、最終的にはProcessBuilderのstart()で実行されているようでした。
digdag/ShOperatorFactory.java at 42ea7cb71270957ea6424c2df88dd7c65d248789 · treasure-data/digdag · GitHub


流石にGitHubから追うのは限界だったため、git cloneして動かしながら設定されるパラメータを確認してみました。
その中で実際に渡されたリクエストパラメータが以下になります。

2021-04-15 14:23:15 +0000 [INFO] (0020@[0:default]+sample+task): commandRequest: CommandRequest{workingDirectory=, environments={task_name=+sample+task, timezone=UTC, session_date=2020-10-28, _type=sh, session_id=1, session_date_compact=20201028, session_time=2020-10-28T00:00:00+00:00, last_executed_session_unixtime=, session_tz_offset=+0000, last_executed_session_date_compact=, last_executed_session_tz_offset=+0000, sh={"shell":["powershell.exe"]}, last_executed_session_time=, project_id=1, shell=["powershell.exe"], attempt_id=1, _command=C:\opt\embulk\test.ps1, session_unixtime=1603843200, last_executed_session_local_time=, session_uuid=3a57b059-22cc-4e1d-885a-21cf1b77ff7b, session_local_time=2020-10-28 00:00:00, last_executed_session_date=}, commandLine=[powershell.exe, .digdag\tmp\digdag-sh-3-9923564380058935100\runner.sh], ioDirectory=.digdag\tmp\digdag-sh-3-9923564380058935100}



ProcessBuilderにはリクエストのcommandLineに設定されている内容がパラメータとして渡されているようなので、実行されているコマンドは以下でした。
※検証の中でハイフンなしPowershellを指定して実行しています

commandLine=[powershell.exe, .digdag\tmp\digdag-sh-3-9923564380058935100\runner.sh]



これを見る限りdigdag workflowで指定した実行したいスクリプトの部分がrunner.shに書き込まれているため、Windowsで動かしたい場合は正常に動かないようになっているようです。


また、workflowでハイフンを設定した場合は以下のようにcommandLineに設定されるため、同じく正常に動きませんでした。

commandLine=[powershell.exe, -, .digdag\tmp\digdag-sh-2-15881680611311792268\runner.sh],


Windowsで実行する方法

じゃあ新しいバージョンのdigdagをWindowsPowershellで動かす方法がないのかといわれると、一応手間はかかりますが、ないことはないです。


というのも、今回Widdowsで動かないのはrunner.shがbash前提で書かれているからなので、powershell.exeが指定された場合はrunner.batという名前になるように処理を修正することで動かすことが可能です。
digdag/ShOperatorFactory.java at 42ea7cb71270957ea6424c2df88dd7c65d248789 · treasure-data/digdag · GitHub


実際に自分のPCで改修・ビルドして実行した結果がこちらです。

> digdag-0.10.0_bat run .\sample.dig -a
Java HotSpot(TM) 64-Bit Server VM warning: Option AggressiveOpts was deprecated in version 11.0 and will likely be removed in a future release.
2021-04-16 04:42:08 +0000: Digdag v0.10.0
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.google.inject.internal.cglib.core.$ReflectUtils$1 (file:/C:/bin/digdag-0.10.0_bat.bat) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain)
WARNING: Please consider reporting this to the maintainers of com.google.inject.internal.cglib.core.$ReflectUtils$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
2021-04-16 04:42:10 +0000 [WARN] (main): Reusing the last session time 2020-10-28T00:00:00+00:00.
2021-04-16 04:42:10 +0000 [INFO] (main): Using session C:\work\digdag\sample\.digdag\status\20201028T000000+0000.
2021-04-16 04:42:10 +0000 [INFO] (main): Starting a new session project id=1 workflow name=sample session_time=2020-10-28T00:00:00+00:00
2021-04-16 04:42:10 +0000 [INFO] (0020@[0:default]+sample+task): sh>: C:\opt\embulk\test.ps1
2021-04-16 04:42:10 +0000 [INFO] (0020@[0:default]+sample+task): shell: [powershell.exe]
2021-04-16 04:42:10 +0000 [INFO] (0020@[0:default]+sample+task): cmdline: com.google.common.collect.ImmutableList$Builder@7ea72d3f
2021-04-16 04:42:10 +0000 [INFO] (0020@[0:default]+sample+task): shScript: C:\opt\embulk\test.ps1
2021-04-16 04:42:10 +0000 [INFO] (0020@[0:default]+sample+task): commandContext: CommandContext{localProjectPath=C:\work\digdag\sample, taskRequest=TaskRequest{siteId=0, projectId=1, projectName=default, workflowName=sample, workflowDefinitionId=4, revision=2021-04-16T04:42:10.423937800Z, taskId=2, attemptId=1, sessionId=1, taskName=+sample+task, lockId=s1, timeZone=UTC, sessionUuid=d300fd2a-0046-4167-b91d-fac24706582d, sessionTime=2020-10-28T00:00:00Z, createdAt=2021-04-16T04:42:10.847966900Z, isCancelRequested=false, localConfig={"sh>":"C:\\opt\\embulk\\test.ps1"}, config={"sh":{"shell":["powershell.exe"]},"timezone":"UTC","session_uuid":"d300fd2a-0046-4167-b91d-fac24706582d","session_time":"2020-10-28T00:00:00+00:00","session_id":1,"session_date":"2020-10-28","session_date_compact":"20201028","session_local_time":"2020-10-28 00:00:00","session_tz_offset":"+0000","session_unixtime":1603843200,"last_executed_session_time":"","last_executed_session_date":"","last_executed_session_date_compact":"","last_executed_session_local_time":"","last_executed_session_tz_offset":"+0000","last_executed_session_unixtime":"","project_id":1,"attempt_id":1,"task_name":"+sample+task","sh>":"C:\\opt\\embulk\\test.ps1","_type":"sh","_command":"C:\\opt\\embulk\\test.ps1","shell":["powershell.exe"]}, lastStateParams={}}}
2021-04-16 04:42:11 +0000 [INFO] (0020@[0:default]+sample+task): commandRequest: CommandRequest{workingDirectory=, environments={task_name=+sample+task, timezone=UTC, session_date=2020-10-28, _type=sh, session_id=1, session_date_compact=20201028, session_time=2020-10-28T00:00:00+00:00, last_executed_session_unixtime=, session_tz_offset=+0000, last_executed_session_date_compact=, last_executed_session_tz_offset=+0000, sh={"shell":["powershell.exe"]}, last_executed_session_time=, project_id=1, shell=["powershell.exe"], attempt_id=1, _command=C:\opt\embulk\test.ps1, session_unixtime=1603843200, last_executed_session_local_time=, session_uuid=d300fd2a-0046-4167-b91d-fac24706582d, session_local_time=2020-10-28 00:00:00, last_executed_session_date=}, commandLine=[powershell.exe, .digdag\tmp\digdag-sh-2-2203504326677734601\runner.bat], ioDirectory=.digdag\tmp\digdag-sh-2-2203504326677734601}

C:\work\digdag\sample>C:\opt\embulk\test.ps1
test
2021-04-16 04:42:13 +0000 [INFO] (0020@[0:default]+sample+setup): echo>: start 2020-10-28T00:00:00+00:00
start 2020-10-28T00:00:00+00:00
2021-04-16 04:42:14 +0000 [INFO] (0020@[0:default]+sample+disp_current_date): echo>: 2020-10-28 00:00:00 +00:00
2020-10-28 00:00:00 +00:00
2021-04-16 04:42:14 +0000 [INFO] (0020@[0:default]+sample+repeat): for_each>: {order=[first, second, third], animal=[dog, cat]}
2021-04-16 04:42:14 +0000 [INFO] (0020@[0:default]+sample+repeat^sub+for-0=order=0=first&1=animal=0=dog): echo>: first dog
first dog
2021-04-16 04:42:14 +0000 [INFO] (0025@[0:default]+sample+repeat^sub+for-0=order=2=third&1=animal=1=cat): echo>: third cat
2021-04-16 04:42:14 +0000 [INFO] (0022@[0:default]+sample+repeat^sub+for-0=order=1=second&1=animal=0=dog): echo>: second dog
third cat
2021-04-16 04:42:14 +0000 [INFO] (0024@[0:default]+sample+repeat^sub+for-0=order=2=third&1=animal=0=dog): echo>: third dog
second dog
third dog
2021-04-16 04:42:14 +0000 [INFO] (0021@[0:default]+sample+repeat^sub+for-0=order=0=first&1=animal=1=cat): echo>: first cat
first cat
2021-04-16 04:42:14 +0000 [INFO] (0023@[0:default]+sample+repeat^sub+for-0=order=1=second&1=animal=1=cat): echo>: second cat
second cat
2021-04-16 04:42:14 +0000 [INFO] (0023@[0:default]+sample+teardown): echo>: finish 2020-10-28T00:00:00+00:00
finish 2020-10-28T00:00:00+00:00
Success. Task state is saved at C:\work\digdag\sample\.digdag\status\20201028T000000+0000 directory.
  * Use --session <daily | hourly | "yyyy-MM-dd[ HH:mm:ss]"> to not reuse the last session time.
  * Use --rerun, --start +NAME, or --goal +NAME argument to rerun skipped tasks.



commandLineパラメータを見るとファイル名がrunner.batになっており、処理がエラーになっていないことが確認できました。

commandLine=[powershell.exe, .digdag\tmp\digdag-sh-2-2203504326677734601\runner.bat]



自分でビルドしたdigdagをサーバーで実行するところまでは確認できていないのですが、コマンドラインから実行するのであればこれで問題ないと思います。

2021/4/16追記

twitterでrunner.shはps1に書き換えても大丈夫かご質問いただいたので試してみました。
結果としてはPowershell使用するのであれば、runner.shはps1に拡張子を変更しても問題ありません。

実際に実行したログを貼っておきます。

> digdag-0.10.0_ps1 run sample.dig -a
Java HotSpot(TM) 64-Bit Server VM warning: Option AggressiveOpts was deprecated in version 11.0 and will likely be removed in a future release.
2021-04-16 07:02:53 +0000: Digdag v0.10.0
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.google.inject.internal.cglib.core.$ReflectUtils$1 (file:/C:/bin/digdag-0.10.0_ps1.bat) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain)
WARNING: Please consider reporting this to the maintainers of com.google.inject.internal.cglib.core.$ReflectUtils$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
2021-04-16 07:03:01 +0000 [WARN] (main): Reusing the last session time 2020-10-28T00:00:00+00:00.
2021-04-16 07:03:01 +0000 [INFO] (main): Using session C:\work\digdag\sample\.digdag\status\20201028T000000+0000.
2021-04-16 07:03:01 +0000 [INFO] (main): Starting a new session project id=1 workflow name=sample session_time=2020-10-28T00:00:00+00:00
2021-04-16 07:03:07 +0000 [INFO] (0020@[0:default]+sample+task): sh>: C:\opt\embulk\test.ps1
2021-04-16 07:03:07 +0000 [INFO] (0020@[0:default]+sample+task): shell: [powershell.exe]
2021-04-16 07:03:07 +0000 [INFO] (0020@[0:default]+sample+task): cmdline: com.google.common.collect.ImmutableList$Builder@44f182a4
2021-04-16 07:03:07 +0000 [INFO] (0020@[0:default]+sample+task): shScript: C:\opt\embulk\test.ps1
2021-04-16 07:03:07 +0000 [INFO] (0020@[0:default]+sample+task): commandContext: CommandContext{localProjectPath=C:\work\digdag\sample, taskRequest=TaskRequest{siteId=0, projectId=1, projectName=default, workflowName=sample, workflowDefinitionId=4, revision=2021-04-16T07:03:01.523818400Z, taskId=2, attemptId=1, sessionId=1, taskName=+sample+task, lockId=s1, timeZone=UTC, sessionUuid=e73879ed-965e-4654-b39b-2dc30cfaa0d1, sessionTime=2020-10-28T00:00:00Z, createdAt=2021-04-16T07:03:07.329184800Z, isCancelRequested=false, localConfig={"sh>":"C:\\opt\\embulk\\test.ps1"}, config={"sh":{"shell":["powershell.exe"]},"timezone":"UTC","session_uuid":"e73879ed-965e-4654-b39b-2dc30cfaa0d1","session_time":"2020-10-28T00:00:00+00:00","session_id":1,"session_date":"2020-10-28","session_date_compact":"20201028","session_local_time":"2020-10-28 00:00:00","session_tz_offset":"+0000","session_unixtime":1603843200,"last_executed_session_time":"","last_executed_session_date":"","last_executed_session_date_compact":"","last_executed_session_local_time":"","last_executed_session_tz_offset":"+0000","last_executed_session_unixtime":"","project_id":1,"attempt_id":1,"task_name":"+sample+task","sh>":"C:\\opt\\embulk\\test.ps1","_type":"sh","_command":"C:\\opt\\embulk\\test.ps1","shell":["powershell.exe"]}, lastStateParams={}}}
2021-04-16 07:03:07 +0000 [INFO] (0020@[0:default]+sample+task): commandRequest: CommandRequest{workingDirectory=, environments={task_name=+sample+task, timezone=UTC, session_date=2020-10-28, _type=sh, session_id=1, session_date_compact=20201028, session_time=2020-10-28T00:00:00+00:00, last_executed_session_unixtime=, session_tz_offset=+0000, last_executed_session_date_compact=, last_executed_session_tz_offset=+0000, sh={"shell":["powershell.exe"]}, last_executed_session_time=, project_id=1, shell=["powershell.exe"], attempt_id=1, _command=C:\opt\embulk\test.ps1, session_unixtime=1603843200, last_executed_session_local_time=, session_uuid=e73879ed-965e-4654-b39b-2dc30cfaa0d1, session_local_time=2020-10-28 00:00:00, last_executed_session_date=}, commandLine=[powershell.exe, .digdag\tmp\digdag-sh-2-5275376036508499872\runner.ps1], ioDirectory=.digdag\tmp\digdag-sh-2-5275376036508499872}
test
2021-04-16 07:03:17 +0000 [INFO] (0020@[0:default]+sample+setup): echo>: start 2020-10-28T00:00:00+00:00
start 2020-10-28T00:00:00+00:00
2021-04-16 07:03:17 +0000 [INFO] (0020@[0:default]+sample+disp_current_date): echo>: 2020-10-28 00:00:00 +00:00
2020-10-28 00:00:00 +00:00
2021-04-16 07:03:18 +0000 [INFO] (0020@[0:default]+sample+repeat): for_each>: {order=[first, second, third], animal=[dog, cat]}
2021-04-16 07:03:18 +0000 [INFO] (0020@[0:default]+sample+repeat^sub+for-0=order=0=first&1=animal=0=dog): echo>: first dog
first dog
2021-04-16 07:03:18 +0000 [INFO] (0025@[0:default]+sample+repeat^sub+for-0=order=2=third&1=animal=1=cat): echo>: third cat
third cat
2021-04-16 07:03:18 +0000 [INFO] (0024@[0:default]+sample+repeat^sub+for-0=order=2=third&1=animal=0=dog): echo>: third dog
third dog
2021-04-16 07:03:18 +0000 [INFO] (0023@[0:default]+sample+repeat^sub+for-0=order=1=second&1=animal=1=cat): echo>: second cat
second cat
2021-04-16 07:03:18 +0000 [INFO] (0022@[0:default]+sample+repeat^sub+for-0=order=1=second&1=animal=0=dog): echo>: second dog
second dog
2021-04-16 07:03:19 +0000 [INFO] (0021@[0:default]+sample+repeat^sub+for-0=order=0=first&1=animal=1=cat): echo>: first cat
first cat
2021-04-16 07:03:19 +0000 [INFO] (0021@[0:default]+sample+teardown): echo>: finish 2020-10-28T00:00:00+00:00
finish 2020-10-28T00:00:00+00:00
Success. Task state is saved at C:\work\digdag\sample\.digdag\status\20201028T000000+0000 directory.
  * Use --session <daily | hourly | "yyyy-MM-dd[ HH:mm:ss]"> to not reuse the last session time.
  * Use --rerun, --start +NAME, or --goal +NAME argument to rerun skipped tasks.



runner.ps1になっていることが確認できます。

commandLine=[powershell.exe, .digdag\tmp\digdag-sh-2-5275376036508499872\runner.ps1]


感想及び所感

動かせる方法までは見つけられたものの、環境のセットアップが悪かったのかdigdag serverでは動確が取れなかったのが、心残りでした。
できればそこまで確認したかったので、そちらにかけられる時間があればまた別のタイミングで調べてみたいと思います。

javaの環境設定したり、javaのソース読み込むのはホント久々だったので、時間がかなりかかりました。。