CI/CD 잠금 해제: Ubuntu에 Jenkins 설치 단계별 안내

당신은 많은 단계와 소프트웨어로 인프라에 코드를 배포하는 데 많은 시간을 소비하고 있습니까? 걱정하지 마세요, 가장 널리 사용되는 오픈 소스 도구인 Jenkins를 설치하는 방법을 배울 수 있는 올바른 곳에 있습니다.

이 튜토리얼에서는 Ubuntu 기기에 Jenkins를 설치하여 버튼을 클릭하여 코드를 빌드하고 배포하는 방법을 배울 수 있습니다.

계속 읽고 설치를 시작하세요!

전제 조건

이 글은 단계별 튜토리얼입니다. 따라하기 위해 Ubuntu 기기가 있는지 확인하십시오. 이 튜토리얼은 Ubuntu 18.04apache가 설치된 기기를 사용합니다.

Ubuntu 기기에 Java 버전 11 설치하기

Jenkins는 지속적 통합 (CI) 및 지속적 배포 (CD) 도구로, 여러 servlet 컨테이너에서 실행할 수 있습니다. 예를 들어 Apache tomcat 또는 glassfish 등이 있습니다. 그러나 이 데모에서는 Jenkins를 내장된 Java 서블릿 컨테이너 서버에서 실행할 것입니다.

Jenkins와 함께 사용할 수 있는 여러 Java 구현체가 있지만, 이 튜토리얼에서는 OpenJDK가 가장 인기 있습니다. 이를 설치하고 사용할 것입니다.

1. 즐겨 사용하는 SSH 클라이언트를 사용하여 Ubuntu 기계에 로그인합니다.

2. 다음으로, 다음 명령을 실행하여 ~/install_jenkins_demo라는 디렉토리를 생성하고 해당 디렉토리로 이동합니다.

mkdir ~/install_jenkins_demo
cd ~/install_jenkins_demo

3. 다음 명령을 실행하여 기계에 Java를 설치합니다: apt install.

# 설치 중인 Java 버전: Java SE 11 (LTS)
sudo apt install default-jdk 
Installing Java Version: Java SE 11 (LTS)

4. 아래 명령을 실행하여 시스템에 설치된 Java 버전을 확인합니다. 이렇게 함으로써 Java가 성공적으로 설치되었는지 확인할 수 있습니다.

# Java 버전을 확인하여 Java 설치를 확인합니다.
java -version
Checking the Version of Java to verify Java installation

Ubuntu 18.04 LTS 인스턴스에 Jenkins 설치

이제 Ubuntu 머신에 Java가 설치되었으므로 머신에 Jenkins를 설치할 시간입니다. Jenkins를 설치하는 방법은 다른 패키지를 설치하는 방법과 매우 유사합니다.

여전히 SSH 클라이언트에 로그인되어 있는 것으로 가정합니다:

1. 먼저 시스템 패키지를 업데이트하려면 apt update 명령을 실행합니다.

sudo apt update

2. 다음으로, 아래 wget 명령을 사용하여 Jenkins 공개 키를 시스템에 추가합니다.

공개 키를 추가하면 Jenkins 사이트가 Jenkins 공식 저장소나 필요한 패키지를 다운로드할 수 있습니다.

wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -

3. 다음 명령을 실행하여 Jenkins 공식 저장소를 시스템에 추가하고 시스템을 업데이트합니다.

# Jenkins 공식 저장소를 시스템에 추가
sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > \
    /etc/apt/sources.list.d/jenkins.list'
# 패키지 업데이트
sudo apt-get update

4. 이제 아래 명령을 실행하여 Jenkins 패키지를 설치합니다.

# Jenkins 패키지 설치
sudo apt-get install Jenkins
Installing the Jenkins package on an ubuntu machine

5. 마지막으로, 아래의 service 명령을 실행하여 Jenkins 서비스의 상태를 확인합니다. # 우분투 머신에서 Jenkins 서비스 유효성 검사 service jenkins status

# 우분투 머신에서 Jenkins 서비스 유효성 검사
service jenkins status

아래에서 확인할 수 있듯이, 상태가 Jenkins 서비스가 활성화되었습니다.

Verifying the status of Jenkins service

Jenkins 인스턴스 구성

Jenkins 설치 절반 정도 진행했습니다. 하지만 실제로 사용하기 전에 기본적인 설정을 해야 합니다. 어떻게 해야 할까요? Jenkins 설정의 첫 번째 단계는 새로 설치한 Jenkins를 잠금 해제하는 것입니다.

아직 SSH 클라이언트에 로그인되어 있는 것으로 가정합니다:

1. 즐겨 사용하는 브라우저를 열고 서버의 IP 주소 뒤에 포트 8080을 붙여서 jenkins-ip:8080와 같이 이동합니다. 링크로 이동한 후 관리자 암호를 제공하여 Jenkins를 잠금 해제해야 합니다. 관리자 암호는 서버의 /var/lib/jenkins/secrets/initialAdminPassword 디렉토리에 저장되어 있습니다(두 번째 단계).

Unlocking Jenkins Instance

2. 아래의 cat 명령을 실행하여 서버의 /var/lib/jenkins/secrets/initialAdminPassword 디렉토리에서 관리자 암호를 추가합니다.

cat /var/lib/jenkins/secrets/initialAdminPassword

아래에서 볼 수 있듯이 출력의 큰 문자열이 관리자 비밀번호입니다. Jenkins를 잠금 해제하는 데 필요하므로 관리자 비밀번호를 기록해 두세요(세 번째 단계).

Checking the Initial Admin Password

3. 웹 브라우저(Jenkins 잠금 해제 페이지)로 돌아가서 두 번째 단계에서 기록한 관리자 비밀번호를 입력합니다.

Jenkins를 잠금 해제하면 브라우저가 페이지로 리디렉션되어 Jenkins 인스턴스를 플러그인으로 사용자 정의할 수 있는 페이지로 이동합니다 (4단계).

4. Jenkins 사용자 정의 페이지에서 제안된 플러그인 설치 옵션을 클릭합니다.

Jenkins 플러그인은 Jenkins와 통합되어 Git 플러그인과 같은 작업을 수행할 수 있는 타사 도구입니다. Git 플러그인을 사용하면 Git 리포와 연결하고 Git 명령을 실행할 수 있습니다.

Installing the Jenkins Plugin

5. 아래에 표시된대로 관리자 사용자 세부 정보를 입력하고 저장하고 계속을 클릭하여 관리자 사용자를 생성합니다. 이 관리자 사용자를 사용하면 Jenkins UI 대시보드 또는 Jenkins 인스턴스에서 작업할 수 있습니다.

저장하고 계속을 클릭하면 5단계에서 보여지는 인스턴스 구성 화면이 표시됩니다.

Jenkins에는 기본적으로 사용자명/비밀번호 (admin: admin)로 생성된 관리자 사용자가 있지만 사용자 정의 관리자 사용자를 만들지 않으려는 경우 관리자로 건너뛸 수도 있습니다.

Creating the First Admin user

6. 마지막으로 저장하고 완료를 클릭하여 인스턴스 구성을 저장합니다.

인스턴스 구성을 통해 사용할 Jenkins URL을 지정할 수 있으며, 이 경우 기본 URL (즉, 서버-아이피:8080)를 사용합니다.

Configuring the Jenkins Instance
Jenkins Running successfully on Port 8080

Jenkins 인스턴스의 기본 포트 변경하기

이전에 기본적으로 Jenkins가 8080 포트에서 실행된다는 것을 배웠습니다. 이는 괜찮습니다. 그러나 apache나 NGINX와 같은 다른 애플리케이션을 동일한 포트에서 실행해야 하는 경우에는 어떻게 해야 할까요? 걱정하지 마세요! Jenkins의 기본 포트(8080)를 변경하여 Jenkins 인스턴스를 다른 포트에서 실행할 수 있습니다.

1. 선호하는 텍스트 편집기에서 /etc/default/Jenkins 파일을 열고 기본 포트를 8080에서 9090으로 변경한 후 변경 사항을 저장합니다.

Changing the Default Jenkins Port

2. 그다음, 아래 명령을 실행하여 Jenkins를 재시작하여 업데이트된 구성이 적용되도록 합니다.

sudo systemctl restart jenkins

3. 마지막으로, 아래와 같이 포트를 9090으로 변경하여 Jenkins URL로 이동합니다.

Jenkins Running successfully on Port 9090

SSL 인증서를 사용하여 Jenkins를 안전하게 실행하기

이제 Jenkins 인스턴스가 완벽하게 9090 포트에서 실행됩니다. 그러나 안전한가요? 아닙니다. SSL 인증서를 활성화하여 Jenkins 인스턴스를 보호하고 공격자에게 침해되지 않도록 합니다.

SSL 인증서는 주로 외부 인증 기관에서 인증서를 사용할 수 없을 때 로컬 머신에서 테스트하는 데 사용됩니다.

Jenkins 인스턴스를 보호하려면 다음을 수행합니다:

1. 아래 각 명령을 실행하여 인증서를 저장할 ~/certificates 디렉토리를 생성하고 해당 디렉토리로 이동합니다.

mkdir ~/certificates
cd ~/certificates

2. 이제 다음 명령을 실행하여 openssl 명령을 사용하여 인증서 서명 요청 (CSR) 및 개인 키를 생성합니다.

openssl req -x509 -newkey rsa:4096 -keyout apache.key -out apache.crt -days 365 -nodes
Generating a CSR and private key

3. 다음 명령을 실행하여 다른 디렉토리 (/etc/apache2/ssl)를 만들고 ~/certificates/ 디렉토리에서 인증서를 /etc/apache2/ssl 디렉토리로 이동합니다.

mkdir /etc/apache2/ssl
mv ~/certificates/* /etc/apache2/ssl/.

4. 기본 SSL Apache 사이트 구성 파일(/etc/apache2/sites-available/default-ssl.conf)을 열고 아래 코드를 추가합니다. 반드시 <my-server-name>을(를) 실제 서버 이름으로 바꿔주세요.

아래 코드에서는 이전에 SSL 인증서를 복사한 위치(인증서 키 및 파일)를 지정합니다. 또한, Jenkins가 포트 9090으로 리디렉션하도록 하려면 ProxyPass 인자를 추가하고 ProxyPreserveHost를 활성화합니다.

ServerName <my-server-name>
SSLCertificateFile    /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:9090/
ProxyPassReverse / http://127.0.0.1:9090/
Updating default SSL Apache site configuration file

5. 이제 아래의 각 명령을 실행하여 SSL 모듈을 활성화하고 수정한 사이트를 활성화하고 Apache 서비스를 다시 시작합니다.

# SSL 연결을 사용할 수 있도록 SSL 모듈을 활성화합니다.
sudo a2enmod ssl proxy proxy_http proxy_balancer
# 수정한 사이트를 활성화합니다 (4단계)
sudo a2ensite default-ssl.conf
# Apache 서비스를 다시 시작합니다
sudo service apache2 restart

6. 마지막으로 Jenkins 인스턴스로 이동하되, 이번에는 아래에 표시된대로 HTTPS를 사용하십시오.

Jenkins가 HTTPS 포트에서 SSL 연결로 성공적으로 열리는 것을 볼 수 있습니다. 안전하지 않음 메시지가 표시되는 경고 기호를 보더라도 걱정하지 마십시오. 자체 서명된 인증서(귀하가 생성한)가 아닌 인증 기관에서 생성하지 않았기 때문에 해당 경고가 표시됩니다.

Accessing Jenkins Instance with SSL connections on HTTPS port

결론

이 튜토리얼에서는 Ubuntu 머신에 Jenkins를 설치하는 방법과 안전하게 Jenkins 인스턴스에 액세스할 수 있는지를 배웠습니다.

이제 Jenkins를 사용하여 게임을 어떻게 개선할 계획입니까? 웹 배포를 자동화하거나 Jenkins CI CD 파이프라인을 만들어 소프트웨어 개발 프로세스를 개선하실 계획인가요?

Source:
https://adamtheautomator.com/install-jenkins/