TeamCity에서 마이그레이션
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
TeamCity에서 GitLab CI/CD로 마이그레이션하는 경우 TeamCity 워크플로우를 복제하고 개선하는 CI/CD 파이프라인을 만들 수 있습니다. GitLab CI/CD와 TeamCity는 몇 가지 유사점이 있는 CI/CD 도구입니다.
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 Configuration 파일에서 구성할 수 있습니다.
TeamCity 빌드 구성은 소프트웨어 프로젝트를 빌드, 테스트 및 배포하는 방법을 정의하는 일련의 지침입니다. 구성에는 TeamCity에서 CI/CD 프로세스를 자동화하는 데 필요한 매개변수와 설정이 포함됩니다.
GitLab에서 TeamCity 빌드 구성에 해당하는 것은 .gitlab-ci.yml 파일입니다.
이 파일은 프로젝트의 CI/CD 파이프라인을 정의하며 프로젝트를 빌드, 테스트 및 배포하는 데 필요한 스테이지, 잡 및 명령을 지정합니다.
기능 및 개념 비교#
많은 TeamCity 기능과 개념은 동일한 기능을 제공하는 GitLab에 상응하는 기능이 있습니다.
잡#
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 파이프라인을 참조하세요.
변수#
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"
아티팩트#
TeamCity의 빌드 구성에서는 빌드 프로세스 중에 생성되는 아티팩트를 정의할 수 있습니다.
GitLab에서 모든 잡은 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에서 TeamCity 에이전트에 해당하는 것은 러너입니다.
GitLab CI/CD에서 러너는 잡을 실행하는 서비스입니다. GitLab.com을 사용하는 경우 자체 관리 러너를 프로비저닝하지 않고도 잡을 실행할 인스턴스 러너 플릿을 사용할 수 있습니다.
러너에 대한 몇 가지 주요 세부 사항:
- 러너는 인스턴스, 그룹 간에 공유되거나 단일 프로젝트 전용으로 구성할 수 있습니다.
- 더 세밀한 제어를 위해
tags키워드를 사용하고 러너를 특정 잡과 연결할 수 있습니다. 예를 들어 전용, 더 강력하거나 특정 하드웨어가 필요한 잡에 태그를 사용할 수 있습니다. - GitLab에는 러너를 위한 자동 스케일링이 있습니다. 자동 스케일링을 사용하여 필요할 때만 러너를 프로비저닝하고 필요하지 않을 때 축소합니다.
TeamCity 빌드 기능 및 플러그인#
빌드 기능 및 플러그인을 통해 활성화되는 TeamCity의 일부 기능은 GitLab CI/CD에서 CI/CD 키워드 및 기능으로 기본 지원됩니다.
| TeamCity 플러그인 | GitLab 기능 |
|---|---|
| 코드 커버리지 | 코드 커버리지 및 테스트 커버리지 시각화 |
| 단위 테스트 보고서 | JUnit 테스트 보고서 아티팩트 및 단위 테스트 보고서 |
| 알림 | 알림 이메일 및 Slack |
마이그레이션 계획 및 수행#
다음 권장 단계 목록은 GitLab CI/CD로 신속하게 마이그레이션을 완료할 수 있었던 조직을 관찰한 후 작성되었습니다.
마이그레이션 계획 수립#
마이그레이션을 시작하기 전에 마이그레이션 준비를 위한 마이그레이션 계획을 수립해야 합니다.
TeamCity에서의 마이그레이션의 경우 준비 과정에서 다음 질문을 스스로에게 물어보세요:
- TeamCity에서 현재 잡이 사용하는 플러그인은 무엇입니까?
- 이러한 플러그인이 정확히 무엇을 하는지 알고 있습니까?
- TeamCity 에이전트에 무엇이 설치되어 있습니까?
- 사용 중인 공유 라이브러리가 있습니까?
- TeamCity에서 어떻게 인증합니까? SSH 키, API 토큰 또는 다른 시크릿을 사용합니까?
- 파이프라인에서 액세스해야 하는 다른 프로젝트가 있습니까?
- 외부 서비스에 액세스하기 위한 TeamCity 자격 증명이 있습니까? 예를 들어 Ansible Tower, Artifactory 또는 다른 클라우드 공급자나 배포 대상?
사전 조건#
마이그레이션 작업을 수행하기 전에 먼저 다음을 수행해야 합니다:
- GitLab에 익숙해집니다.
- 주요 GitLab CI/CD 기능에 대해 읽어봅니다.
- 튜토리얼을 따라 첫 번째 GitLab 파이프라인 및 정적 사이트를 빌드, 테스트 및 배포하는 더 복잡한 파이프라인을 만듭니다.
- CI/CD YAML 구문 참조를 검토합니다.
- GitLab을 설정하고 구성합니다.
- GitLab 인스턴스를 테스트합니다.
- 공유 GitLab.com 러너를 사용하거나 새 러너를 설치하여 러너를 사용할 수 있는지 확인합니다.
마이그레이션 단계#
- SCM 솔루션에서 GitLab으로 프로젝트를 마이그레이션합니다.
- (권장) 사용 가능한 가져오기를 사용하여 외부 SCM 공급자에서 대량 가져오기를 자동화할 수 있습니다.
- URL로 저장소를 가져올 수 있습니다.
- 각 프로젝트에
.gitlab-ci.yml파일을 만듭니다. - TeamCity 구성을 GitLab CI/CD 잡으로 마이그레이션하고 머지 리퀘스트에서 직접 결과를 표시하도록 구성합니다.
- 클라우드 배포 템플릿, 환경 및 Kubernetes용 GitLab 에이전트를 사용하여 배포 잡을 마이그레이션합니다.
- 다른 프로젝트에서 CI/CD 구성을 재사용할 수 있는지 확인한 다음 CI/CD 컴포넌트를 만들고 공유합니다.
- GitLab CI/CD 파이프라인을 더 빠르고 효율적으로 만드는 방법을 알아보려면 파이프라인 효율성을 참조하세요.
여기에 답이 없는 질문이 있는 경우 GitLab 커뮤니티 포럼이 좋은 자료가 될 수 있습니다.
