AWS의 EC2 를 이용하여 CI를 실습해보고자 한다.
단계는
1. AWS 인스턴스 신청
2. 서버 설정
3. GIT 연동하여 빌드 / 배포
로 나누어 진행했다.
1. AWS 인스턴스 신청
AWS는 1년 프리티어를 제공하고 있다. 이를 이용해서 무료서버를 체험해볼 수 있다.
프리티어를 사용하기 위해서는 마스터카드를 등록해야함.
가입 후 EC2 인스턴스를 생성한다.
나의 경우는 우분투를 선택하였다.
키페어를 생성 후 다운받아 인스턴스에 SSH 를 통해 접속할 수 있다.
잘 보관할 것
aws가 친절하게 인스턴스에 연결하는 방법을 알려준다. 키페어위치만 잘 입력하여 접속하자
yes를 누르면 다음과 같이 접속할 수 있는 것을 볼 수 있음
윈도우는 putty를 통해 접속할 수 있음
2. 서버 설정
- 자바 설치
sudo apt-get install openjdk-8-jdk
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package openjdk-8-jdk
해당 오류 발생(해당 패키지가 없는 듯하다..)
sudo add-apt-repository ppa:webupd8team/java
를 입력하고 다시 install 하니 설치가 되었다.
ubuntu@ip-:~$ sudo apt install openjdk-8-jdk
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
adwaita-icon-theme at-spi2-core ca-certificates-java dconf-gsettings-backend
...
0 upgraded, 148 newly installed, 0 to remove and 112 not upgraded.
Need to get 80.2 MB of archives.
After this operation, 443 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
자바설치완료!
ubuntu@ip~$ java -version
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-8u191-b12-0ubuntu0.18.04.1-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)
- 톰캣 설치
톰캣과 톰캣어드민를 설치한다.
sudo apt-get install tomcat8
sudo apt-get install tomcat8-admin
어드민페이지에 접속할 수 있게 해당 xml을 수정한다.
sudo vi /etc/tomcat8/tomcat-users.xml
다음을 추가해준다
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-status"/>
<user username="admin" password="비번" roles="manager-gui,manager-script,manager-status"/>
manager 페이지는
주소:8080/manager 입력하면 위에 입력한 username과 password를 입력하면 보여진다.
해당 페이지에서 직접 war파일을 올려 배포할 수도 있다.
- DB설치
나의 경우에는 mysql을 설치하였음
설치 후 워크벤치로 서버에 설치된 DB에 접속하려하였지만, 계속 실패하였음
grant all privileges on *.* to root@'%' identified by '루트계정 비밀번호';
해당 명령어 입력 후 정상접속됨.. root 계정 권한문제?
- 젠킨스 설치
wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add -
echo deb https://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list
sudo apt-get update
sudo apt-get install jenkins
톰캣을 8080으로 써야하므로 젠킨스는 7070으로 포트 변경
sudo vim /etc/default/jenkins
HTTP_PORT 7070으로 변경
# port for HTTP connector (default 8080; disable with -1)
HTTP_PORT=7070
주소:7070 으로 접속하려하였지만, ERR_CONNECTION_TIMED_OUT 발생 7070을 못쓰나 하고 8080으로 다시 수정 후 접속하려하였지만, 또 발생
aws 방화벽 문제인 듯 하여 인스턴스 inbound 규칙 추가해줌
인바운드 아웃바운드 규칙란?
-인바운드 : 서버 내부로 들어오는 것 (클라이언트 -> 서버)
(ex 클라이언트가 업로드)
-아웃바운드 : 서버 외부로 송출 (서버 -> 클라이언트)
(ex 클라이언트가 다운로드)
- 젠킨스 설정
이제 http://주소:7070 을 들어가면 젠킨스 설정화면이 보인다.
첫 보안인증 화면은
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
의 패스워드를 쓰면 됨
잘 모르니 suggested 고고 ㅎㅎ;;
계정 생성하면 다음과 같은 화면보임! Jenkins 띄우기 성공!
3. GIT 연동 / 빌드 / 배포
새로운 JOB을 만들어서
다음과 같이 Freestyle project 선택
소스코드관리 Git을 선택하고 띄울 프로젝트의 github저장소 URL 를 입력한다.
BUILD
나의 경우에는 maven 빌드이므로 다음과 같이 설정하였음
프로젝트의 pom.xml 경로를 입력해준다.
Jenkins를 통해 빌드만 하여 war만 만들어놓고 원하는 경로에 놓을 수 있지만, 젠킨스를 통해 빌드 후 배포까지 가능하다.
빌드 조치 (배포) 빌드 후 조치 메뉴의 Deploy war/ear to a container 를 선택하여 다음과 같이 입력하였다.
서버에 깔린 톰캣 버전과 URL를 입력 후 매니저 페이지 계정과 비밀번호를 입력해주었음.
경로만 제대로 입력/설정되어 있다면 다음과같이 빌드와 배포가 SUCCESS 가 된다.
젠킨스는 테스트, 알림, 다양한 플러그인 등의 다양한 기능을 제공하고있음.
이를 응용하여 더 해봐야할 듯 함!!!
=======================================================
ㅜㅜ....삽질을 너무 많이함
1. mysql 계정권한문제 삽질
2. 빌드 후 생성되는 war에 classes 하위가 없거나 src/main/webapp 폴더 안의 것들이 없었음
이것때문에 게속 삽질함... 그리고 젠킨스 빌드 시 서버가 급속도로 느려지면서 아무것도 못하는 경우 발생 인스턴스 재시작하면서 퍼블릭IP가 바뀌어서 매우 귀찮아졌었음.... ㅠ퓨
--> 느려지는 원인!!!
프리티어는 1기가 메모리를 제공하고있음.
근데 이 서버에 DB, tomcat, jenkins 까지 올려놓고 쓰니 당근 서버가 뻗을 수 밖에...
--> 느려지는 원인!!!
프리티어는 1기가 메모리를 제공하고있음.
근데 이 서버에 DB, tomcat, jenkins 까지 올려놓고 쓰니 당근 서버가 뻗을 수 밖에...
classes에 없는건 pom.xml 위치인 듯하고
(pom이 이상한 곳에 생성되었었는데 그걸로 빌드하니 class들이 모두 생성이 되지 않았음)
(pom이 이상한 곳에 생성되었었는데 그걸로 빌드하니 class들이 모두 생성이 되지 않았음)
webapp 없는건 경로문제인듯함 그래서 pom.xml에 warSourceDirectory src/main/webapp 로 경로를 설정해주니 생김!
이 링크 참조하여 해결
이클립스에서도 war로 export하면 동일한 war가 생성되어 내 문제임을 알았다.
링크보고 이클립스 프로젝트 Properties - Deployment Assembly 에서
Source 와 Deploy Path 를 보고
webapp가 이상한 것으로 잡혀있어서 배포 시 생성이 안된거였음...!
/src/main/webapp 가 없어서 추가하고 다시 export 하니 war가 제대로 생성되었음.
근데 이건 이클립스 프로젝트 설정 바꾸는건데 젠킨스는 git에서 땡겨서 빌드하는데 이 속성을 가져올 수 있을까?
pom.xml
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<warSourceDirectory>src/main/webapp</warSourceDirectory>
</configuration>
</plugin>
warSourceDirectory 에 원래 webapp만 있었는데 src/main 을 추가 후 git에 올리고
다시 젠킨스로 빌드 후 배포하니 정상적으로 배포까지 완료됨...
...와르소스디렉토리인데 왜 될까 ..?
오! 여기 딱 나와있음...
WAR에 포함될 추가적인 파일들을 위한 디렉토리이다.
이것은 너의 JSP파일들을 놓은 위치이다.
메이븐 공부할 때 한번 읽어 볼 필요가 있을듯...
Required Parameters
Name | Type | Since | Description |
---|---|---|---|
<cacheFile> | File | 2.1-alpha-1 | The file containing the webapp structure cache. Default value is: ${project.build.directory}/war/work/webapp-cache.xml. |
<outputDirectory> | String | - | The directory for the generated WAR. Default value is: ${project.build.directory}. |
<warSourceDirectory> | File | - | Single directory for extra files to include in the WAR. This is where you place your JSP files. Default value is: ${basedir}/src/main/webapp. |
<webappDirectory> | File | - | The directory where the webapp is built. Default value is: ${project.build.directory}/${project.build.finalName}. |
<workDirectory> | File | - | Directory to unpack dependent WARs into if needed. Default value is: ${project.build.directory}/war/work. |
todo
1. git push 인식하여 빌드하도록 설정하기
)
댓글 없음:
댓글 쓰기