728x90

해당 시리즈는 현재 필자가 연습하고자 하는 서비스 아키텍쳐와 맞지 않아 Springboot 와 Gradle 을 사용한 시리즈를 다시 작성하고 있습니다. 최신 시리즈를 확인하여주시고 이 시리즈는 끝마치지 못한 부분이 있어 설치 부분만 참고를 하시길 바랍니다.

 

(최신 시리즈)

 

Jenkins&Springboot CI/CD 정리(1)

Jenkins&Springboot CI/CD 정리(1) 필자가 경험한 Springboot 프로젝트와 Jenkins CI 를 활용한 CI/CD 구축에 대해 정리를 해보고자 합니다. =) 이 시리즈에서는 이미 작성된 내용에 대해선 해당 글로 대체 할 예

0andwild.tistory.com

 

 

 

오늘은 Docker, Tomcat, Ansible, SonarQube 서버를 구축해보겠습니다.

 


Docker 인스턴스에 docker 설치

$ apt-get update

기본적인 패키지 최신 패키지로 업데이트

 

$ sudo apt install apt-transport-http ca-certificates curl software-properties-common

Apt가 https를 통해 rpeository를 이용하는 것을 허용할 수 있도록 하는 패키지들 설치

 

 

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

Docker 공식 GPG Key 추가

 

$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"

Docker repository 등록

 

$ sudo apt update
$ sudo apt install docker-ce

Docker 설치

 

$ sudo docker version

Docker가 정상적으로 설치가 되었는지 확인

 

$ sudo systemctl status docker

Docker가 정상적으로 실행되고 있는지 확인할 수 있음

 

$ sudo usermod -aG docker [유저초기이름]

docker명령어 입력시 sudo를 입력하지 않고 쓸 수 있게 해줌. 설정 후 적용이 되려면 쉘을 종료후 다시 로그인하여 접속을 하여야 적용이 됨.
필자는 AWS EC2의 ubuntu를 사용하고 있으므로 ubuntu 입력.
Linux의 경우 초기유저네임이 ec2-user 로 잡히는 것 같음.
자세한 사항은 아래 링크 참고.

 

Amazon Linux 인스턴스에서 사용자 계정 관리 - Amazon Elastic Compute Cloud

퍼블릭 키를 연속된 한 줄에 붙여넣는지 확인합니다. 퍼블릭 키는 여러 줄로 분할되지 않아야 합니다.

docs.aws.amazon.com

 

$ docker run hello-world

Docker 임시 기동 시켜보기

 


Tomcat Server 구축

 

$ apt-get update

기본적인 패키지 최신 패키지로 업데이트

 

Apache Tomcat 9 중 최신 버전인 9.0.65를 설치하고자 한다. 다른 버전을 설치하고 싶다면 아래 링크를 통해 주소를 복사후 wget 명령어를 통해 다운받도록 하자.

 

Apache Tomcat® - Apache Tomcat 9 Software Downloads

Welcome to the Apache Tomcat® 9.x software download page. This page provides download links for obtaining the latest version of Tomcat 9.0.x software, as well as links to the archives of older releases. Unsure which version you need? Specification version

tomcat.apache.org

$ sudo wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.67/bin/apache-tomcat-9.0.67.tar.gz

해당 경로를 통해 압추파일을 받아옴.

 

$ sudo tar -xvzf apache-tomcat-9.0.67.tar.gz

해당 압축파일을 해제 해줌.

 

$ ls -al

압축해제된 파일을 확인할 수 있음.

 

$ rm -rf apache-tomcat-9.0.67.tar.gz
$ ls -al

압축을 해제하였으니 기존 압축파일 삭제 및 잘 삭제되었는지 확인.

 

$ cd apache-tomcat-9.0.67/
$ sudo chmod +x ./bin/startup.sh && sudo chmod +x ./bin/shutdown.sh

압축해제한 폴더 경로로 접근 후 shell script 실행권한 추가.

 

$ sudo ./bin/startup.sh

tomcat은 tomcat 설치 경로(CATALINA_HOME) 아래 bin/startup.sh로 시작할 수 있다.
톰캣을 실행시켜줌.

 

[AWS EC2 Public Ip]:8080

톰캣은 기본적으로 8080포트를 사용하여 접속할 수 있다.

 

Tomcat이 정상적으로 실행되었다면 다음과 같은 창을 볼 수 있을 것입니다.

 

위 창에서 Manager App 부분에 모든 IP가 접근할 수 있도록 하기위해 몇 가지 설정을 진행하도록 하겠습니다.

 

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

자신이 편한 에디터로 설정파일에 들어가 value 부분을 주석처리 해주도록 하겠습니다.

 

$ sudo vim ./webapps/host-manager/META-INF/context.xml

위와 동일하게 value 부분을 주석처리 후 :w 저장하고 :q 를 입력하여 나오도록 하겠습니다.

다음은 Manager App에 접근하기 위한 Tomcat 관리자 계정을 생성해보도록 하겠습니다.

$ sudo vim ./conf/tomcat-users.xml

 

<role rolename="admin-gui"/>
<role rolename="manager-gui"/>
<user username="tomcat" password="tomcat" roles="admin-gui,manager-gui">

위의 내용을 추가해준 후 저장하고 나와주도록 합니다.

 

$ sudo ./bin/shutdown.sh
$ sudo ./bin/startup.sh

Tomcat 중지 후 재실행 시켜줌.

 

톰캣 8080포트 접속 후 Manager App 클릭

아까 설정을 추가해준 아이디와 tomcat 비밀번호 tomcat으로 로그인을 해줌.

 

정상적으로 로그인이 되었다면 다음과 같은 창을 볼 수 있을 겁니다.

 


Ansible 서버 구축

 

$ apt-get update

패키지 업데이트

 

$ sudo apt install ansible

Ansible 설치

 

$ sudo vim /etc/ansible/hosts

host파일에 접근하여 아래와 같이 추가

 

Ip 주소는 각 인스턴스의 private Ip 주소를 적었습니다.

추가하고 저장 후 빠져나옵니다.

 

$ ssh-keygen -t rsa

Ansible Server에서 Docker 서버와 Tomcat서버에 SSH 접속을 가능하게 하기위해 Ansible 서버에 SSH Key를 rsa 암호화 방식으로 생성.

 

$ cd .ssh
$ cat id_rsa.pub

위 명령어를 입력하여 나온 공개 키 값을 복사해줍니다.

Docker 서버의 ssh에 접속을 하여 이 공개키를 추가해줄겁니다.

$ cd .ssh

 

$ vim ~/.ssh/authorized_keys

편집기를 사용하여 Ansible 서버에서 복사해둔 공개키 값을 넣어줍시다. 

 

Docker 서버에 복사한 키를 이미 존재하는 키 아래에 추가 후 저장.

Vim 에서 맨 아랫줄로 이동을 하려면 o 키를 눌러주면 됩니다.

 

이제 Tomcat 서버에도 동일하게 적용을 해줍시다.

 

마지막으로 Ansible서버에도 이 공개키를 추가해주도록 하겠습니다.

추가를 완료하였습니다.

 

이제 docker서버와 tomcat서버에 ansible 서버에서 만든 공개키가 제대로 작동하면

Ansible서버에서 ssh [사용자이름]@[프라이빗ip] 로 접속이 가능합니다.

예시로 Ansible서버에서 docker서버로 ssh 접속을 시도해보겠습니다.

이와 같이 접속이 잘 되는 것을 확인할 수 있습니다.

 

이제 Ansible서버에서 Docker서버와 Tomcat서버로 ping test를 진행해보도록 하겠습니다.

$ ansible -m ping all

필자의 경우 로컬 ping test는 정상적인 응답이 왔으나 Docker 서버와 Tomcat서버에서는 응답에 실패하는 상황이 발생하였습니다.
우선 추측을 해보았을 때 Ansible 서버에서 Docker서버와 Tomcat 서버에 정상적으로 ssh 접속이 가능한 것으로 보아 등록해준 공개키가 정상적으로 작동을 하고 있는 것으로 판단하였습니다.

 

"module_stdout": "/bin/sh: 1: /usr/bin/python: not found\r\n"

무언가 python interpreter와 연관이 되어 있는 것 같아 구글링을 해보았습니다.

 

Stack overflow의 답변을 보면 remote서버(필자의 경우 docker, tomcat)에 python을 설치해주면 해결되는 것 같네요. (제가 참고한 링크는 아래 링크를 확인해주세요.)

 

"module_stdout": "/bin/sh: 1: /usr/bin/python: not found\r\n" when i use 'ansible all -m ping'

getting below error while executing 'ansible all -m ping' user@user-VirtualBox:/etc/ansible$ ansible all -m ping ip-address | FAILED! => { "changed": false, "module_stderr&

stackoverflow.com

 

필자도 한 번 시도를 해보겠습니다.

(Docker 서버)
$ apt install python

 

(Tomcat 서버)
$ apt install python

 

자 이제 remote 서버에 모두 설치가 되었고 다시 Ansible 서버로 가서 Ping test를 진행해보도록 하겠습니다.

 

$ ansible -m ping all

오… local과 remote 서버 모두 정상적으로 응답이 오는 것을 확인하였습니다.
원인 파악을 해보았을 때 이 추측이 틀렸을 수 있지만 ubuntu 에는 기본적으로 python3 이 설치가 되어있는데 Ansible 서버는 ansible을 설치하면서 python이 default 버전인 2.7로 설치가 되는 것 같습니다. 이 때문에 Ansible 서버와 python을 따로 설치하지 않아 2.7버전으로 맞추어져 있지 않은 remote 서버 간의 호환 문제 일 수 도 있을 것 같다는 생각을 해봅니다.(그냥 필자의 추측입니다…ㅎㅎ 아닐확률 98.9999%....?!)

 


SonarQube 서버 구축

SornarQube는 프리티어인 AWS EC2 t2.micro 로 설치하게 되면 자원부족으로 기동이 되지 않는다고 합니다. 최소 t2.small 로 사용(유료). 필자는 그냥 설치만 진행해보도록 하겠습니다.

$ sudo apt update

우선 만들어둔 SonarQube 인스턴스의 ssh 접속을 해주고 패키지 업데이트를 해주겠습니다.

 

$ sudo mkdir /opt/sonarqube

우선 opt directory 안에 sonarqube라는 디렉토리를 생성해줍니다.

 

$ sudo wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.6.zip

생성한 디렉토리 안에 sonarqube zip 파일을 다운받도록 하겠습니다.

 

zip파일이 잘 들어온 것을 확인해줍니다.

 

이제 이 zip 파일을 압축해제 시켜주어야 하는데 unzip 명령어가 실행되지 않는다면

다음과 같이 설치를 진행해주세요 =)

 

$ cd
$ sudo apt install unzip

먼저 해당 디렉토리 경로를 빠져나와 unzip 패키지를 다운받아줍니다.

 

$ cd /opt/sonarqube
$ sudo unzip sonarqube-7.6.zip

다시 sonarqube 디렉토리로 이동후 압축파일을 해제 해주면 이번에는 정상적으로 압축파일이 해제되는 것을 확인할 수 있습니다. =)

 

$ sudo rm -f sonarqube-7.6.zip

정상적으로 압축파일이 해제되었으니 압축파일은 삭제해주도록 하겠습니다.

이제 권한 설정을 진행해보도록 하겠습니다.
SonarQube는 Elastic Search와 같은 Service와 연계되어 사용되는데, root 권한이 아닐 경우 해당 Service를 이용할 수 없다고 Error가 뜰 수 있다고 합니다.

 

$ sudo chown -R ubuntu:ubuntu /opt/sonarqube

Ubuntu 부분은 사용자 이름을 넣어주면 됩니다.
Sonarqube directory 소유권을 ubuntu로 이전시켜줍니다.

 

$ cd sonarqube-7.6/
$ cd conf

SonarQube 설정파일 경로로 들어와줍니다. SonarQube의 설정파일을 확인해봅시다.

 

$ vim /opt/sonarqube/sonarqube-7.6/conf/sonar.properties

Line number 를 확인하기 위해 :set nu 를 입력해줍니다. 그리고 113번째 줄을 확인해보면 Sonarqube의 웹브라우저 port 번호를 확인할 수 있습니다.

AWS EC2 인스턴스 인바운드 규칙에 9000번 포트를 열어주면 해당 포트번호로 접근할 수 있습니다. =)

 

이렇게 AWS EC2에 접속하여 인바운드 규칙에 추가를 해줍니다.

 

$ cd /opt/sonarqube/sonarqube-7.6/bin/linux-x86-64
$ sudo ./sonar.sh start

실행파일이 있는 경로로 들어와준 후 실행을 시켜주겠습니다. =)

 

Sonarqube의 자세한 설정및 사용은 아래 블로그 링크를 참고해주세요.

 

[DevOps] Jenkins를 이용한 CI/CD Pipeline 구축 - Advenced Jenkins 사용 ② - SonarQube

이 내용은 인프런 - Jenkins를 이용한 CI/CD Pipeline 구축 강의를 보고 정리한 내용 입니다. 해당 내용의 Code 내용은 이 곳에서 확인하실 수 있습니다. 🗂 목차 ● [DevOps] Jenkins를 이용한 CI/CD P..

junyharang.tistory.com

 


 

 

728x90
반응형
복사했습니다!