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

TeamCity からの移行

1+ year ago2 min read
クラウド
Server 3.x
このページの内容

このドキュメントでは、TeamCity から CircleCI に移行する方法を概説します。

クイックスタート

CircleCI と TeamCity ではセットアップや設定が様々な点で異なります。 CircleCI をより快適にお試しいただくために、まず以下の内容を行うことをお勧めします。

  1. このドキュメントを読んで (少なくとも閲覧して)、コンセプトの違いを明確にしてください。

  2. 簡単な Hello World ジョブ を任意のリポジトリにビルドして実行します。 この設定により、YAML セットアップのシンプルさと、実行環境とその中で実行するステップの両方を定義する方法が分かります。 CircleCI のすべてのジョブは、このフォーマットを共有しています。

  3. 設定が理解できたら、ニーズに合わせて Executor と各ステップを変更します。たとえば、 Rails プロジェクト では Ruby コンテナイメージを使用し、bundler コマンドを実行します。 他の言語や他のフレームワークの例は、 サンプルとガイドの概要 を参照してください。

  4. 1 つのジョブが終了したら、CircleCI で他のジョブをセットアップして ワークフローを設定します。 これにより、ビルドチェーンを実質的に移行します。

  5. 次に、高度な機能を使って ジョブを最適化、CircleCI プラットフォーム上でビルドがどれだけ高速で実行できるかを確認します。

  6. このプロセス全体を通じて、 設定のリファレンス を参照して、CircleCI のプラットフォームで利用可能なすべての設定のリストを確認します。

CircleCI に移行する理由

CircleCI は、パフォーマンスと開発者の生産性の向上のために開発された最新の CI/CD ツールです。 柔軟な設定が可能なため、お客様のアプリケーション固有のニーズに応じた複雑なワークフローやジョブを定義することができます。

コードとしての設定

CircleCI の設定の大部分は YAML で行われます。 メンテナンスが容易で、習得も簡単ですし、CI/CD パイプラインを他のソースコードと同様に追跡することが可能です。

自動スケーリングアーキテクチャ

すべての実行環境は、設定に応じて動的に作成され、タスクの完了時に終了します。 1 つのジョブから数百のジョブまで、手間や追加費用をかけずに同時に実行することができます。

柔軟性

CircleCI はベンダーやツールを選びません。 CircleCI の設定では、API を持つあらゆるプラットフォームやクラウドプロバイダとの統合が可能です。 既存のパートナーシップについては、 インテグレーションのページ をご覧ください。 依存関係やライブラリは、ジョブの中でアドホックにインストールすることができ、その後のビルドを高速化するために 依存関係のキャッシュ を提供しています。

共有、再利用可能な設定

ステップ、実行環境、ジョブは、 CircleCI Orb を使って、異なるプロジェクトやチーム間でテンプレート化、パラメーター化、共有、再利用することができます。 すでに作成されている 数々のインテグレーションや Orb をぜひ活用してください。

その他にも、CircleCI ソリューションを特徴づける様々な機能があります。 今すぐ無料アカウントを作成し 、CircleCI をお試しください。チームでのご利用をお考えでしたら、 セールスチームにご連絡をいただければ 、トライアルを設定させていただきます。

コンセプト

ハイレベルな相違点

  • CircleCI と TeamCity は、プロジェクトのコンセプトを共有しています。

  • TeamCity のビルド設定は、 CircleCI のジョブ と同等です。ジョブとは、目的を達成するための多くのステップやコマンドからなる作業の原子的な要素のことです (例: ユニットテストの実行)。

  • TeamCity は伝統的にほとんどのビルドの設定に UI を使用してきました。Kotlin Script による設定は最近の新しい機能です。 CircleCI では、パイプライン機能の設定の大部分で YAML を使用しています。

TeamCity の settings.kts同等の CircleCI の config.yml
import jetbrains.buildServer.configs.kotlin.v2019_2.*
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.script

version: "2019.2"

project {
  buildType(HelloWorld)
}

object HelloWorld: BuildType({
  name = "Hello World"
  steps {
    script {
      scriptContent = "echo 'Hello World!'"
    }
  }
})

[source, yaml] ---- version: 2.1 workflows: hello-workflow: jobs: - hello-job

jobs: # Define job hello-job: # Define environment docker: - image: cimg/base:stable auth: username: mydockerhub-user password: $DOCKERHUB_PASSWORD # context / project UI env-var reference

# Define steps for job steps: - checkout - run: echo "Hello World!" ----

TeamCity の settings.kts
import jetbrains.buildServer.configs.kotlin.v2019_2.*
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.script

version: "2019.2"

project {
  buildType(HelloWorld)
}

object HelloWorld: BuildType({
  name = "Hello World"
  steps {
    script {
      scriptContent = "echo 'Hello World!'"
    }
  }
})
同等の CircleCI の config.yml
version: 2.1
workflows:
  hello-workflow:
    jobs:
      - hello-job

jobs:
  # Define job
  hello-job:
    # Define environment
    docker:
      - image: cimg/base:stable
        auth:
          username: mydockerhub-user
          password: $DOCKERHUB_PASSWORD  # context / project UI env-var reference

    # Define steps for job
    steps:
      - checkout
      - run: echo "Hello World!"
  • ビルドチェーンの代わりに、CircleCI では ワークフロー でジョブ間の依存関係やフローを定義します。

  • パイプライン は、プロジェクトのすべての設定、ワークフロー、ジョブを指します。 このマルチレイヤー構造により、様々なワークロードに対して強力な柔軟性と関心の分離を可能にします。

TeamCity のビルドチェーン同等の CircleCI のワークフロー
project {
  sequence {
    build(Compile)
    parallel {
        build(Test1)
        build(Test2)
    }
    build(Package)
    build(Publish)
  }
}

/* BuildType definitions assumed

[source, yaml] ---- version: 2.1 workflows: build-deploy: jobs: - Compile - Test1: requires: - Compile - Test2: requires: - Compile - Package: requires: - Test1 - Test2 - Publish: requires: - Package

# Job definitions assumed ----

TeamCity のビルドチェーン
project {
  sequence {
    build(Compile)
    parallel {
        build(Test1)
        build(Test2)
    }
    build(Package)
    build(Publish)
  }
}

/* BuildType definitions assumed
同等の CircleCI のワークフロー
version: 2.1
workflows:
  build-deploy:
    jobs:
      - Compile
      - Test1:
          requires:
            - Compile
      - Test2:
          requires:
            - Compile
      - Package:
          requires:
            - Test1
            - Test2
      - Publish:
          requires:
            - Package

# Job definitions assumed

CircleCI のコンセプトの詳細については、 コンセプト パイプライン のドキュメントページをご覧ください。

設定ファイル

環境

TeamCity では、必要な OS とツールがインストールされたビルドエージェントと、それに対応するビルド設定をセットアップする必要があります。 CircleCI では、すべてのジョブ設定に Executor が定義されており、CircleCI がそのエージェントのスピンアップを代行します。 使用可能な Executor のリストをご確認ください。

.circleci/config.yml
version: 2.1
jobs:
  my-mac-job:
    # Executor definition
    macos:
      xcode: "12.5.1"

    # Steps definition
    steps:
      - checkout
      # ...etc.

ステップ

TeamCity では、定義されたランナータイプ (Visual Studio、Maven、Gradle など) のリストからビルドステップを選択します。 CircleCI のステップの定義では、ターミナルやコマンドプロンプトで実行するコマンドを柔軟に取り入れることができます。

また、この柔軟性により、ステップをあらゆる言語、フレームワーク、ツールに適用できます。 たとえば、 Rails プロジェクト で Ruby コンテナを使用して bundler コマンドを実行できます。 Node.js プロジェクト で Node コンテナと npm コマンドを実行することも可能です。 様々な言語やフレームワークの例については、 サンプルとガイドの概要 をご覧ください。

Using Docker? Authenticating Docker pulls from image registries is recommended when using the Docker execution environment. Authenticated pulls allow access to private Docker images, and may also grant higher rate limits, depending on your registry provider. For further information see [Using Docker authenticated pulls](/docs/private-images). {: class="alert alert-info" }

TeamCity のステップ同等の CircleCI のステップ
project {
  parallel {
    build(Gradle) # Assume agent configured
    build(Maven)  # Assume agent configured
  }
}

object Gradle: BuildType({
  name = "Gradle"

  steps {
    gradle {
      tasks = "clean build"
    }
  }
})

object Maven: BuildType({
  name = "Maven"

  steps {
    maven {
      goals = "clean package"
    }
  }
})

[source, yaml] ---- version: 2.1 workflows: parallel-workflow: jobs: - Gradle - Maven

jobs: Gradle: docker: - image: cimg/openjdk:17.0.1 steps: - checkout # Checks out source code - run: name: Clean and Build command: ./gradlew clean build

Maven: docker: - image: cimg/openjdk:17.0.1 steps: - checkout # Checks out source code - run: name: Clean and Package command: mvn clean package ----

同等の CircleCI のステップ
version: 2.1
workflows:
  parallel-workflow:
    jobs:
      - Gradle
      - Maven

jobs:
  Gradle:
    docker:
      - image: cimg/openjdk:17.0.1
        auth:
          username: mydockerhub-user
          password: $DOCKERHUB_PASSWORD  # context / project UI env-var reference
    steps:
      - checkout # Checks out source code
      - run:
          name: Clean and Build
          command: ./gradlew clean build

  Maven:
    docker:
      - image: cimg/openjdk:17.0.1
        auth:
          username: mydockerhub-user
          password: $DOCKERHUB_PASSWORD  # context / project UI env-var reference
    steps:
      - checkout # Checks out source code
      - run:
          name: Clean and Package
          command: mvn clean package
同等の CircleCI のステップ
version: 2.1
workflows:
  parallel-workflow:
    jobs:
      - Gradle
      - Maven

jobs:
  Gradle:
    docker:
      - image: cimg/openjdk:17.0.1
    steps:
      - checkout # Checks out source code
      - run:
          name: Clean and Build
          command: ./gradlew clean build

  Maven:
    docker:
      - image: cimg/openjdk:17.0.1
    steps:
      - checkout # Checks out source code
      - run:
          name: Clean and Package
          command: mvn clean package

ビルドテンプレート/メタランナー

CircleCI でメタランナーやビルドテンプレートに相当するのが Orb です。Orb はテンプレート化された共有可能な設定です。 詳細は、 Orb ドキュメント をご覧ください。

複雑なビルド

より大規模で複雑なビルドについては、CircleCI のプラットフォームに慣れるまで、段階的に移行することをお勧めします。 以下の順番での移行をお勧めします。

関連資料


Suggest an edit to this page

Make a contribution
Learn how to contribute