운좋게 사이드 프로젝트를 진행하며 인프라 구성부터 CI/CD까지 구성해볼수 있는 좋은기회가 생겨서 이렇게 포스팅을 남기려고합니다.
AWS Linux 를 사용하여 Jenkins설치를 진행하도록 하겠습니다.
$ cat /etc/*release
NAME="Amazon Linux"
VERSION="2"
ID="amzn"
ID_LIKE="centos rhel fedora"
VERSION_ID="2"
PRETTY_NAME="Amazon Linux 2"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2"
HOME_URL="https://amazonlinux.com/"
Amazon Linux release 2 (Karoo)
Jenkins 설치에 앞서 update를 먼저 진행하도록 합니다.
$ sudo yum update -y
그다음 Jenkins 설치를 진행하려고 합니다. Jenkins 공식 홈페이지에 나와있는 설치가이드 대로 설치해보도록 하겠습니다.
$ sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
$ sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
$ yum install -y jenkins
설치후 현재 jenkins의 서비스의 상태를 확인했더니
$ systemctl status jenkins.service
다음과 같은 Error로인해 Jenkins 구동에 실패했다는 내용이었다. 이유는 즉 자바가 설치가 안되어있었다.
추가적으로 Java 11 amazon corretto를 설치한다음 restart시켰다.
$ sudo yum install java-11-amazon-corretto
$ systemctl restart jenkins.service
Service가 제대로 올라갔다면 xxx.xxx.xxx.xxx:8080으로 접근시 Jenkins Getting Started화면을 볼 수 있습니다.
하지만 저희는 바로 Jenkins를 사용하지 않고 앞단에 NginX를 두고 reverseProxy를 활용하여 사용하도록 세팅해보도록 하겠습니다.
# nginx를 다운받으려 했으나 sudo amazon-linux-extras install -y nginx1를 사용하여 다운받으라고하였다.
$ sudo yum install -y nginx (x)
$ amazon-linux-extras install -y nginx1(o)
# 설치후 nginx 버전 확인
$ nginx -v
nginx version : nginx/1.18.0
# nginx service 를 시작시킨다.
$ sudo systemctl start nginx.service
#만약 already port 가 더서 위의 명렁어로 올라가지 않는다면
$ /etc/init.d/apache2 stop
또는
$ sudo pkill -f nginx & wait $!
를 통해 80포트를 차지하고 있는 부분을 내려준후 다시 서비스를 올려보길 추천드린다.
다음과 같이 status가 뜬다면 정상 동작한다고 보시면 됩니다.
그럼 nginx 를 설치하였으니 nginx Port 80번에 Jenkins Port 8080을 연결하도록 하겠습니다.
$ vi /etc/nginx/nginx.conf 설정을 연다음
server {
# 추가할 내용
location / {
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
...
}
## 설정 후
$ sudo systemctl restart nginx.service
location을 추가시켜 ip:80/ 으로 들어왓을때 (jenkins)localhost:8080 으로 proxy pass 하도록 세팅하고 header에 각각의 값을 저장하여 넘기도록 한다.
nginx를 재시작 하였다면 다시한번 ip:80 포트를 통해 접근해보면 localhost:8080 포트였던 Jenkins 로 연결되는 것을 확인할 수 있다.
따라서 Jenkins로 접근하는 8080포트를 AWS 보안그룹 인바운드포트에서 제거한후 nginx가 사용할 80포트만 남겨둡니다.
여기까지 했다면 나머지 Jenkins 설정도 마저 해보도록 하겠습니다 .
Jenkins 에서 /var/lib/jenkins/secrets/initialAdminPassword 에 있는 Administrator Password를 입력하라고 합니다 .
# initialAdminPassword안에 들어있는 비밀번호를 복사하여 붙여놓고 실행합니다.
vi /var/lib/jenkins/secrets/initialAdminPassword
그다음 나머지 부분들은 천천히 읽어보고 설정해주시면 됩니다 !!