TeamCity에서 GitLab으로 마이그레이션
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에서 빌드 기능 및 플러그인을 통해 활성화되는 일부 기능은
CI/CD 키워드 및 기능을 사용하여 GitLab 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 공유 러너를 사용하거나
새 러너를 설치할 수 있습니다.
-
러너가 사용 가능하도록 확인하세요. GitLab.com 공유 러너를 사용하거나
마이그레이션 단계
- SCM 솔루션에서 GitLab으로 프로젝트를 마이그레이션하세요.
- (권장) 외부 SCM 제공업체에서 대량 수입을 자동화하기 위해 可用한 가져오기 도구를 사용할 수 있습니다.
- URL로 리포지토리 가져오기를 할 수 있습니다.
-
각 프로젝트에
.gitlab-ci.yml
파일을 생성하세요. -
TeamCity 구성을 GitLab CI/CD 작업으로 마이그레이션하고 이들이 병합 요청에서 직접 결과를 표시하도록 구성하세요.
-
클라우드 배포 템플릿,
환경, 및 Kubernetes용 GitLab 에이전트를 사용하여 배포 작업을 마이그레이션하세요. -
서로 다른 프로젝트 간에 CI/CD 구성을 재사용할 수 있는지 확인한 후,
CI/CD 템플릿 또는 CI/CD 구성 요소를 생성하고 공유하세요. -
파이프라인 효율성을 참조하여
GitLab CI/CD 파이프라인을 더 빠르고 효율적으로 만드는 방법을 알아보세요.
여기에서 답변되지 않은 질문이 있는 경우
GitLab 커뮤니티 포럼이 좋은 자원이 될 수 있습니다.