소프트웨어는 작성되고 테스트되며 프로덕션 환경으로 배포되어야 합니다. 이를 위해 개발자와 DevOps는 CI/CD 파이프라인 또는 빌드/릴리스 파이프라인을 자동화하여 이러한 활동의 대부분을 자동화합니다.
A pipeline allows developers, DevOps teams and others to produce and deploy reliable code. In the Microsoft realm, the way to build a pipeline is with Azure DevOps with a feature called Azure Pipelines.
Azure 파이프라인은 빌드를 자동으로 실행하고 테스트를 수행하며 코드(릴리스)를 다양한 개발 및 프로덕션 환경에 배포할 수 있도록 해줍니다. 그러나 Azure DevOps나 파이프라인에 대해 들어보지 못했거나 Azure DevOps로 파이프라인을 구축해본 적이 없다면 이 Azure 파이프라인 튜토리얼이 도움이 될 것입니다.
이 글에 도움을 준 Microsoft Azure 기술 트레이너인 Peter De Tender에게 큰 감사를 표합니다.
프로젝트 개요
이 프로젝트 기사에서는 프로젝트를 구축하거나 솔루션을 구현하는 방법을 다룹니다. 각 섹션은 이전 섹션에서 구축한 단계 위에 누적된 단계입니다.
이 프로젝트에서는 처음부터 Azure DevOps 파이프라인을 만드는 방법을 배우게 됩니다. Git 버전 관리 커밋에서 빌드를 호출하고 자동으로 테스트를 실행하며 마지막으로 패키지를 환경에 릴리스하는 등의 개념을 배우게 됩니다. 이 프로젝트가 끝날 때까지 샘플 전자 상거래 애플리케이션이 Azure WebApp으로 배포될 것입니다.
이 프로젝트는 완료하는 데 30분이 걸릴 것입니다.
이 프로젝트를 따라하고 생성된 리소스를 즉시 제거하면 Azure 계정에 비용이 청구되지 않습니다. 꼭 제거하는 것을 잊지 마세요!
대상 독자
이 프로젝트는 Azure DevOps 웹 UI에서 첫 번째 Azure 파이프라인을 설정하는 기본 사항을 다룰 것입니다. Azure 파이프라인이 처음이라면 이 프로젝트에서 많은 것을 배울 수 있지만, 이미 자신의 파이프라인을 구축한 적이 있거나 Azure 파이프라인 전문가라면 그렇게 많은 것을 배울 수는 없을 것입니다.
환경 요구 사항
이 프로젝트를 단계별로 진행할 계획이라면, 최소한 다음이 필요합니다:
- Azure 계정
- 글로벌 관리자 또는 유사한 권한으로 Azure Portal에 로그인한 상태
- A GitHub account
- 생성된 비어 있는 Github 저장소
- 비어 있는 Azure WebApp(플랫폼으로는 dotnetcore 2.2와 Linux을 사용하여 배포)
Azure DevOps 조직 생성
절대로 시작하기 때문에 먼저 Azure DevOps의 모든 기능과 서비스가 포함된 “기본” 개체를 만들어야 합니다. 이 개체는 조직이라고 불립니다. 조직은 다음 섹션에서 만드는 프로젝트가 저장되는 곳입니다.
- Azure Portal에서 All services로 이동하여 DevOps를 검색하고 DevOps를 선택합니다. 아래에서 예상되는 내용을 볼 수 있습니다. 이렇게 하면 아래에 표시된대로 Azure DevOps 블레이드가 열립니다.

2. 다음으로 My Azure DevOps Organizations를 클릭하고 Azure 자격 증명을 제공합니다. 새로운 조직을 만들 수 있는 페이지로 이동됩니다. 여기에서 파란색 Create new organization 버튼을 클릭합니다.

3. 다음 페이지에서 조직의 이름을 제공합니다. 특정 이름을 사용하는 데 문제가 발생하면 Azure DevOps organization naming conventions을 확인하세요. 이 화면에서 가장 가까운 Azure 지역도 지정합니다. 완료되면 Continue을 클릭합니다.

이 시점에서 Azure DevOps 조직이 생성됩니다!
Azure DevOps 프로젝트 생성
다음 단계는 프로젝트를 생성하는 것입니다. 프로젝트는 생성할 파이프라인, 다양한 아티팩트 및 특정 서비스나 소프트웨어와 관련된 기타 정보를 담는 컨테이너입니다.
Azure DevOps를 사용하면 조직 생성 작업과 동일한 워크플로우에서 프로젝트를 생성할 수 있습니다. 지금까지 따라오셨다면 아래에 표시된 프로젝트 생성 페이지가 표시됩니다.
- 프로젝트 생성 페이지에서 프로젝트 이름 필드에 프로젝트 이름을 입력하세요. 이 프로젝트에서는 Azure DevOps 프로젝트인 devopsdemo를 사용합니다.
- + 프로젝트 만들기 버튼을 클릭하여 프로젝트를 생성하세요.
- 지금은 가시성을 비공개로 유지하세요. 이렇게 하면 프로젝트가 인터넷에 노출되지 않습니다. 공개 프로젝트는 프로젝트의 아티팩트에 대해 프로젝트의 멤버가 아닌 사람들과 로그인하지 않은 사용자들이 읽기 전용으로 액세스할 수 있습니다.

이 시점에서 Azure DevOps 워크스페이스(프로젝트 + 조직)가 생성되었습니다. 지금까지 따라오셨다면 pdtitws123라는 Azure DevOps 조직이 생성되었고, 해당 조직 안에 devopsdemo라는 프로젝트가 있을 것입니다.

Azure DevOps 빌드 파이프라인 만들기
Azure DevOps 조직과 프로젝트를 설정했으므로 이제 내부에 빌드 파이프라인을 생성할 수 있습니다. 파이프라인은 모든 마법이 일어나는 곳입니다. 여기에서 코드 컴파일, 의존성 가져오기 등 다양한 작업을 수행하는 빌드를 생성할 것입니다.
- 대시보드에서 Pipelines를 선택한 다음 Builds를 선택하십시오.

2. 빌드 파이프라인이 아직 발견되지 않았다는 메시지가 표시됩니다. 빌드 파이프라인 생성을 시작하려면 New pipeline을 클릭하십시오.

3. 그런 다음 코드가 저장되어 있는 위치를 입력하라는 메시지가 표시됩니다. 이 프로젝트에서 코드는 GitHub 리포지토리에 저장되어 있습니다. GitHub을 선택하십시오. 여기는 코드가 저장되고 빌드를 호출하는 트리거가 발생하는 장소입니다.

4. GitHub를 클릭하면 아래에 표시된대로 GitHub 계정 자격 증명을 제공하라는 메시지가 표시됩니다. 이 단계를 시작하기 전에이 문서의 전제 조건 섹션에 정의된 비어있는 GitHub 리포지토리가 생성되었는지 확인하십시오!

5. 다음으로, Azure Pipelines에 권한을 부여하라는 메시지가 표시되는 단계를 확인하십시오. 이를 통해 Azure DevOps가 GitHub 리포지토리에 액세스할 수 있도록 권한이 부여됩니다.

GitHub 리포지토리를 빌드 파이프라인에 연결하기
Azure DevOps에 GitHub 계정의 권한을 부여한 후, 이제 GitHub 리포지토리를 빌드 파이프라인에 연결하십시오.
- 이 프로젝트에 대해 생성한 비어있는 GitHub 리포지토리를 선택하십시오.

2. 프로젝트가 이전에 선택한 리포지토리에서 소스 코드를 읽고 쓰고 확인할 수 있도록 허용하십시오. 그런 다음 승인 및 설치를 클릭하여 이 과정을 확인하십시오.

3. 확인을 클릭하면 아래에 표시된대로 오류가 발생합니다. 이 오류는 선택한 GitHub 리포지토리가 비어 있기 때문에 발생합니다.

이 시점에서 GitHub 리포지토리가 Azure DevOps 빌드 파이프라인에 연결됩니다.
GitHub 리포지토리를 Azure DevOps 빌드 파이프라인에 링크하려면 매번 완전히 새로운 파이프라인을 만들 필요는 없습니다.
샘플 GitHub 리포지토리 코드 채우기
GitHub 리포지토리에 코드가 없으면 Azure DevOps 빌드 파이프라인을 실행할 수 없습니다. 이 단계에서 코드는 중요하지 않습니다. 리포지토리에 코드를 가져오기 위해 기존 리포지토리에서 코드를 복제할 것입니다. 이 리포지토리에서는 Azure WebApps에 e-commerce 샘플 애플리케이션을 게시하기 위한 모든 소스 코드를 사용할 수 있습니다.
이 리포지토리의 샘플 코드에는 SimplCommerce라는 샘플 e-commerce 애플리케이션이 포함되어 있습니다. 이 애플리케이션은 일반적인 “안녕하세요, 세상” 프로젝트보다 현실적입니다.
- 이 샘플 GitHub 리포지토리로 이동하고 아래에 표시된대로 코드 가져오기를 클릭합니다.

2. 이전 리포지토리의 복제 URL에 http://github.com/007FFFLearning/SimplDev를 사용하고 가져오기 시작을 클릭합니다.

리포지토리 가져오기 단계가 성공적으로 완료되면 Azure DevOps 파이프라인 창을 새로 고침하여 이제 진행할 수 있어야 합니다.
YAML에서 빌드 파이프라인 검사 및 보기
이 시점에서, 파이프라인 생성 프로세스의 검토 단계에 도달하게 됩니다. 이제 YAML로 된 빌드 파이프라인의 표현이 제시됩니다. 이 YAML 파일은 이 프로젝트에서의 소스 코드 언어가 dotnetcore로 감지되어 자동으로 생성됩니다.
Azure DevOps의 실제 이점 중 하나는 파이프라인 YAML입니다. 많은 다른 DevOps 도구에서는 파이프라인 파일을 수동으로 작성해야 합니다.

Azure 빌드 파이프라인 수동 실행
지속적 통합 (CI) 파이프라인에서 빌드는 일반적으로 소스 제어에 커밋됨으로써 트리거됩니다. 그러나 빌드 파이프라인을 수동으로 트리거할 수도 있습니다. 빌드 파이프라인을 수동으로 시작하여 무슨 일이 일어나는지 확인해 보겠습니다.
지금까지 따라오셨다면, 이 시점에서 빌드 파이프라인을 시작하기 위해 실행을 클릭할 수 있을 것입니다. 아래 스크린샷에서 볼 수 있듯이, 이렇게 하면 파이프라인 빌드 프로세스가 시작됩니다.

몇 초 후, 아래에서 보는 것처럼 macOS에서 프로세스가 실행되고 있음을 확인할 수 있습니다. 빌드 파이프라인은 각 작업과 태스크가 실행됨에 따라 실시간으로 정보를 반환할 것입니다.

빌드 파이프라인은 그런 다음 아래에서 볼 수 있듯이 다른 운영 체제에 대해 동일한 프로세스를 반복합니다 (이 예제에서는). 수행되는 단계는 YAML 파일이 어떻게 작성되었는지에 따라 매우 다양할 것입니다.

빌드가 완료되면, 아래에서 볼 수 있는 것처럼 초록색 확인 표시가 나타납니다. 이 스크린샷은 각 플랫폼 빌드가 성공적으로 통과되었음을 나타냅니다.

이제 Azure DevOps 빌드 파이프라인을 만들었습니다!
Azure DevOps 릴리스 파이프라인 만들기
빌드 파이프라인이 생성되었으며, 이는 큰 진전입니다. 이 시점에서 멈춘다면, 완전하고 자동화된 파이프라인을 위한 길을 걷고 있습니다. 하지만 아직 끝나지 않았습니다! 소프트웨어의 궁극적인 목표는 고객이 사용할 수 있도록 배포되어야 합니다. 이제 릴리스 파이프라인도 자동화해야 합니다!
A release pipeline takes a build artifact, a result of the build process and deploys that to one or more environments. In this Project, you’re going to use a release pipeline to publish code in the GitHub repo to an Azure Web App.
- Azure DevOps에서 Pipelines를 클릭한 다음 Releases를 클릭하세요.

2. 다음으로 New을 선택한 다음 New Release Pipeline을 선택하세요. 이렇게 하면 새로운 릴리스 파이프라인 마법사가 실행됩니다.

3. 오른쪽의 템플릿 목록에서 Azure App Service 배포를 선택하세요. 미래의 릴리스 파이프라인 생성 시간을 절약하기 위해 다양한 종류의 템플릿이 제공됩니다.

4. 단계 이름에 대한 설명을 제공하세요. 이 단계에는 릴리스 작업이 포함됩니다. 이 프로젝트에서는 웹 앱으로 배포라는 이름을 사용하세요.

릴리스 파이프라인은 이제 아래 스크린샷과 같아야 합니다.

5. 단계 필드에서 1 작업, 1 작업을 선택하세요. 이 필드에서 실제 배포에 사용할 Azure 웹 앱 환경의 설정을 나중에 제공할 예정입니다.
6. Azure App Service 배포 템플릿의 일부로 이 화면에서 정의해야 할 몇 가지 매개변수가 제공됩니다.
- 스테이지 이름 – 이 예제에서 Deploy-to-webapps2입니다.
- Azure 구독 – 구독을 선택하고 인증을 확인하세요(자격 증명 필요)
- 앱 유형 – Linux에서 웹 앱
- 앱 서비스 이름 – 이전에 생성한 웹 앱

7. 작업이 완료되면 Azure 파이프라인 프로젝트의 상단 메뉴에서 파이프라인을 클릭하세요. 이렇게하면 메인 화면으로 돌아가 다음 단계를 완료 할 수 있으며, 이는 아티팩트를 지정하는 것입니다.

Azure DevOps 릴리스 파이프라인에 아티팩트 추가하기
릴리스 파이프라인에서는 배포해야 할 많은 다른 항목이 있습니다. 이러한 항목을 아티팩트라고합니다. 아티팩트는 간단히 말해 애플리케이션의 배포 가능한 구성 요소입니다. Azure 파이프라인은 다양한 아티팩트 소스에서 생성된 아티팩트를 배포 할 수 있습니다.
이 섹션에서는 릴리스 파이프라인에 아티팩트를 추가하는 방법을 알아 보겠습니다.
- 파이프라인 화면에서 아티팩트 추가를 클릭하세요.
- 소스 유형은 이미 빌드로 설정되어 있으며, 이는 이전에 생성한 빌드 파이프라인의 출력을 배포 할 것이기 때문에 원하는 것입니다. 소스(빌드 파이프라인) 드롭 다운에서 이전에 생성한 빌드 파이프라인을 선택하세요.
- 구성을 저장하려면 추가를 클릭하세요.

4. 화면 오른쪽 상단의 저장 버튼을 클릭하여 릴리스 파이프라인을 저장합니다.
Azure DevOps 릴리스 생성
릴리스 파이프라인을 생성한 후, 릴리스를 생성하기 시작합니다. 릴리스는 파이프라인의 특정 실행을 나타냅니다. 릴리스 파이프라인은 템플릿이고 해당 릴리스 파이프라인의 구체적인 인스턴스는 릴리스입니다. 릴리스를 생성한 후에는 해당 릴리스를 배포할 수 있습니다.
릴리스를 생성하려면 다음을 수행합니다:
- 아래에 표시된대로 창의 오른쪽 상단에 있는 릴리스 생성 버튼을 클릭합니다.

2. 특별히 할 일이 없으므로 새 릴리스 생성 화면에서 기본값을 허용하고 생성을 클릭합니다. 현재 하나의 단계만 있으며, 배포할 빌드 아티팩트의 하나의 버전만 있습니다.

3. 몇 초 후에 아래에 표시된대로 릴리스가 생성되었다는 알림(녹색 바)을 받게 됩니다. 이제 릴리스의 세부 정보로 리디렉션되는 릴리스-1을 클릭하세요.

이제 릴리스를 생성하였으며, 배포할 준비가 되었습니다!
릴리스 수동 배포
A release is a set of instructions to perform on how to deploy a build. You’ve done all of that. Now it’s time to actually run those instructions and deploy code to an environment.
이전에 생성한 릴리스-1 릴리스에서 다음을 수행하세요:
- Deploy_to_webapp 단계를 선택하고 배포를 확인하세요. 그럴 경우 아래와 같이 상태가 진행 중으로 변경됩니다. 이 시점에서 빌드 파이프라인에서 소스 코드를 가져와 Azure WebApp 인스턴스로 푸시하고 있습니다.
이 단계에서는 백엔드에서 실행되는 에이전트에서 소스 코드를 복사하고 실제 배포 주기를 수행하는 작업을 시작합니다.

2. 진행 중인 단계를 클릭하세요. 콘솔 출력 영역에 표시된 로깅 정보를 볼 수 있습니다.

완료되면 단계는 아래와 같이 성공으로 표시되어야 합니다.

모든 것이 잘 진행되었다면, 배포가 완료되어 Azure Web App에 웹 앱이 게시된 것입니다!
배포된 Azure WebApp 검사
이제 전체 프로세스가 완료되었으므로 수고한 결실을 확인해보세요.
- Azure Portal에 로그인하여 릴리스 파이프라인의 대상으로 선택한 Azure WebApp으로 이동하고 아래에 표시된 URL을 복사하세요.

2. 이제 Azure 웹 앱의 URL을 제공하여 브라우저에 붙여넣으십시오. 이제 브라우저에서 전자 상거래 샘플 애플리케이션이 아래의 홈 페이지와 유사하게 로드되어야 합니다.

이제 모든 작업을 완료했습니다! 이제 GitHub 리포지토리에서 배포된 Azure 웹 앱을 완전히 자동화할 수 있습니다!
정리하기
이 프로젝트를 따라오셨다면 새로운 Azure DevOps 조직, 프로젝트, 빌드 파이프라인, 릴리스 파이프라인 및 릴리스를 생성했을 것입니다. 모든 테스트를 마쳤다면 기존에 생성된 조직을 삭제하여 Azure 리소스에 대한 요금이 부과되지 않도록 해야 합니다.
다음을 수행하십시오:
- 주 Azure DevOps 작업 영역으로 돌아갑니다.
- 왼쪽 하단에 있는 조직 설정을 클릭합니다.
- 개요 화면에서 삭제 버튼을 클릭합니다. 조직 삭제 아래에 있는 페이지 하단의 버튼입니다.
- 조직 이름을 입력한 다음 삭제를 클릭합니다. 이렇게 하면 방금 수행한 모든 작업이 제거됩니다.
결론
이 프로젝트에서 지침을 따랐다면 Azure DevOps에서 처음부터 CI/CD 파이프라인을 만들었을 것입니다. 이제 이 프로세스가 어떤 것인지에 대해 좋은 아이디어를 가지고 있을 것입니다.
Azure 파이프라인은 이 프로젝트에서 수행한 것보다 훨씬 더 깊이 들어갈 수 있지만, 이제 전체 프로세스에 대한 기본 지식을 갖추게 되었을 것입니다.