GCP로 해보는 Jenkins를 활용한 CI_1
Google cloud Platform에 무료 VM(리눅스 Centos7)을 할당 받아서,
깃랩,젠킨스,웹팩, 모카를 연동해 보려고 합니다.
Jenkins는 소프트웨어를 작성, 테스트 및 배포하거나 배포하는 것과 관련된 모든 종류의 작업을 자동화하는 데 사용할 수있는 자체 포함 된 오픈 소스 자동화 서버입니다.
Jenkins는 기본 시스템 패키지 인 Docker에 설치하거나 Java Runtime Environment (JRE)가 설치된 모든 시스템에서 독립 실행 형으로 실행할 수도 있습니다.
먼저 Google Cloud Platform에 프로젝트를 생성하고, 거기에 Centos7 VM 인스턴스를 하나 만들 겁니다. 이후 여기에 Jenkins를 설치하며 하나씩 진행해 보도록 하겠습니다.
https://console.cloud.google.com 에 접속하여 로그인 후, 상단의 [프로젝트 선택]을 클릭하고 [새 프로젝트] 를 클릭합니다.
https://console.cloud.google.com 에 접속하여 로그인 후, 상단의 [프로젝트 선택]을 클릭하고 [새 프로젝트] 를 클릭합니다.
프로젝트 이름 입력 후, 만들기를 클릭하면, 프로젝트 생성을 완료합니다.
왼쪽 상단 메뉴 클릭->Computer Engine-> VM 인스턴스를 클릭한 후, [ +인스턴스 만들기] 버튼을 클릭합니다.
인스턴스 만들기 페이지에서, 머신 유형을 초소형(무료임)을 선택하고, 부팅디스크는 CentOS7을 선택합니다. 나머지는 다 기본 설정으로 건들지 않고, 하단의 만들기 버튼을 클릭합니다.
다음과 같이 인스턴스가 만들어졌습니다!
젠킨스를 사용하려면 jdk와 메이븐이 CentOs에 먼저 설치되어 있어야 합니다. 먼저 CentOS 인스턴스에 JDK를 설치해보겠습니다.
다음과 같이 SSH 연결에서 브라우저 창에서 열기를 클릭하여 Step1에서 생성한 인스턴스에 SSH로 접속하기 위한 클라우드 터미널을 엽니다.
쉘에 아래 명령어를 입력하여 openJDK 1.8 버전을 설치합니다.
xxxxxxxxxx
$ sudo yum install java-1.8.0-openjdk-devel.x86_64
아래 명령어를 입력하여 설치 결과를 확인합니다.
$ javac -version
javac 1.8.0_191
처음엔 JAVA_HOME에 아무런 값이 없을 겁니다.
xxxxxxxxxx
$ ehco $JAVA_HOME
$
환경변수를 설정하기 위해 javac의 위치를 확인합니다.
which 명령어로 javac 명령어의 위치를 찾습니다. 이 때 찾은 위치는 심볼릭 링크이기 때문에, 원본 파일 위치를 찾기 위해서 readlink 명령어를 사용합니다. 여기서는 /bin/javac 이전까지의 경로가 JAVA_HOME 이 됩니다.
xxxxxxxxxx
$ which javac
/usr/bin/javac
$ readlink -f /usr/bin/javac
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/bin/javac
$
환경변수를 설정하는 profile 파일을 vi 편집기로 엽니다.
$ sudo vi /etc/profile
파일의 가장 밑에 아래 내용 추가한 후 저장합니다.
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64
source 명령어를 이용해서 수정한 파일을 적용합니다.
source /etc/profile
제대로 적용되었는지 확인합니다.
xxxxxxxxxx
$ echo $JAVA_HOME
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64
$ $JAVA_HOME/bin/javac -version
javac 1.8.0_191
$
이제 Maven이라는 빌드 도구를 설치합니다.
사전준비로, 먼저 wget (웹 서버로부터 콘텐츠를 가져오는 프로그램, 명령어)을 설치합니다.
$ sudo yum install wget -y
본격적으로 설치해보겠습니다. 루트 경로에 tools라는 폴더를 만들고, 이 폴더로 이동합니다.
$ sudo mkdir /tools
$ cd /tools
이동한 경로에서, maven을 다운받고 설치합니다. ln 명령어로 심볼릭 링크를 걸고, 나중에 메이븐 버전이 변경되었을 때 대응할 수 있도록 합니다.
xxxxxxxxxx
$ sudo wget http://www-eu.apache.org/dist/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz
$ sudo tar xzf apache-maven-3.5.4-bin.tar.gz
$ sudo ln -s apache-maven-3.5.4 maven
Maven 환경변수 설정 스크립트 파일을 생성합니다.
$ sudo vi /etc/profile.d/maven.sh
파일 내의 다음 내용을 작성한 후 저장합니다.
export MAVEN_HOME=/tools/maven
export PATH=${MAVEN_HOME}/bin:${PATH}
작성 내용을 바로 적용합니다.
$ source /etc/profile.d/maven.sh
적용이 제대로 되었는지 확인합니다.
$ mvn -version
JDK, Mave을 설치했으니 이제 jenkins를 설치해 봐야겠죠?
그러나 먼저 저희가 만든 VM instance 방화벽 설정을 해줘야 합니다. 구글 클라우드 플랫폼은 VM 외부에 방화벽이 있으며, vm 내부의 os가 아닌 vm 외부에서 방화벽 설정을 제대로 해줘야 원하는 포트를 사용할 수 있습니다. 클라이언트가 브라우저로 jenkins를 접속할 수 있도록 하기 위해서, 먼저 방화벽을 설정해보겠습니다.
아래처럼 나의 인스턴스 목록에서, 사용하는 인스턴스의 [네트워크 세부정보 보기] 를 클릭합니다.
이후 [방화벽 규칙] -> [방화벽 규칙 만들기] 를 클릭합니다.
다음과 같이 설정하여 8080 포트를 사용할 수 있도록 합니다.
방화벽 규칙이 제대로 만들어졌나 확인합니다.
Jenkins 설칭를 위한 yum 레파지토리를 설정합니다.
$ sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
$ sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
이제 젠킨스를 설치합니다.
$ sudo yum install jenkins
포트 설정을 위해 jenkins 파일을 열고, 사용할 웹 포트를 설정합니다.
$ sudo vi /etc/sysconfig/jenkins
포트를 변경합니다. 위의 GCP 방화벽 설정을 8080으로 했다면, 따로 변경할 필요가 없습니다. 기본 포트가 8080 이기 때문입니다.
JENKINS_PORT="8080"
아까 GCP의 VM 외부에서 방화벽 설정을 했으나, 내부에서 한번 더 방화벽을 설정해 줍니다.
sudo firewall-cmd --permanent --zone=public --add-port=9090/tcp
sudo firewall-cmd --reload
Jenkins 시작
sudo service jenkins start
Jenkins 종료
sudo service jenkins stop
Jenkins 재시작
sudo service jenkins restart
CentOs에서 젠킨스를 항상 실행하게 설정
systemctl enable jenkins
먼저 service jenkins start로 젠킨스를 동작시키고, 웹 브라우저로 접속해봅니다.
접속 주소는 http://외부 IP:8080 입니다.
다음과 같이 최초 화면이 뜬다면 성공입니다.
Administrator password에는 다음의 명령어로 확인되는 코드를 입력해줍니다.
$ sudo cat /var/lib/jenkins/secrets/initialAdminPassword
코드 입력 후 continue 를 누르면 다음의 화면이 나올 텐데요, 젠킨스는 다양한 기능등릉 플러그인으로 제공하지만, 일단 여기서는 install suggested plugins로 설치를 진행합니다.
설치 완료!