웹사이트 검색

AWS EC2 Linux 인스턴스에서 Github 및 Jenkins를 사용하여 간단한 CI/CD 파이프라인 설정


이 문서에서는 Jenkins를 사용하여 간단한 CI/CD 파이프라인을 구현하는 단계를 살펴봅니다. 샘플 Java 코드를 사용하고 해당 코드를 Apache Tomcat 웹 서버에 .war 파일로 배포할 것입니다. Maven을 빌드 도구로 사용할 것입니다. 내 Github Repository(repo)에서 샘플 Java 코드를 찾을 수 있습니다. 계속 진행하기 전에 CI/CD 파이프라인 설정에 사용할 도구 및 기술의 기본 사항을 이해하겠습니다.

  1. EC2 인스턴스: EC2 인스턴스는 AWS 클라우드의 가상 머신(VM)입니다. EC2 인스턴스에 Apache Tomcat 및 Jenkins를 배포할 예정입니다.
  2. Apache Tomcat: Apache Tomcat은 오픈 소스 웹 서버입니다. 샘플 Java 애플리케이션을 Apache Tomcat에 .war 파일로 배포할 것입니다.
  3. Github: Github는 코드 호스팅 플랫폼입니다. 기본적으로 버전/소스 제어 관리 시스템입니다. 샘플 자바 코드를 Github에 올릴 예정입니다.
  4. Github Webhook: Github Webhook은 통합을 구축하고 설정하는 데 사용됩니다. 우리는 Github 저장소에서 새로운 커밋이 발생할 때마다 Jenkins 작업을 트리거하는 웹후크를 만들 것입니다.
  5. Jenkins: Jenkins는 무료 오픈 소스 자동화 도구입니다. 샘플 Java 애플리케이션 코드의 .war 파일을 빌드하고 Apache Tomcat 서버에 배포하는 작업을 Jenkins에서 작성할 것입니다.
  6. Maven: Maven은 주로 자바 프로젝트를 빌드하는 데 사용되는 빌드 자동화 도구입니다.

전제 조건

  1. AWS 계정(없으면 생성)
  2. Github에 대한 기본적인 이해.
  3. Jenkins에 대한 기본적인 이해.
  4. Linux 서버 및 명령에 대한 기본 이해

우리는 무엇을 할 것인가?

  1. EC2 인스턴스 생성
  2. 자바 설치
  3. Jenkins 설치
  4. Apache Tomcat 설정
  5. Github 저장소 포크
  6. Jenkins 액세스 및 구성
  7. .war 배포를 위한 Jenkins 작업 설정
  8. Github Repo에서 Webhook 설정
  9. 커밋할 때마다 자동 빌드 테스트

VM 또는 EC2 인스턴스 생성

EC2 인스턴스를 생성하려면 여기에서 제공되는 문서를 참조하세요.

여기에서 AWS 계정에 새 EC2 인스턴스를 생성했습니다. 이 인스턴스에는 Ubuntu 18 OS가 있습니다.

인스턴스가 실행되고 있음을 확인할 수 있습니다. 이 인스턴스를 사용하여 Java 또는 종속성과 Apache Tomcat 및 Jenkins도 설치합니다.

자바 설치

Ubuntu 18 시스템에 Java를 설치하려면 다음 명령을 사용할 수 있습니다. 다음 명령어는 자바 8을 설치합니다. 설치되면 버전도 확인할 수 있습니다.

sudo apt-get update
sudo apt install openjdk-8-jdk
java -version

젠킨스 설치

다음 명령을 사용하여 Jenkins를 인스턴스에 설치합니다.

sudo apt-get update
wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt-get update
sudo apt-get install jenkins

Jenkins를 설치했으면 다음 명령을 사용하여 시작하고 상태를 확인합니다.


sudo systemctl start jenkins #Start Jenkins
service jenkins status #Check Jenkins Status

다음 스크린샷에서 Jenkins 서비스가 시작된 것을 볼 수 있습니다. 이 Jenkins 서비스는 포트 8080에서 시작되었습니다.

Apache Tomcat 설정

아파치 톰캣 설치

Apache Tomcat을 다운로드하고 설치하기 전에 Apache Tomcat 패키지를 다운로드할 수 있는 디렉터리를 생성하겠습니다.

다음 명령을 사용하여 /opt에 디렉토리를 생성합니다.

cd /opt/
sudo mkdir Innovecture

다음 명령을 사용하여 디렉터리의 소유권을 변경합니다. Ubuntu 사용자가 Apache Tomcat 서비스를 시작할 수 있고 루트나 사용자 또는 sudo 권한을 사용할 필요가 없도록 소유권을 사용자 Ubuntu 및 그룹 Ubuntu로 변경하고 있습니다.


sudo chown -R ubuntu:ubuntu Innovecture
cd Innovecture/

다음 명령을 사용하여 Apache Tomcat을 다운로드하고 압축을 풉니다. 다른 버전의 Apache Tomcat을 사용하려면 다운로드하여 추출할 수 있습니다.


wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.31/bin/apache-tomcat-9.0.31.tar.gz
tar -zxvf apache-tomcat-9.0.31.tar.gz 
cd apache-tomcat-9.0.31/

다음 명령을 사용하여 Apache Tomcat에서 필요한 구성을 만듭니다. 수행해야 하는 구성은 다음 스크린샷을 참조하십시오. 다음 구성에서는 Apache Tomcat의 관리자 응용 프로그램에 로그인하는 데 사용할 수 있는 사용자 및 암호를 할당합니다. 나중에 이 자격 증명이 필요하므로 이 사용자 이름과 암호를 기록해 두십시오.

아파치 톰캣 구성

vim conf/tomcat-users.xml

다음 스크린샷을 참조하여 context.xml의 구성이 동일한지 확인하세요.

vim webapps/manager/META-INF/context.xml

conf 디렉토리 아래의 server.xml에서 Apache Tomcat이 실행되는 포트를 변경합니다. Jenkins 서비스가 이미 포트 8080에서 실행 중이므로 포트 8080을 8090으로 변경합니다.

vim conf/server.xml

또한 인터넷에서 서버에 액세스할 수 있도록 server.xml 파일의 localhost 구성을 서버의 IP로 변경합니다.

아파치 톰캣 시작

다음 명령을 사용하여 Apache Tomcat 서비스를 시작합니다.

bin/startup.sh

다음 스크린샷에서 Apache Tomcat 서비스가 포트 8090에서 실행되고 있고 포트 8080에서 Jenkins 서비스가 실행되고 있음을 확인할 수 있습니다. 시스템을 확인하려면 다음 명령을 사용하십시오.

netstat -tulpn 

Tomcat Manager 앱에 로그인

앞에서 지정한 자격 증명을 사용하여 Apache Tomcat의 관리자 응용 프로그램에 로그인할 수 있는지 확인하려면 Apache Tomcat http://IP-of-Apache-Tomcat:8090/manager의 URL을 누르십시오. conf/tomcat-users.xml에서 구성한 사용자 이름 tomcat-manager와 비밀번호를 입력하기만 하면 자격 증명 화면이 표시됩니다.

성공적으로 로그인하면 다음과 같은 화면이 나타납니다.

포크 Github 레포

아래에 언급된 내 저장소를 포크하거나 복제할 수 있습니다. 이 저장소에는 샘플 자바 코드가 포함되어 있습니다. 이 코드를 사용하거나 자체 저장소가 있는 경우 이를 사용할 수도 있습니다.

저장소 URL: https://github.com/shivalkarrahul/Innovecture.git

Jenkins 액세스 및 구성

Jenkins에 액세스하려면 URL http://IP-of-Jenkins:8080을 누르십시오.

화면에 따라 Jenkin 잠금 해제 및 제안된 플러그인 설치

Jenkin을 잠금 해제하고 제안된 플러그인을 설치하면 다음 화면이 표시됩니다.

구성에 필요한 사용자 이름과 암호를 입력하고 저장을 클릭하고 계속 진행해야 합니다.

다시 시작하지 않고 Github 인증 플러그인 설치

로그인에 성공하면 Jenkins 관리 > 플러그인 관리로 이동합니다. 사용 가능 탭에서 git을 검색합니다. \GithubAuthentication\ 플러그인을 선택하고 다시 시작하지 않고 설치를 클릭합니다.

다시 시작하지 않고 Maven 통합 플러그인 설치

같은 방법으로 maven 통합 플러그인을 설치하고 다시 시작하지 않고 설치하십시오.

다시 시작하지 않고 컨테이너 플러그인에 배포 설치

.war 파일을 Apache Tomcat에 자동으로 배포하려면 \컨테이너에 배포\ 플러그인이 필요합니다. git 및 maven 플러그인을 설치한 것과 같은 방식으로 \Deploy to container\ 플러그인을 설치합니다.

.war 배포를 위한 Jenkins 작업 설정

이제 자유형 작업을 만들 차례입니다. 기본 대시보드로 이동하여 작업 생성을 클릭합니다. 자유형 작업을 선택하고 계속 진행합니다.

일반 탭에서 Github Repo 추가

일반 탭에서 \Github project\ 체크박스를 선택하고 소스 코드 리포지토리의 URL 또는 내 리포지토리에서 포크한 리포지토리의 URL을 추가합니다.

소스 코드 관리에서 Github URL 추가

소스 코드 관리 탭에서 \Git\ 라디오 버튼을 클릭하고 아래와 같이 저장소 URL을 추가합니다. 내 리포지토리는 비공개가 아니고 공개이므로 자격 증명을 추가할 필요가 없습니다.

Github 후크 트리거 선택

빌드 트리거 탭에서 \GitSCM 폴링을 위한 GitHub 후크 트리거를 선택합니다.

빌드 단계 추가

빌드 환경에서 빌드 단계 추가를 클릭하고 \Invoke top-level Maven targets\를 선택합니다.

목표의 경우 정리 및 패키지를 지정하고 작업을 저장합니다.

테스트 빌드

코드를 가져와 빌드할 수 있는지 작업을 테스트하려면 지금 빌드를 클릭하십시오.

배포 후 빌드 작업 추가

이제 코드가 풀링되고 빌드되고 있음을 확신하므로 빌드 후 작업을 추가할 준비가 되었습니다. 빌드 후 작업을 추가하려면 빌드 환경에서 빌드 후 작업을 클릭하고 \컨테이너에 전쟁 배포\를 선택합니다.

그런 다음 자격 증명과 함께 Tomcat 서버의 URL을 추가합니다. 자격 증명을 추가하려면 \추가\를 클릭하고 표시되는 단계를 따르고 작업을 저장합니다.

테스트 수동 빌드

이제 작업이 Apache Tomcat 서버에서 코드를 풀, 빌드 및 배포할 수 있는지 테스트합니다. 지금 빌드를 클릭하여 작업을 테스트합니다.

위의 스크린샷에서와 같이 수동 빌드가 성공적으로 완료되어 Apache Tomcat 서버에 배포되었습니다.

전쟁이 실제로 전개되었는지 테스트하려면 Apache Tomcat http://IP-of-Apache-Tomcat:8090/manager을 눌러 관리자 애플리케이션에 액세스합니다.

여기에서 web_ex.war 파일이 Apache Tomcat 서버에 성공적으로 배포되었음을 확인할 수 있습니다.

테스트 샘플 Java 애플리케이션

자바 애플리케이션이 실행 중인지 테스트하려면 URL http://IP-of-Apache-Tomcat:8090/web_ex을 누르세요.

Github Repo에서 Webhook 설정

웹훅 만들기

탭에서 아기 책을 만들려면 그녀의 웹사이트를 방문하여 귀하의 계정에 로그인하고 아래 언급된 단계를 따르십시오.

저장소 설정으로 이동하여 왼쪽 패널에서 웹후크를 클릭한 다음 \웹후크 추가\를 클릭합니다.

페이로드 URL에 http://Jenkins-URL:8080/github-webhook를 추가합니다.

이 웹훅을 트리거할 이벤트를 선택하거나 모든 이벤트에서 Jenkins 작업을 트리거하려는 경우 \모두 보내기\를 선택하고 웹훅 업데이트를 클릭하여 저장합니다.

커밋 시 자동 빌드 테스트

이제 자동 빌드 작업을 테스트할 준비가 되었습니다.

Jenkins 작업이 커밋할 때마다 github 리포지토리에서 코드를 가져오는지 테스트하려면 다음 명령을 사용합니다.

리포지토리를 로컬로 복제하기 위해 다음 명령을 사용했습니다. 자신의 보고서가 있는 경우 로컬 시스템으로 이동하십시오.

git clone https://github.com/shivalkarrahul/Innovecture.git
cd Innovecture/

푸시할 수 있도록 리포지토리를 일부 변경합니다. 여기에 원격 저장소에 푸시할 새 파일을 로컬에 추가했습니다.

touch README.md

git의 사용자 이름과 이메일 ID를 구성하려면 다음 명령어를 사용하세요.

git config user.name "Rahul Shivalkar"
git config user.email "[email "

변경 사항을 커밋하고 푸시하려면 다음 명령을 사용하십시오.

git commit -m "Test Commit"
git push

Github의 저장소에 변경 사항을 푸시하는 즉시 Github Webhook에 추가한 Jenkins 작업이 트리거됩니다.

작업의 \폴링 로그\에서 이를 확인할 수 있습니다. 동일한 내용은 다음 스크린샷을 참조하세요.

작업의 콘솔 출력으로 이동하면 작업이 성공적으로 실행되고 war가 Apache Tomcat에 배포되었음을 확인할 수 있습니다.

재시험

이제 코드를 변경하여 최신 코드가 배포되었는지 여부를 테스트합니다. 브라우저에 표시되는 메시지를 변경하겠습니다.

자체 보고서를 사용하는 경우 코드에서 필요한 변경을 수행합니다. 여기에서는 브라우저에 메시지를 인쇄하는 샘플 index.jsp 파일을 변경합니다.

vim src/main/webapp/index.jsp

이제 변경된 코드가 반영되는지 확인해 봅시다.

다음 명령을 사용하여 코드에서 변경한 사항을 커밋합니다.

git add src/main/webapp/index.jsp
git commit -m "Changed Code to Hello World New!”
git push

샘플 애플리케이션에 액세스하려면 Apache Tomcat URL http://IP-of-Apache-Tomcat:8090/web_ex을 누르십시오.

최신 코드가 빌드되어 Apache Tomcat에 배포되었음을 확인할 수 있습니다. 이는 애플리케이션이 성공적으로 배포되었고 파이프라인도 성공적으로 트리거되었음을 의미합니다.

내 이전 코드가 \Hello World!\만 표시되고 이제 index.jsp를 변경하고 커밋하면 최신 애플리케이션에 \Hello World New!\가 표시됩니다.

결론

이 문서에서는 Github 저장소에서 코드를 가져와 커밋할 때마다 Apache Tomcat 서버에 배포할 수 있는 간단한 CI/CD 파이프라인을 만드는 단계를 살펴봤습니다. Jenkins, Apache Tomcat, Java, 플러그인을 Jenkins에 설치하는 단계도 보았습니다.