Docker 기반 개발환경 - t3qdev/nextg GitHub Wiki
Docker 기반의 환경은 하나의 Docker 에 하나의 서버스를 기본 동작하도록 하며 호스트에선 Haproxy 를 사용하여 각 Docker 서비스를 연결한다.
서비스 분산 관리 : Haproxy Docker 컨테이너 블럭 : Jenkins, Nexus, SonarQube, Tomcat8 (Jboss)
CentOs에 Docker 설치
- sudo yum install net-tools
- sudo yum install -y epel-release
- uname -a
- lsb_release -a
- https://docs.docker.com/engine/installation/linux/centos/
Ubuntu에 Docker 설치
- uname -a
- lsb_release -a
- https://docs.docker.com/engine/installation/linux/ubuntulinux/
기본명령어
Jenkins
SonarQube
Tomcat8
Nexus
Nexus 는 아직 Official 배포가 되지 않았다.
기본 배포본에 직접 Nexus 를 설치하도록 한다.
# adduser nexus
# su - nexus
nexus# wget http://download.sonatype.com/nexus/oss/nexus-2.13.0-01-bundle.tar.gz
nexus# tar zxvf nexus-2.13.0-01-bundle.tar.gz
nexus# mv nexus-2.13.0-01-bundle nexus
nexus# vi nexus/bin/nexus
RUN_AS_USER=nexus
nexus# vi nexus/conf/nexus.properties
application-port=8081
nexus# ./nexus/bin/nexus start
http://~~:8081/nexus/ 로 접근한다.
RunDeck
- http://~~:4440/ admin/admin 로 접근한다.
모니터링(cAdvisor)
http://~~:8080/ 접근하면 모니터링 화면이 나타남.
HaProxy
호스트에 설치하여 호스트로 들어오는 요청을 분배시킨다. 설치는 쉽다.
- 설치가 되었으면 실제 설정을 잡아준다.
- 서비스할 포트를 정의한다. Tomcat:8080,Nexus:8081,SonarQube:9000,Jenkins:8888
- 설정파일은 /etc/haproxy/haproxy.cfg 이다. 아이피는 위에서 찾은 아이피를 넣는다
#-----------------------------------------
# Nexus 8081
#-----------------------------------------
frontend nexus *:8081
default_backend nexus
backend nexus
server nexus1 172.17.0.3:8081 check
#-----------------------------------------
# jenkins 8888
#-----------------------------------------
frontend jenkins8888 *:8888
default_backend jenkins
backend jenkins
server jenkins1 172.17.0.5:8080 check
#-----------------------------------------
# Tomcat 8080
#-----------------------------------------
frontend tomcat8080 *:8080
default_backend tomcat
backend tomcat
server tomcat1 172.17.0.6:8080 check
#-----------------------------------------
# SonarQube 9000
#-----------------------------------------
frontend sonarqube9000 *:9000
default_backend sonarqube
backend sonarqube
server sonarqube1 172.17.0.7:9000 check
서비스 재시작 systemctl restart haproxy
Nexus
- http://설치호스트주소:8081/nexus admin/admin123
- Repositories > Central > Configuration > Download Remote Index 를 True 로 설정
- Repositories > Central > 마우스 오른쪽 > Update index
- Repositories > Releases > Configuration >Deployment Policy 를 Allow Redeploy 로 설정
- admin > Profile > password 에서 관리자 패스워드 변경
- Security > Users > Add > Nexus User > 사용자 입력 Role > Add > Nexus Deployment Role,Nexus Developer Role, Repo: All Repositoreis (FullControl)추가
tomcat
매니저 유저추가.
<role rolename="manager-script"/>
<role rolename="manager-gui"/>
<user username="tomcat" password="tomcat" roles="manager-script,manager-gui"/>
Jenkins 기본설정
접근은 기본 8080이나 톰캣과 포트 중복으로 haproxy 에서 8888으로 변경 하여 접근 http://호스트계정:8888/
- Jenkins 관리 > 플러그인관리> 설치가능
Git Plugin
Publish over SSH
Deploy to container (Tomcat 배포)
SonarQube Plugin
Cobertura Plugin
Rundeck plugin
- Jenkins 관리 > 시스템설정 > JDK
JDK installations
Install automatically uncheck
JDK Name : java1.8
JAVA_HOME : /usr/lib/jvm/java-8-openjdk-amd64
- Jenkins 관리 > 시스템설정 > Git
Git installations
Install automatically uncheck
Git Name : git
Path to Git executable : /usr/bin/git
- Jenkins 관리 > 시스템설정 > Git plugin
user.name 과 user.email 을 입력
~/.gitconfig or git config --list 참조
- Jenkins 관리 > 시스템설정 > Maven
Maven Name : maven3.3.9
Install automatically check
Install from Apache : Version 3.3.9
- Jenkins 관리 > 시스템설정 > SonarQube Server
SonarQube installations
Name : SonarQube5.5
Server URL: http://192.168.0.115:9000/
Server version: 5.3 or higher
- Jenkins 관리 > 시스템설정 > SonarQube Scanner
SonarQube Scanner installations
Install automatically Check
SonarQube Scanner Name : SonarQube2.6.1
Install from Maven Central : Version SonarQube Scanner 2.6.1
- Jenkins 관리 > 시스템설정 > E-mail 로 알려줌 (필요한 경우/ gmail예시)
SMTP 서버 : smtp.gmail.com
Use SMTP Authentication Check
사용자명 : [email protected]
비밀번호 :
SSL 사용 : check
SMTP Port : 465
Charset : UTF-8
- Jenkins 관리 > 시스템설정 > Publish over SSH (옵션)
Path to key : /var/lib/jenkins/.ssh/id_rsa
SSH Server : 추가 (공개키가 전파된 상황)
SSH Server Name: jenkins@host
Hostname : 192.168.0.117
Username : tomcat
Remote Directory : /home/tomcat/webapps
(Public key 설정이 어려우면 그냥 password authentication 이용)
- Nexus 배포를 위한 메이븐 설정
/var/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation/maven3.3.9/conf/settings.xml에
<server>
<id>releases</id>
<username>deployment</username>
<password>deployment123</password>
</server>
<server>
<id>snapshots</id>
<username>deployment</username>
<password>deployment123</password>
</server>
<server>
<id>thirdparty</id>
<username>deployment</username>
<password>deployment123</password>
</server>
추가 후 재시작. deployment/deployment123 은 nexus 기본 계정
- Rundeck
Rundeck
Instances
Name : rundeck
URL : http://192.168.0.116:4440/
Login : admin
Password : admin
Jenkins Job 생성
새로운 Item > Item 이름 Maven project
오래된 빌더 삭제 check
보관할 최대갯수: 3
소스코드관리
Git
Repository URL : https://github.com/t3qdev/nextg.git (알맞게..)
(알맞게.. 경로/repositorys/project.git , git@도메인:/경로/project.git , http://)
Credentials : 오픈일때는 none 그렇지 않다면 Add
Branches to build : */master (알맞게..)
빌드유발
Build whenever a SNAPSHOP dependency is built check
Build
Goals and options : clean deploy cobertura:cobertura
Add Pre-build Step : Execute SonarQube Scanner
Pre Steps
JDK : java1.8
SonarQube Scanner : SonarQube2.6.1 (셀렉박스 안보이면 재시작)
빌더후조치추가
Deploy war/ear/ to container
WAR/EAR files : **/*.war
Context path : /nextg
Container
Tomcat 7.X
Manager user name : tomcat-user.xml 파일에 추가한 부분과 싱크
Manger pasword : tomcat-user.xml 파일에 추가한 부분과 싱크
Tomcat URL : http://192.123.123.1:8080/
Maven,SoarQube 등 Central 설치는 실시간이 아니므로 선택창에 나오지 않는다면 플러그인>설치가능한플러그인>재시작 작업을 진행한다.
RunDeck
기본폴더는 /etc/rundeck 이며 이곳에 설정파일들이 있다.
rundeck 유저의 ssk 공개키를 (/var/lib/rundeck/.ssh/id_rsa.pub) 사용할 노드들에 배포하고( ~/.ssh/authorized_key )
/var/rundeck/projects/프로젝트/resources.xml 파일에 노드를 등록해야 한다.
<project>
<node name="docker1"
description="Docker test Server" tags="Deplay"
osFamily="Linux" osName="centOS" hostname="192.168.0.123" osVersion="7.2" username="t3q"
/>
<node name="homestar"
description="a humdinger" tags="integration,us-west" osFamily="unix" hostname="192.168.1.02" username="alexh">
<attribute name="flavor" value="medium"/>
<attribute name="package:version" value="2.0"/>
</node>
</project>
Firewall port 등록(필요시)
sudo iptables -L
sudo firewall-cmd --list-all
sudo firewall-cmd --permanent --add-port=추가원하는포트/tcp
sudo firewall-cmd --reload
JIRA 설치
https://hub.docker.com/r/cptactionhank/atlassian-jira/