Python 빌드 및 테스트하기

이 가이드는 TeamCity로 Python 프로젝트를 빌드하는 방법을 보여주며 TeamCity를 완전히 처음 접하는 개발자에게 권장됩니다.

전제 조건

We recommend that you have a basic understanding of Python and PyTest.

자세한 내용은 Python 문서를 찾아보세요.

1단계 – TeamCity 프로젝트 만들기

  1. TeamCity 페이지의 오른쪽 상단에 있는 Administration(관리) 톱니바퀴를 클릭합니다.
  2. + Create Project(+ 프로젝트 만들기)를 클릭하고 From a repository URL(저장소 URL에서) 탭을 선택합니다. In the Repository URL field, enter your repository, for example: https://github.com/marcobehlerjetbrains/teamcity-python.git. TeamCity는 Git, Subversion, Mercurial, Perforce 및 TFS(TeamCity Cloud + On-Premises) 등 널리 사용되는 모든 버전 관리 시스템을 즉시 처리합니다. CVS, StarTeam 및 Visual SourceSafe 지원은 TeamCity On-Premises에서만 가능합니다.
  3. 저장소에 인증이 필요한 경우, 사용자 이름과 비밀번호/액세스 토큰을 입력합니다.
  4. Proceed(진행)를 클릭합니다.

TeamCity가 저장소에 성공적으로 연결되면 다음 대화 상자가 표시됩니다.

Create Project From URL(URL에서 프로젝트 만들기) 대화상자에 프로젝트 이름과 초기 빌드 구성 이름을 변경할 수 있는 옵션이 있습니다.

참고: 최신 버전의 TeamCity에서는 TeamCity가 빌드해야 하는 브랜치를 지정할 수 있는 Default branch(기본 브랜치)Branch specification(브랜치 사양) 필드도 볼 수 있습니다. 지금은 무시하세요.

  • TeamCity가 기본 프로젝트 이름을 제안하지만 원하는 경우 프로젝트에 더 적합한 이름을 선택할 수 있습니다.
  • TeamCity는 기본 빌드 구성 이름도 제안합니다. 여기에 기본값을 그대로 두어도 좋고 필요한 경우 나중에 변경할 수 있습니다. (모든 TeamCity 프로젝트는 프로젝트를 빌드하는 데 필요한 모든 단계를 포함하는 하나 이상의 빌드 구성으로 이루어집니다. TeamCity의 빌드 구성은 다른 CI 시스템에서 종종 잡(job)이라고 부릅니다.)
  • Proceed(진행)를 클릭합니다.

Proceed(진행)를 클릭하면 TeamCity가 버전 관리 저장소에서 지원되는 기술(이 경우 Python)을 자동으로 검색합니다.

TeamCity가 저장소에서 .py 파일을 찾으면 자동으로 프로젝트에 대해 하나 이상의 빌드 단계를 제안합니다. 이 튜토리얼에서 사용된 저장소의 경우, 이렇게 자동 탐지된 빌드 단계는 main.py 또는 setup.py 파일을 실행하겠지만, 이것은 바라는 바가 아닐 수도 있습니다.

이보다는 Python 프로젝트에 다음 빌드 단계를 기본적으로 추가하는 것이 좋을 것입니다.

  1. Flake8 또는 PyLint를 실행하는 Linting 빌드 단계
  2. PyTest 또는 UnitTest를 실행하는 Testing 빌드 단계.

자동 탐지된 빌드 단계 중 하나를 선택하는 대신, 이 두 빌드 단계를 프로젝트에 추가해 보겠습니다.

TeamCity 프로젝트에 Flake8 linting 단계를 추가하는 것으로 시작합니다.

  1. Build Steps(빌드 단계)를 클릭하여 자동 탐지된 빌드 단계를 삭제합니다.
  2. Add Build Step(빌드 단계 추가)을 클릭하고 Runner type: Python(러너 유형: Python)을 선택하여 Python 코드를 빌드할 수 있는 빌드 단계를 추가합니다.
  3. 이 Python 프로젝트에는 린팅에 대한 Flake8 종속성이 있으므로 Command: Flake8(명령: Flake8)을 선택합니다. 프로젝트에서 린팅에 Pylint를 사용한다면 Pylint를 선택합니다.
  4. Script or module arguments(스크립트 또는 모듈 인수) 필드에서 린트할 디렉터리를 지정할 수 있습니다. 이 튜토리얼에서 Python 저장소로 작업하는 경우 “src/anewtodolist”로 설정합니다. 또는 필요에 따라 전체 프로젝트를 린트하려면 비워 둡니다.
  5. 선택 사항: 프로젝트에서 2.x를 계속 사용하는 경우, 다른 주요 Python 버전을 선택합니다.
  6. 환경 도구: 이 프로젝트는 Flake8 및 PyTest와 같이 필요한 모든 종속성에 Virtualenv를 사용합니다. 이것을 환경 도구로 선택하여 Virtualenv 지원을 활성화해야 합니다.
  7. Save(저장)를 클릭합니다.

빌드 단계를 성공적으로 만들었으면 다음 대화 상자가 표시됩니다.

다음으로, 프로젝트에 PyTest 단계를 추가해 보겠습니다.

  1. (선택 사항) Build Steps Overview(빌드 단계 개요) 페이지에 있지 않은 경우, Build Steps(빌드 단계)를 클릭하여 자동 탐지된 빌드 단계를 삭제합니다.
  2. Add Build Step(빌드 단계 추가)을 클릭하고 Runner type: Python(러너 유형: Python)을 선택하여 Python 코드를 빌드할 수 있는 빌드 단계를 추가합니다.
  3. 이 Python 프로젝트에는 테스트에 대한 Pytest 종속성이 있으므로 Command: Pytest(명령: Pytest)를 선택합니다. 프로젝트에서 테스트에 UnitTest를 사용한다면 UnitTest를 선택합니다.
  4. 선택 사항: Script or module arguments(스크립트 또는 모듈 인수) 필드에서 테스트할 디렉터리를 지정할 수 있습니다. 또는 테스트가 Python 러너에 의해 자동으로 탐지되는 /tests 폴더에 있으면 비워 둡니다.
  5. 선택 사항: 프로젝트에서 2.x를 계속 사용하는 경우, 다른 주요 Python 버전을 선택합니다.
  6. 환경 도구: 이 프로젝트는 Flake8 및 PyTest와 같이 필요한 모든 종속성에 Virtualenv를 사용합니다. 이것을 환경 도구로 선택하여 Virtualenv 지원을 활성화해야 합니다.
  7. Save(저장)를 클릭합니다.

2단계 – 첫 빌드 실행하기

이제 첫 빌드를 실행할 수 있습니다.

  1. 다음과 같이 창의 오른쪽 상단에 있는 Run(실행) 버튼을 클릭합니다.
  2. 빌드가 시작되고 완료될 때까지 기다립니다.

참고: TeamCity Cloud를 사용하는 경우 빌드 에이전트를 사용하려면 최대 2분 정도 기다려야 할 수 있습니다. 사용 가능한 에이전트에 의해 선택될 때까지 빌드가 당분간 대기열에 놓여집니다.

로컬 빌드 에이전트와 함께 TeamCity On-Premises를 사용하는 경우, 빌드가 즉시 시작됩니다.

빌드가 시작되면 빌드 개요 페이지로 이동하며, 이 페이지에서 빌드와 관련된 실시간 데이터를 표시하는 Build Log(빌드 로그)가 열립니다.

빌드가 실행되면 빌드의 개요 페이지로 리디렉션됩니다. 이제 테스트 결과검사를 살펴보거나 빌드의 개요 페이지에서 전체 빌드 로그를 찾아 볼 수 있습니다.

3단계 – Python TeamCity 프로젝트 구성하기

이제 Python 저장소가 TeamCity에 연결되었으므로 코드를 계속 개발하고 저장소에 푸시할 수 있습니다.

기본적으로, TeamCity는 VCS 저장소의 메인 브랜치를 60초마다 폴링하여 수신한 변경 사항이 있는지 확인하고 탐지된 모든 커밋에 대해 하나의 (결합된) 빌드를 트리거합니다.

브랜치 빌드

기본 브랜치뿐만 아니라 저장소의 모든 브랜치에 대한 모든 변경 사항에 대해 빌드를 트리거하려면 VCS 루트 설정에 와일드카드 브랜치 사양을 추가하세요. VCS 설정은 단일 빌드 구성이 아니라 TeamCity 프로젝트에 속합니다. 따라서 변경 사항은 동일한 VCS 루트를 사용하는 모든 빌드 구성에 적용됩니다.

  1. 프로젝트의 개요 페이지에서 Edit Project(프로젝트 편집)를 클릭합니다. 또는 Build(빌드) 빌드 구성이 열려 있는 경우, Edit Configuration(구성 편집)을 클릭합니다.
  2. VCS Roots(버전 관리 시스템)로 이동하여 VCS 루트를 편집합니다.
  3. Branch Specification(브랜치 사양) 입력 필드를 입력하고 Save(저장)를 클릭합니다. Branch Specification(브랜치 사양) 입력 필드가 보이지 않으면 먼저 Show Advanced(고급 표시)를 클릭하세요.

브랜치 사양의 예:

  • +:refs/heads/* – TeamCity는 프로젝트의 모든 브랜치에서 변경 사항을 확인하지만 refs/pull/*와 일치하기 때문에 GitHub와 같은 플랫폼에서 풀 요청을 확인하지는 않습니다.
  • +:* – TeamCity는 모든 브랜치에서 수신되는 모든 변경 사항을 확인합니다.
  • 자체 사용자 지정 브랜치 사양.

TeamCity는 이제 브랜치 사양을 따르고 저장소로 푸시되는 모든 브랜치를 모니터링하여 수신 변경 사항을 확인하고 그에 따라 빌드를 실행합니다.

풀 리퀘스트 빌드

TeamCity가 저장소에 대해 생성된 풀 요청을 자동으로 빌드하도록 하려면 빌드 구성에 풀 요청 빌드 기능을 추가할 수 있습니다.

  1. 빌드 구성을 열고 Edit Configuration(구성 편집)을 클릭합니다.
  2. Build Features(빌드 기능)로 이동하여 Add Build Feature(빌드 기능 추가)를 클릭합니다. Build Features(빌드 기능) 링크가 보이지 않으면 Show More(더 보기)를 클릭합니다.
  3. 드롭다운에서 Pull Requests(풀 요청)를 선택하고 저장소와 저장소 공급자(GitHub, GitLab 등)를 선택합니다.
  4. 필요에 따라, 작성자 또는 브랜치 이름별로 Pull Request Filtering(풀 요청 필터링)을 적용합니다.

참고: Pull Request(풀 요청) 빌드 기능은 브랜치 사양을 투명하게 확장합니다(자세한 내용은 이전 단계 참조). 예를 들어 GitHub의 경우 풀 요청 기능은 (보이지 않게) 브랜치 사양에 +:refs/pull/*을 추가합니다.

풀 요청 기능을 사용할 때 풀 요청 브랜치가 일반 브랜치 사양에 포함되지 않도록 하는 것이 좋습니다. 그렇지 않으면 풀 요청 관련 기능을 TeamCity에서 사용할 수 없게 됩니다.

TeamCity는 이제 외부 플랫폼에서 풀 요청을 확인하고 구성 규칙과 일치하는 풀 요청에 대해 빌드를 트리거합니다.

참고: 빌드하려는 생각이 없는 저장소에 누군가가 유해한 코드를 푸시할 수 있으므로 공개 저장소에서는 이 기능을 주의해서 사용해야 합니다.

Commit Status Publisher(커밋 상태 게시자)

When using the pull requests feature in combination with Azure DevOps, Bitbucket Server, GitHub, or GitLab, it also makes sense to use the Commit Status Publisher build feature. 이 기능은 빌드 결과와 함께 해당 플랫폼에서 풀 요청의 상태를 업데이트합니다.

빌드 결과를 GitHub에 다시 보고하도록 TeamCity를 설정하려면 다음 단계를 따라야 합니다.

  1. 빌드 구성을 열고 Edit Configuration(구성 편집)을 클릭합니다.
  2. Build Features(빌드 기능)로 이동하여 Add Build Feature(빌드 기능 추가)를 클릭합니다.
  3. 드롭다운에서 Commit Status Publisher(커밋 상태 게시자)를 선택하고 저장소와 게시자(GitHub, GitLab 등)를 선택합니다.
  4. 커밋 상태를 게시할 수 있는 충분한 권한이 있는 액세스 토큰을 제공합니다.
  5. Save(저장)를 클릭합니다.

TeamCity가 빌드를 실행하면 이제 GitHub의 Pull Request(풀 요청) 탭(녹색 체크 표시)에서 변경 사항으로 인해 빌드에 실패했는지 여부를 쉽게 확인할 수 있습니다.