TeamCity에서 마이그레이션하기

TeamCity에서 마이그레이션하기

TeamCity에서 GitLab CI/CD로 마이그레이션한다면, TeamCity 워크플로를 복제하고 개선하는 CI/CD 파이프라인을 만들 수 있어요.

출처: 문서

본문

주요 유사점과 차이점

GitLab CI/CD와 TeamCity는 몇 가지 유사점이 있는 CI/CD 도구예요. GitLab과 TeamCity 모두:

  • 대부분의 언어에 대한 잡을 실행할 만큼 유연해요.
  • 온프레미스나 클라우드에 배포할 수 있어요.

또한 두 도구 사이에는 몇 가지 중요한 차이점이 있어요.

  • GitLab CI/CD 파이프라인은 YAML 형식의 구성 파일로 구성되며, 수동으로 편집하거나 파이프라인 에디터로 편집할 수 있어요. TeamCity 파이프라인은 UI나 Kotlin DSL로 구성할 수 있어요.
  • GitLab은 내장 SCM, 컨테이너 레지스트리, 보안 스캔 등을 갖춘 DevSecOps 플랫폼이에요. TeamCity는 이런 기능을 위해 별도의 솔루션이 필요하고, 보통 통합으로 제공돼요.

구성 파일

TeamCity는 UI에서 구성하거나 Kotlin DSL 형식의 TeamCity 구성 파일로 구성할 수 있어요. TeamCity 빌드 구성은 소프트웨어 프로젝트를 어떻게 빌드, 테스트, 배포해야 하는지 정의하는 일련의 지침이에요. 구성에는 TeamCity에서 CI/CD 프로세스를 자동화하는 데 필요한 매개변수와 설정이 포함돼요.

GitLab에서 TeamCity 빌드 구성의 동등물은 .gitlab-ci.yml 파일이에요. 이 파일은 프로젝트의 CI/CD 파이프라인을 정의하며, 프로젝트를 빌드, 테스트, 배포하는 데 필요한 스테이지, 잡, 명령을 지정해요.

기능과 개념 비교

많은 TeamCity 기능과 개념은 GitLab에서 같은 기능을 제공하는 동등물이 있어요.

잡 (Jobs)

TeamCity는 컴파일, 테스트 실행, 아티팩트 패키징 같은 작업을 수행할 명령이나 스크립트를 정의하는 여러 빌드 스텝으로 구성된 빌드 구성을 사용해요.

다음은 Docker 파일을 빌드하고 단위 테스트를 실행하는 Kotlin DSL 형식의 TeamCity 프로젝트 구성 예시예요.

package _Self.buildTypes

import jetbrains.buildServer.configs.kotlin.*
import jetbrains.buildServer.configs.kotlin.buildFeatures.perfmon
import jetbrains.buildServer.configs.kotlin.buildSteps.dockerCommand
import jetbrains.buildServer.configs.kotlin.buildSteps.nodeJS
import jetbrains.buildServer.configs.kotlin.triggers.vcs

object BuildTest : BuildType({
    name = "Build & Test"

    vcs {
        root(HttpsGitlabComRutshahCicdDemoGitRefsHeadsMain)
    }

    steps {
        dockerCommand {
            id = "DockerCommand"
            commandType = build {
                source = file {
                    path = "Dockerfile"
                }
            }
        }
        nodeJS {
            id = "nodejs_runner"
            workingDir = "app"
            shellScript = """
                npm install jest-teamcity --no-save
                npm run test -- --reporters=jest-teamcity
            """.trimIndent()
        }
    }

    triggers {
        vcs {
        }
    }

    features {
        perfmon {
        }
    }
})

GitLab CI/CD에서는 파이프라인의 일부로 실행할 작업과 함께 잡을 정의해요. 각 잡에는 하나 이상의 빌드 스텝이 정의될 수 있어요.

위 예시의 동등한 GitLab CI/CD .gitlab-ci.yml 파일은 다음과 같아요.

workflow:
  rules:
    - if: $CI_COMMIT_BRANCH != "main" || $CI_PIPELINE_SOURCE != "merge_request_event"
      when: never
    - when: always

stages:
  - build
  - test

build-job:
  image: docker:20.10.16
  stage: build
  services:
    - docker:20.10.16-dind
  script:
    - docker build -t cicd-demo:0.1 .

run_unit_tests:
  image: node:17-alpine3.14
  stage: test
  before_script:
    - cd app
    - npm install
  script:
    - npm test
  artifacts:
    when: always
    reports:
      junit: app/junit.xml

파이프라인 트리거

TeamCity 트리거는 VCS 변경, 예약된 트리거, 다른 빌드에 의해 트리거된 빌드 등 빌드를 시작하는 조건을 정의해요.

GitLab CI/CD에서 파이프라인은 브랜치나 머지 리퀘스트 변경, 새 태그 같은 다양한 이벤트에 대해 자동으로 트리거될 수 있어요. 파이프라인은 API를 사용해 수동으로 트리거하거나 예약된 파이프라인으로 트리거할 수도 있어요. 자세한 내용은 CI/CD 파이프라인을 참고해요.

변수 (Variables)

TeamCity에서는 빌드 구성 설정에서 빌드 매개변수와 환경 변수를 정의해요.

GitLab에서는 variables 키워드로 CI/CD 변수를 정의해요. 변수를 사용해 구성 데이터를 재사용하거나, 더 동적인 구성으로 만들거나, 중요한 값을 저장할 수 있어요. 변수는 전역으로 또는 잡별로 정의할 수 있어요.

예를 들어 변수를 사용하는 GitLab CI/CD .gitlab-ci.yml 파일:

default:
  image: alpine:latest

stages:
  - greet

variables:
  NAME: "Fern"

english:
  stage: greet
  variables:
    GREETING: "Hello"
  script:
    - echo "$GREETING $NAME"

spanish:
  stage: greet
  variables:
    GREETING: "Hola"
  script:
    - echo "$GREETING $NAME"

아티팩트 (Artifacts)

TeamCity의 빌드 구성에서는 빌드 중에 생성되는 아티팩트를 정의할 수 있어요.

GitLab에서는 어떤 잡이든 [artifacts](/ci/yaml/#artifacts) 키워드로 잡이 완료될 때 저장할 아티팩트 집합을 정의할 수 있어요. 아티팩트는 나중에 테스트나 배포에 사용할 수 있는 파일이에요.

예를 들어 아티팩트를 사용하는 GitLab CI/CD .gitlab-ci.yml 파일:

stage:
  - generate
  - use

generate_cat:
  stage: generate
  script:
    - touch cat.txt
    - echo "meow" > cat.txt
  artifacts:
    paths:
      - cat.txt
    expire_in: 1 week

use_cat:
  stage: use
  script:
    - cat cat.txt

더 알아보기

마이그레이션 전반에 대한 접근법과 체크리스트는 다른 도구에서 GitLab CI/CD로의 마이그레이션 계획하기 문서를 먼저 읽어보는 걸 추천해요. 파이프라인 구성 문법을 다시 확인하려면 CI/CD YAML 문법 문서도 함께 보면 좋아요.