あるワークフローステップが、次のステップで処理する必要があるファイルを生成する場合、アーティファクトを使用して、あるステップの出力を別のステップの入力として直接渡すことができます。このトピックでは、Object Storage Service (OSS) をアーティファクトリポジトリとして設定し、ワークフロー内の2つのステップ間でアーティファクトを渡す方法について説明します。
前提条件
開始する前に、以下を確認してください。
OSS がアクティブ化されていること。詳細については、「OSS をアクティブ化する」をご参照ください。
ご利用のワークフロークラスターのアーティファクトリポジトリとして OSS が設定されていること。詳細については、「Alibaba Cloud OSS の設定」をご参照ください。
ステップ間でアーティファクトを渡す
次の例では、2つのステップからなるワークフローを定義します。最初のステップはテキストファイルを生成し、それをアーティファクトとして保存し、2番目のステップはそのアーティファクトを取得して内容を出力します。
artifact-passing.yamlという名前のファイルを以下の内容で作成します。apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: artifact-passing- spec: entrypoint: artifact-example templates: - name: artifact-example steps: - - name: generate-artifact template: whalesay - - name: consume-artifact template: print-message arguments: artifacts: # メッセージアーティファクトを hello-art 出力にバインドします # generate-artifact ステップから。 - name: message from: "{{steps.generate-artifact.outputs.artifacts.hello-art}}" - name: whalesay container: image: docker/whalesay:latest command: [sh, -c] args: ["cowsay hello world | tee /tmp/hello_world.txt"] outputs: artifacts: # /tmp/hello_world.txt を hello-art アーティファクトとして保存します。 # パスはファイルだけでなくディレクトリも指定できます。 - name: hello-art path: /tmp/hello_world.txt - name: print-message inputs: artifacts: # メッセージアーティファクトを /tmp/message にアンパックします。 - name: message path: /tmp/message container: image: alpine:latest command: [sh, -c] args: ["cat /tmp/message"]このワークフローは3つのテンプレートを使用します。
テンプレート 役割 artifact-exampleエントリポイントテンプレートです。 generate-artifactを最初に実行し、そのhello-art出力アーティファクトをconsume-artifactへのmessage入力として渡します。whalesay/tmp/hello_world.txtにテキストを書き込み、そのファイルをhello-artという名前の出力アーティファクトとして宣言します。pathフィールドは、単一のファイルだけでなくディレクトリも指定できます。print-messagemessage入力アーティファクトを宣言し、それを/tmp/messageにアンパックし、catで内容を出力します。ステップテンプレートの
fromフィールドは、{{steps.<step-name>.outputs.artifacts.<artifact-name>}}構文を使用します。DAG テンプレートを使用する場合は、stepsをtasksに置き換えます。ワークフローを送信します。
argo submit artifact-passing.yamlワークフローのステータスを確認します。
argo listSucceededのステータスは、ワークフローが完了し、アーティファクトが正常に渡されたことを確認できます。