アーティファクト: アーティファクトとは、パイプラインの実行中に生成されるファイルの集合であり、後続のジョブ、ステージ、またはパイプラインによって参照できます。
アーティファクトの生成
イメージのビルドやアーティファクトのアップロードなどの Flow パイプラインステップは、現在、以下の出力を生成します。
Docker イメージ:イメージビルドジョブが完了すると、Docker イメージは ACR またはプライベートイメージリポジトリにアップロードされます。アーティファクト情報構造は次のとおりです。
{
"artifact": "yunxiao-demo", // イメージ名
"type": "dockerImage", // アーティファクトタイプ
"dockerUrl": "registry.cn-beijing.aliyuncs.com/yunxiao/yunxiao-demo:1.0", // イメージアドレス
"dockerTag": "1.0" // イメージタグ
}Flow パブリックストレージアーティファクト:ビルドジョブが完了すると、ビルドアーティファクトは Flow パブリックストレージにアップロードされます。アーティファクト情報構造は次のとおりです。
{
"artifact": "yunxiao-demo", // アーティファクト名
"type": "flowPublic", // アーティファクトタイプ
"downloadUrl": "https://sdfdff", // アーティファクトダウンロードアドレス
"md5": "dffff" // アーティファクト MD5
}アーティファクトの参照
Flow パイプラインは、アーティファクトを参照するためのいくつかの方法を提供しています。
同じパイプライン内でのジョブ間またはステージ間のアーティファクト参照: 通常、前のタスクがビルドし、後続のタスクがデプロイする同じパイプライン内のシナリオ、または統合 CI/CD パイプラインシナリオに適しています。
パイプライン間のアーティファクト参照: ソースパイプラインが、ターゲットパイプラインがデプロイするアーティファクトを生成する場合によく適用されます (例: 本番パイプラインがプレリリースで検証されたイメージを直接参照する)、特に CI と CD が分離されているシナリオで。
パイプラインアーティファクトソースからのアーティファクト参照: アーティファクトのプロモーションシナリオでよく使用されます (例: プレリリース検証後、アーティファクトはアーティファクトリポジトリにアップロードされ、本番環境はバージョン番号に基づいてリポジトリからアーティファクトを直接選択します)。
例 1: 同じパイプライン内でのジョブ間またはステージ間のアーティファクト参照
以下は、同じパイプライン内のジョブ間でのアーティファクトの生成と使用の例です。アーティファクトタイプは Docker イメージです。
sources:
my_repo:
……
stages:
my_stage:
name: ビルドとデプロイ
jobs:
build_job:
name: イメージビルドジョブ
runsOn:
group: public/ap-southeast-1
container: build-steps-public-registry.ap-southeast-1.cr.aliyuncs.com/build-steps/alinux3:latest
steps:
private_registry_docker_setup:
name: Docker レジストリにログイン
step: DockerLogin
with:
dockerRepository: registry.cn-hangzhou.aliyuncs.com
serviceConnection: <your-service-connection-id>
docker_build_push_step:
name: イメージのビルドとプッシュ
step: DockerBuildPush // DockerBuildPush ステップは Docker イメージアーティファクトを生成します。
with:
artifact: my_image
image: registry.cn-hangzhou.aliyuncs.com/ns/demo:1.0
dockerfilePath: Dockerfile
cacheType: remote
deploy_job:
name: Kubernetes デプロイジョブ
steps:
kubectl_apply:
step: KubectlApply
name: Kubectl デプロイ
with:
kubernetesCluster: <your-kubernetes-id>
kubectlVersion: "1.16.4"
namespace: default
yamlPath: app-configs/manifest-app
variables:
- key: image
value: $[jobs.build_job.docker_build_push_step.artifacts.my_image] // docker_build_step ステップによって生成されたアーティファクト (my-image) を参照します。以下は、同じパイプライン内のステージ間でのアーティファクトの生成と使用の例です。アーティファクトタイプは Flow パブリックストレージアーティファクトです。
sources:
my_repo:
……
stages:
build_stage:
name: ビルドステージ
jobs:
build_job:
name: ビルドジョブ
runsOn:
group: public/ap-southeast-1
container: build-steps-public-registry.ap-southeast-1.cr.aliyuncs.com/build-steps/alinux3:latest
steps:
setup_java_step:
name: Java SDK のセットアップ
step: SetupJava
with:
jdkVersion: "1.8"
mavenVersion: "3.5.2"
command_step:
name: コマンドの実行
step: Command
with:
run: |
mvn -B clean package -Dmaven.test.skip=true -Dautoconfig.skip
upload_artifact_step:
name: アーティファクトのアップロード
step: ArtifactUpload // ArtifactUpload ステップはアーティファクトを生成します。
with:
uploadType: flowPublic
artifact: "Artifacts_${PIPELINE_ID}"
filePath:
- target/
deploy_stage:
name: デプロイステージ
jobs:
deploy_job:
name: VM デプロイジョブ
component: VMDeploy
with:
artifact: $[stages.build_stage.build_job.upload_artifact_step.artifacts.default] // upload_step ステップによって生成されたアーティファクト (default) を参照します。
machineGroup: <your-machine-group-id>
artifactDownloadPath: /home/admin/app/package.tgz
executeUser: root
run: |
mkdir -p /home/admin/application/
tar zxvf /home/admin/app/package.tgz -C /home/admin/application/
sh /home/admin/application/deploy.sh restart例 2: パイプライン間のアーティファクト参照
以下は、パイプライン A がアーティファクトを生成し、パイプライン B でアーティファクトを参照する例です。パイプライン間のアーティファクト参照は、プレリリースステージイメージが検証された後、本番パイプラインがプレリリースイメージを使用して直接デプロイするシナリオでよく使用されます。
ソースパイプライン A
sources:
my_repo:
type: gitSample
name: Java サンプルコードソース
endpoint: https://atomgit.com/flow-example/spring-boot.git
branch: master
stages:
build_stage:
name: ビルドステージ
jobs:
build_job:
name: Java イメージビルドジョブ
steps:
private_registry_docker_setup:
name: Docker レジストリにログイン
step: DockerLogin
with:
dockerRepository: registry.cn-hangzhou.aliyuncs.com
serviceConnection: <your-service-connection-id>
docker_build_push_step:
name: イメージのビルドとプッシュ
step: DockerBuildPush
with:
artifact: my_image // ソースパイプライン A ビルドジョブは Docker イメージを生成します。
image: registry.cn-hangzhou.aliyuncs.com/ns/demo:1.0
dockerfilePath: Dockerfile
cacheType: remoteターゲットパイプライン B
sources:
pipeline_a:
type: flowPipeline
name: ソースパイプライン A
flowPipeline: n86bmctmphs84icj // ソースパイプライン A ID
build: lastSuccessfulBuild
triggerEvents: buildSuccess
stages:
kubectl_apply_stage:
name: デプロイステージ
jobs:
deploy_job:
name: "Kubectl Apply"
runsOn:
group: public/ap-southeast-1
container: build-steps-public-registry.ap-southeast-1.cr.aliyuncs.com/build-steps/alinux3:latest
steps:
kubectl_apply_step:
name: "Kubectl Apply"
step: "KubectlApply"
with:
kubernetesCluster: <your-kubernetes-id>
kubectlVersion: "1.27.9"
namespace: default
yamlPath: app-configs/manifest-app
variables:
- key: image
value: $[sources.pipeline_a.stages.build_stage.build_job.docker_build_push_step.artifacts.my_image] // ソースパイプライン A によって生成されたイメージ (my_image) を参照します。詳細説明
アーティファクトの生成
Flow が提供するビルドアーティファクトのアップロード、イメージのビルドなどのステップを通じて、イメージアーティファクトをパッケージ化およびアップロードします。「ステップ」セクションの詳細な説明をご参照ください。
アーティファクトの参照
同じパイプラインの同じステージ内でのジョブ間のアーティファクトの参照: $[jobs.<job_id>.<step_id>.artifacts.<artifact>]
同じパイプライン内でのステージ間のアーティファクトの参照: $[stages.<stage_id>.<job_id>.<step_id>.artifacts.<artifact>]
パイプライン間のアーティファクトの参照(ソースのタイプは flowPipeline です。):$[sources.<source_id>.stages.<stage_id>.<job_id>.<step_id>.artifacts.<artifact>]