無料でビルドを開始
CircleCI.comアカデミーブログコミュニティサポート

deploy から run への移行

10 months ago1 min read
クラウド
Server v4.x
Server v3.x
このページの内容
  • はじめに
  • Parallelism > 1 の場合
  • ワークスペースの使用

はじめに

廃止予定の deploy ステップが使用されている設定ファイルは、 変更する必要 があります。ジョブで parallelism (並列実行) が含まれているかどうかに関わらず、deploy ステップの すべての インスタンスを削除する必要があります。

  • parallelism: 1 のジョブの場合: deploy キーを run キーに変更します。 移行に必要な処理はこれだけです。

  • parallelism > 1 のジョブの場合: parallelism > 1 のジョブの場合、deploy ステップは直接置き換えられません。 1 つのワークフローで、test ジョブと deploy ジョブの 2 つのジョブを別々に作成することを推奨します。 test ジョブでは複数のテストが並列で実行され、deploy ジョブは test ジョブに依存します。 test ジョブは parallelism > 1 となり、deploy ジョブでは以前の deploy ステップのコマンドが run に置き換えられ、並列実行は行われません。 下記のコード例をご覧ください。

Parallelism > 1 の場合

以下は、parallelism > 1 の設定ファイルで、廃止予定の deploy ステップを置き換える場合のコード例です。

# Example of deprecated syntax, do not copy
version: 2.1
jobs:
  deploy-step-job:
    docker:
      - image: cimg/base:stable
    parallelism: 3
    steps:
      - checkout
      - run:
          name: "Say hello"
          command: "echo Hello, World!"
      - run:
          name: "Write random data"
          command: openssl rand -hex 4 > rand_${CIRCLE_NODE_INDEX}.txt
      - run:
          name: "Emulate doing things"
          command: |
            if [[ "$CIRCLE_NODE_INDEX" != "0" ]]; then
              sleep 30
            fi
      - deploy: #deprecated deploy step, do not copy
          command: |
            echo "this is a deploy step which needs data from the rand"
            cat rand_*.txt

workflows:
  deploy-step-workflow:
    jobs:
      - deploy-step-job

完全に外部リソースに依存している場合 (たとえば、Docker コンテナがレジストリにプッシュされるなど)、上記の deploy ステップをジョブとして抽出できます。これを実行するには doing-things-job を完了させる必要があります。 doing-things-job が 並列実行を 3 つ、deploy-step-job が実際のデプロイを行います。 以下のコード例を参照してください。

version: 2.1
jobs:
  doing-things-job:
    docker:
      - image: cimg/base:stable
    parallelism: 3
    steps:
      - checkout
      - run:
          name: "Say hello"
          command: "echo Hello, World!"
      - run:
          name: "Write random data"
          command: openssl rand -hex 4 > rand_${CIRCLE_NODE_INDEX}.txt
      - run:
          name: "Emulate doing things"
          command: |
            if [[ "$CIRCLE_NODE_INDEX" != "0" ]]; then
              sleep 30
            fi
  # create a new job with the deploy step in it
  deploy-job:
    docker:
      - image: cimg/base:stable
    steps:
      - run: # change "deploy" to "run"
          command: |
            echo "this is a deploy step"

workflows:
  deploy-step-workflow:
    jobs:
      - doing-things-job
      # add your new job and make it depend on the
      # "doing-things-job"
      - deploy-job:
          requires:
            - doing-things-job

ワークスペースの使用

deploy-jobdoing-things-job からのファイルが必要な場合は、 ワークスペース を使用します。 ワークスペースを使用すると、2 つのジョブでファイルを共用でき、deploy-job のファイルへのアクセスが可能になります。 以下の例を参照してください。

version: 2.1
jobs:
  doing-things-job:
    docker:
      - image: cimg/base:stable
    parallelism: 3
    steps:
      - checkout
      - run:
          name: "Say hello"
          command: "echo Hello, World!"
      - run:
          name: "Write random data"
          command: openssl rand -hex 4 > rand_${CIRCLE_NODE_INDEX}.txt
      - run:
          name: "Emulate doing things"
          command: |
            if [[ "$CIRCLE_NODE_INDEX" != "0" ]]; then
              sleep 30
            fi
      # save the files your deploy step needs
      - persist_to_workspace:
          root: .     # relative path to our working directory
          paths:      # file globs which will be persisted to the workspace
           - rand_*

  deploy-job:
    docker:
      - image: cimg/base:stable
    steps:
      # attach the files you persisted in the doing-things-job
      - attach_workspace:
          at: . # relative path to our working directory
      - run:
          command: |
            echo "this is a deploy step"

workflows:
  deploy-step-workflow:
    jobs:
      - doing-things-job
      - deploy-job:
          requires:
            - doing-things-job

このコード例では "fan-in" ワークフロー (詳細は ワークフロー を参照) を効果的に使用しています。


Suggest an edit to this page

Make a contribution
Learn how to contribute