[CI/CD자동화 시리즈(1)]AWS EC2 Amazon Linux1에 Jenkins설치
IT/DevOps

[CI/CD자동화 시리즈(1)]AWS EC2 Amazon Linux1에 Jenkins설치

반응형

안녕하세요 오늘부터 차근차근 쿠버네티스의 배포 자동화 구축을 시리즈로 연재해 볼까 합니다.

그 첫번째가 Jenkins 설치 입니다. 배포 자동화를 위해 AWS에서는 AWS code series를 사용할 수 있지만 이는 베포 종류 중 canary 베포를 지원하지 않습니다.

* canary 베포란? [URL 추가 예정]

* 베포의 종류 [URL 추가 예정]

또한 아직까지는 AWS에 친화적이지 않은 고객도 많고 쿠버네티스를 사용하는 이유 중 하나가 vendor lockin 이 걸리지 않기 위해서 사용하는 이유가 있기 때문에 일반 Jenkins를 선택하였습니다.

Jenkins서버를 local에 설치하는 것 보다는 cloud에 설치하여 사용해보고자 AWS EC2에 Jenkins를 설치하기로 결정하였습니다.

자 그럼 대망의 첫번째 AWS EC2 AmazonLinux에 Jenkins설치를 시작해보겠습니다.

 

- AWS EC2 를 Amazon Linux1으로 생성 합니다. 

(생성할때 필요한 네트워크 및 방화벽 정보는 생략하겠습니다.)

 

- 생성 후 Amazon Linux OS 정보를 확인해보겠습니다.

$ cat /etc/*release

yum 으로 jenkins 설치를 할때 기본 패키지에 Jenkins가 포함되어 있지 않습니다.

따라서 yum 패키지 저장소에 Jenkins를 수동으로 등록해야합니다.

 

- 우선 yum update로 최신화 합니다.

$ sudo yum update

 

- wget으로 Jenkins 저장소를 yum저장소에 다운로드합니다.

$ sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo

 

- Jenkins 저장소 키를 등록합니다.

$ sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key 

 

- 패키지가 수동으로 저장소에 등록되었으니 yum install로 jenkins 설치 합니다.

$ sudo yum install jenkins

 

- jenkins를 실행 합니다.

$ sudo service jenkins start

java.lang.UnsupportedClassVersionError 를 확인할 수 있는데, 호환되는 java8 버전을 설치 해야합니다.

현재(2018.01.14) EC2 (Amazon Linux)가 Java7이 기본 버전이라 Java8로 버전업을 해야합니다.

 

- java 8 버전 insatll 

$ sudo yum install -y java-1.8.0-openjdk-devel.x86_64

- 설치 완료 후 java 버전을 변경합니다.

$ sudo /usr/sbin/alternatives --config java

- 버전 변경이 완료 되었으면 사용하지 않는 java7을 삭제합니다.

$ sudo yum remove java-1.7.0-openjdk

- 변경된 java 버전 확인

$ java -version

 

Jenkins설정이 완료 되었습니다. 일반적으로 jenkins설치 후 Nginx를 설치하여 프록시 설정으로 80포트(Nginx)로 들어온 접근을 8080(Jenkins)로 프록시를 해줍니다.

 

- Nginx 설치

$ sudo yum install -y nginx

- Nginx 설정을 열어서 80에서 8080으로 프록시 설정 합니다.

$ sudo vim /etc/nginx/nginx.conf

location 부분에 아래 코드를 추가 해줍니다.

proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwared-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;

- Nginx를 실행해보겠습니다.

$ sudo service nginx start

 

- AWS EC2 instance의 Security group 에서 inbound 설정중 80이 열려 있는지 확인 합니다.

저는 테스트를 위해 all 로 열어 놓았습니다.

 

- EC2 insatnce의 public IP를 확인하여 80로 접근해봅니다.

nginx error 가 발생합니다. 왜그럴까요?

- EC2 에서 nginx와 jenkins가 잘 실행되고 있는지 확인해 봅니다.

$ ps -ef | grep nginx 

$ ps -ef | grep jenkinx

Jenkins가 떠있지 않네요. 혹시 모르니 현재 떠있는 서비스 포트도 확인해 보도록 하겠습니다.

$ netstate -ntlp

Jenkins는 초기 기본포트가 8080 입니다. 역시 8080포트도 서비스되고 있지 않네요.

(아마 중간 과정에서 jenkins 가 정상 실행되지 않았거나 종료된것 같습니다.)

그럼 Jenkis를 다시 실행시켜 보겠습니다.

$ sudo service jenkins start

다시 EC2의 public IP로 접속해보니 Jenkins 관련된 화면이 나옵니다.

- 초기 패스워드는 EC2에 설치한 Jenkins의 아래 위치에서 확인이 가능합니다.

$ sudo cat /var/lib/jenkins/secrets/initialAdminPassword

패스워드를 입력하면 플러그인 설치 화면이 나옵니다.

젠킨스가 제안하는 초기 플러그인을 설치합니다.

 

이러한 플러그인을 설치하는 군요 

 

설치가 완료되면 admin 계정을 하나 생성합니다.

 

아래와 같이 설치가 완료 되었습니다.

 

- Jenkins설치가 완료 되면 Doker와 관련된 Plug in을 설치 합니다.

[jenkins 관리] - [플러그인 관리] - [설치된 플러그인 목록] 에서 아래 플러그인 2개를 설치합니다.

docker API plug in, docker-build-step

 

오늘은 Amazon Linux1에 젠킨스 설치 및 Docker를 이용하여 빌드/베포 자동화에 필요한 플러그인을 설치해보았습니다.

이어서 다음편에는 빌드를 하기위해 Amazon Linux1에 maven 설치하는 작업을 연재하도록 하겠습니다.

감사합니다.

반응형