티스토리 뷰
<참조> https://azuredevopslabs.com/labs/vstsextend/Jenkins/
|
개요
Jenkins는 팀이 여러 플랫폼에서 지속적으로 애플리케이션을 빌드 할 수 있도록 하는 매우 인기있는 Java 기반 오픈 소스 CI (지속적 통합) 서버이다. Azure Pipeline에는 Windows, Linux 및 Mac을 포함한 모든 플랫폼에서 모든 애플리케이션을 빌드하는 기능이 포함되어 있다. 그러나 이미 Jenkins for CI를 사용하거나 선호하는 팀을 위해 Jenkins와 잘 통합된다.
Jenkins를 Azure Pipelines와 통합하는 방법에는 두 가지가 있다.
- 한 가지 방법은 Jenkins에서 CI 잡을 별도로 실행하는 것이다. 여기에는 Jenkins의 CI 파이프라인 구성과 소스 코드가 리포지토리 또는 브랜치에 푸시될 때 CI 프로세스를 호출하는 Azure DevOps의 웹 후크가 포함된다.
- 다른 방법은 Jenkins CI 잡을 Azure 파이프라인 내에 래핑(wrap)하는 것이다. 이 접근방식에서, Jenkins 태스크를 사용하여 Jenkins에서 CI 잡을 호출하고 Jenkins가 생산한 아티팩트를 다운로드하여 게시하도록 Azure Pipeline에서 빌드 정의를 구성할 것이다.
배포를 위해 접근 방식에 관계 없이 이러한 빌드 아티팩트를 선택하도록 Azure CD 파이프라인을 구성 할 수 있다. 두 가지 접근 방식 모두 장단점이 있지만 후자의 접근 방식에는 여러 가지 이점이 있다.
- 작업 항목에서 소스 코드, 빌드 및 릴리스까지의 종단 간 추적성
- 빌드가 성공적으로 완료되면 CD (지속적 배포) 트리거
- 브랜치 전략의 일부로서의 빌드 실행
이 랩에서 다루는 것
이 랩에서는 접근 방식을 모두 다루며 다음 태스크가 수행된다.
- Azure Marketplace에서 제공되는 Jenkins 템플릿을 사용하여 Azure VM에서 Jenkins 프로비전
- Maven 및 Azure DevOps와 함께 작동하도록 Jenkins 구성
- Jenkins에서 빌드 잡 만들기
- Jenkins와 통합하도록 Azure Pipeline 구성
- 빌드 아티팩트를 배포하도록 Azure Pipelines에서 CD 파이프라인 구성
시작하기 전에
1. Microsoft Azure 계정 : Azure 랩에 대해 유효한 활성 Azure 계정이 필요하다. 계정이 없는 경우 무료 평가판에 등록 할 수 있다.
2. 무료 SSH 및 Telnet 클라이언트인 Putty
2. Azure DevOps 데모 생성기에서 MyShuttle 템플릿을 사용하여 Azure DevOps 프로젝트를 설정한다. MySQL 백엔드에 연결하는 Java 웹 앱을 사용할 것이다.
Jenkins VM 설정하기
1. Jenkins를 구성하기 위해 Azure Marketplace에서 사용할 수 있는 Jenkins VM 이미지가 사용될 것이다. 이것은 Azure와 함께 작동하도록 구성된 툴과 플러그인과 함께 Ubuntu Linux VM에 최신의 안정적인 Jenkins 버전을 설치할 것이다. 시작하려면 아래의 Deploy to Azure 버튼을 클릭한다.
참고: 만들기를 클릭한 후 인증 유형으로 암호를 선택한다. 사용자 이름과 암호를 기록해 둔다.
2. Jenkins VM이 프로비저닝되면 VM의 개요 페이지로 이동하여 공개 IP 주소를 기록해 둔다. 이 정보는 Putty에서 Jenkins VM에 연결하는 데 필요하다.
참고 : Jenkins는 기본적으로 HTTP를 사용하여 포트 8080에서 리스닝 한다. 안전한 HTTPS 연결을 구성하려면 SSL 인증서가 필요하다. HTTPS 통신이 구성되지 않은 경우, "Man-in-the-middle" 공격으로 인해 서명 자격 증명이 유출되지 않도록 하는 가장 좋은 방법은 SSH 터널링을 사용하여 로그인하는 것이다. SSH 터널은 SSH 프로토콜 연결을 통해 생성된 암호화된 터널로 보안되지 않은 네트워크를 통해 암호화되지 않은 트래픽을 전송하는 데 사용할 수 있다.
3. SSH 터널을 시작하려면 명령 프롬프트에서 다음 명령을 실행해야 한다. SSH 터널은 서비스를 릴레이할 수 있는 호스트와 원격 컴퓨터 사이에 보안 연결을 생성한다. 이 명령이 성공하면 로컬 컴퓨터의 포트 8080에 있는 원격 Jenkins에 액세스할 수 있을 것이다.
참고: 8080에 웹 사이트가 있는 경우 다른 포트를 선택한다.
putty.exe -ssh -L 8080:localhost:8080 <username>@<ip address>
참고 : 위 명령을 실행하려면 명령 프롬프트에서 선택한 경로에 Putty.exe를 배치하거나 명령에 Putty.exe의 전체 경로를 제공해야 한다.
4. Jenkins VM을 프로비저닝하는 동안 제공한 사용자 이름과 비밀번호로 로그인 한다.
5. 연결에 성공하면 호스트 컴퓨터에서 브라우저를 열고 URL http://localhost:8080으로 이동한다. Jenkins의 Sign in 페이지가 표시된다.
(http://localhost:8080으로 접속이 안되어 해당 공인주소를 통해 접속한다.)
6. 보안상의 이유로 애플리케이션 자격 증명은 VM의 독립 실행형 파일에 저장된다. 이 자격 증명을 검색하여 젠킨스에 로그인하기 위해 제공해야 할 것이다. Putty 터미널로 돌아가 다음 명령을 입력하여 인증 정보 파일을 열고 사용자 이름과 암호를 복사한다.
sudo cat /home/bitnami/bitnami_credentials
7. 브라우저로 돌아가서 복사한 사용자 이름과 비밀번호를 붙여 넣어 Jenkins에 로그인 한다.
플러그인 설치 및 구성
1. 이제 이 랩에 필요한 Maven 및 VSTS (Azure DevOps!로 이름이 변경될 예정!) 플러그인을 설치한다. Jenkins 홈페이지에서 Manage Jenkins를 클릭하고 Manage Plugins를 선택한다. Available 탭을 선택하고 team services를 검색한다.
2. VS Team Services Continuous Deployment 플러그인을 선택하고 Install without restart를 선택한다.
3. Manage Plugins를 선택하고 Available 탭을 선택한 다음 maven-plugin을 검색한다.
4. Maven Integration Plugin을 선택하고 Install without restart 버튼을 선택하여 플러그인을 설치한다.
5. 플러그인이 설치되면 Manage Jenkins로 돌아가 Global Tool Configuration 옵션을 선택한다.
참고: Jenkins는 Maven에 대한 즉각적인 지원을 제공한다. 메이븐은 아직 설치되지 않았기 때문에 공유 폴더에 위치한 tar 파일을 추출해 수동으로 설치할 수 있다. 또는 Global Tool Configuration 화면에서 Install automatically 옵션을 선택하면 빌드 잡에 필요한 경우 Jenkins가 Apache 웹 사이트에서 메이븐을 다운로드하여 설치한다.
6 . Maven을 설치하려면 Install automatically 옵션을 선택하고 Apply 버튼을 선택한다. 이 랩 작성 당시 Maven의 최신 버전은 3.6.3 이다.
7. 홈 페이지로 돌아가려면 Back to Dashboard 버튼을 선택한다. 설정이 완료되었다. 가서 새 CI 잡을 만들어 보겠다.
Jenkins에서 새 빌드 잡 만들기
1. Jenkins 홈페이지에서 New Item 링크를 클릭한다. 빌드 정의의 이름을 제공하고 Maven 프로젝트를 선택한 후 OK를 클릭한다.
2. 이제 아래로 스크롤하여 Source code Management 섹션으로 이동한다. Git를 선택하고 Azure DevOps Git repo의 복제 URL을 http://dev.azure.com/{your org name}/{team project name}/_git/MyShuttle 형식으로 제공한다. 일반적인 것이 아닌 소스 코드 관리에서 Git이 보이지 않으면 Git 플러그인을 설치/실행해야 한다.
3. 여러분의 Azure 리포지토리는 사설일 가능성이 매우 높다. 공용 리포지토리가 없는 경우 리포지토리에 액세스할 수 있는 자격 증명을 제공해야 한다. 인증서가 없거나 자격 증명을 기억하지 못하는 경우 Azure Repos로 이동하여 Clone 옵션을 선택한다. Generate Credentials을 선택하고 Username 및 Password를 기록해 둔다.
4. 새 자격 증명을 추가하는 Add | Jenkins 옵션을 선택한다.
이전 단계에서 생성한 Username 및 Password를 입력하고 Add 버튼을 클릭하여 마법사를 닫는다.
5. 드롭 다운에서 이전 단계에서 생성한 자격 증명을 선택한다. 오류 메시지가 사라진다.
6. 이 애플리케이션의 소스 코드는 단위 테스트와 UI 테스트가 모두 있다. 우리는 지금 UI 테스트를 실행할 준비가 되지 않았다. 그래서 우리는 단위 테스트만 실행하도록 명시할 것이다. 빌드 섹션으로 스크롤하여 Goals and options 필드에 텍스트 package -Dtest=FaresTest,SimpleTest를 제공한다.
(package -Dtest=FaresTest,SimpleTest를 제공하고 빌드를 하면 다음과 같은 에러가 발생한다. 해당값을 제거하고 빌드를 시행한다.)
[ERROR] Unknown lifecycle phase "package -Dtest=FaresTest,SimpleTest". You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>. Available lifecycle phases are: validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-clean, clean, post-clean, pre-site, site, post-site, site-deploy. -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
Waiting for Jenkins to finish collecting data
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
7. 빌드가 완료되면 수행할 액션을 지정할 수 있다. 예를 들어 빌드 아티팩트를 보관하거나, Azure CD 파이프라인을 트리거하거나, Azure App Service에 직접 배포하는 등을 수행할 수 있으며, 우리는 Post-build Actions에서 Archive the artifacts 옵션을 선택할 것이다.
참고 : 액션 섹션과 매우 유사한 Post-build steps 섹션도 있다. post-build steps/actions에 구성된 태스크는 모든 빌드 단계가 실행 된 후에 실행된다.
8. Files to archive 텍스트 상자에 target/*.war, *.sql을 입력한다. Save 버튼을 선택하여 설정을 저장하고 프로젝트 페이지로 돌아간다.
9. 이제 구성이 완료되었다. Ad-hoc 빌드를 시작하려면 Build Now 옵션을 선택한다. 빌드 진행률은 Build History 섹션의 왼쪽 창에 표시된다.
10. 빌드 세부 사항 및 빌드 아티팩트 목록을 보려면 Build History 섹션에 표시된 빌드 번호를 선택한다.
11. 빌드 정의에 포함 된 단위 테스트의 결과를 보려면 Test Result 옵션을 선택한다.
다음으로 코드가 Azure Repos에 푸시 될 때 Jenkins CI 잡을 트리거하는 데 사용할 수 있는 두 가지 옵션을 살펴 본다.
Azure DevOps에서 서비스 후크를 사용하도록 Jenkins 머신 준비하기
Azure DevOps의 서비스 후크가 작동하려면 Jenkins 머신이 포트 8080에 대한 수신 연결을 수락해야 한다.
1. https://portal.azure.com/을 열고 Jenkins로 가상 머신에 액세스 한다.
2. 설정 탭에서 "Networking"링크를 클릭하고 "Add inbound port rule" 버튼을 클릭한다.
3. 포트 8080에 대한 인바운드 규칙을 설정한다.
4.Jenkins 페이지로 이동하여 User | Configure으로 간다. API 토큰 섹션에서 Add new token를 클릭하고 이름을 지정하고 Generate을 클릭한다. 생성된 토큰을 기록해 둔다. 이 토큰을 Azure DevOps에서 Jenkins 암호로 사용할 것이다.
2편에서 계속
다음 내용을 이어서 자체적으로 진행할 것이 아니라면 위에서 생성한 Jenkins VM을 stop 시켜 과금 발생을 방지한다. |
'Azure와 함께 하는 DevOps' 카테고리의 다른 글
58. Azure Function을 위한 CI/CD 파이프라인 설정하기 (1) | 2020.11.16 |
---|---|
57. Jenkins CI를 위한 CD 파이프 라인 구성하기 2편 (0) | 2020.11.09 |
55. 배포 그룹을 사용하여 Azure VM에 배포하기 (0) | 2020.10.26 |
54. Azure 파이프라인으로 머신 러닝 프로젝트용 CI/CD 작동 시키기 (0) | 2020.10.19 |
53. Azure에 Java 기반 톰캣 애플리케이션 배포하기 (0) | 2020.10.11 |