Code --> Kubernetes
sudo apt install openjdk-11-jdk
curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo tee \
/usr/share/keyrings/jenkins-keyring.asc > /dev/null
echo "deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \
https://pkg.jenkins.io/debian-stable binary/" | sudo tee \
/etc/apt/sources.list.d/jenkins.list > /dev/null
sudo apt-get update
sudo apt-get install fontconfig jenkins
systemctl status jenkins
http://X.X.X.X:8080
sudo cat /var/lib/jenkins/secerts/initialAdminPassword
접속 확인을 할 수 있다.
1) 새로운 item -> Freestyle Project -> build
2) apply -> 저장 후 build now 로 결과(콘솔창) 확인
Maven: Java 프로젝트 빌드 도구
빌드:
1. validate: 필요한 정보가 있는지 확인
2. compile: 소스코드 컴파일
3. test: 컴파일된 코드단위 테스트
4. package: JAR/WAR 파일로 생성
5. verify: 통합 테스트
6. install: 로컬 저장소에 배포(~/.m2/repository)
7. deploy: 원격 저장소에 배포
소스코드
git clone https://github.com/Sunny-1030/source-java-maven-hello-world
#강사님 github에서 fork
sudo apt install maven
mvn clean package #war파일로 만들어 줌
시스템 환경구성
~/.zshrc
또는 ~/.bashrc
JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/
M2_HOME=/usr/share/maven
M2=$M2_HOME/bin
PATH=$PATH:$JAVA_HOME:$M2:$M2_HOME
source ~/.zshrc
또는
source ~/.bashrc
jenkins관리에 global tool 선택
1) JDK 설정
name JAVA_HOME
위치 /usr/lib/jvm/java-11-openjdk-amd64/
2) Maven설정
name M2_HOME
위치 /usr/share/maven
1) 소스코드 git 선택
https://github.com/Sunny-1030/source-java-maven-hello-world
2) branch 정의
*/main
3) build Goals 설정
clean package
mange credentials jenkins-global 선택
add credential 할 수 있음
sudo apt install tomcat9 tomcat9-admin
systemctl status tomcat9
브라우저로 접속 IP: 192.168.59.12:8080
docBase
/var/lib/tomcat9/webapp/ROOT
관리자 페이지에 접속하기
ID 와 password를 설정해주어야 접속이 가능
http://192.168.59.11:8080/manager/html
Admin Mgmt 계정/패스워드
/etc/tomcat9/tomcat-user.xml
<tomcat-users xmlns="http://tomcat.apache.org/xml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
version="1.0">
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="admin" password="P@ssw0rd" roles="manager-gui, manager-script, manager-jmx, manager-status"/>
</tomcat-users>
admin설정 후 tomcat9 재시작
sudo systemctl restart tomcat9
설정한 id와 pw로 관리자 페이지 접속가능
Ansible로 docker_*
모듈로 Docker 호스트 관리
sudo apt install python3-pip
sudo pip3 install docker
docker 엔진 설치
참고링크: https://docs.docker.com/engine/install/ubuntu/
유저 권한까지 부여해 준다.
id -a
docker ps
# 권한 확인 , 적용안될 시 재접속
webapp.war file을 docker host로 이동
cd webapp.war /tmp
scp /tmp/webapp.war 192.168.59.12:/tmp
Docker(vm) 에서 Deploy하기
cp /tmp/webapp.war .
vi Dockerfile #도커파일생성 아래사진 참고
docker build -t myapp .
docker run -d -p 8080:8080 myapp
webapp 접속 확인
curl localhost:808/webapp/ # port가 겹쳐서 808로 설정
jenkins 자동화를 위해 현재 docker conatainer/images 삭제 (정리)
docker ps
docker rm -f xx
docker images
docker rmi xx
jenkins와 tomcat port 겹쳤을 경우
jenkins port 변경
sudo vi /etc/default/jenkins
sudo vi /etc/init.d/jenkins
의 port를 모두 변경해야함
sudo /etc/init.d/jenkins restart
jenkins 관리 -> 플러그인 매니저
설치가능 -> artifact 검색
Publish Over SSH 설치
새로운 Item 구성 (maven project)
(이전과 같은 포멧으로 설정)
빌드 후 조치
send build artifacts over SSH
서버 설정을 위해 잠시 저장
jenkins관리 -> 시스템설정
(맨 아래) Publish over SSH
SSH Servers 추가
고급 누르면 추가적인 기능생성
간단하게 password만 작성
Test Configuration으로 확인
다시 구성으로 이동
서버설정에 서버가 생성된 것을 확인 할 수 있음
transfers
-source files
webapp/target/webapp.war
-remote directory
myweb
(비워두면 홈디렉토리)
apply -> 저장
Build Now
docker(vm)에서 확인
webapp 이 들어온 것을 확인할 수 있음
단, webapp/target/webapp.war를 통으로 가져오기에
사용상 문제는 없으나 경로를 쓰기 귀찮을 수 있음
이때, 쓰는 것 Remove prefix에 제거할 경로를
입력하면 복사할 시 지정된 경로는 제거된다.
깔끔히 webapp/target은 사라지고 바로 webapp.war를 볼 수 있다.
cd source-java-maven-hello-world
vi Dockerfile
From tomcat:9.0-jre11-openjdk
COPY webapp.war /usr/local/tomcat/webapps
git add .
git commit -m 'add dockerfile'
git push
name: Sunny-1030
password: 발급받은 token 입력
github 에서 dockerfile 확인
다시 Deploy-to-docker 구성
add transfer set 클릭
source file
Dockerfile
remove
실패 시 debuging 할때
콘솔창에서 상세정보를 보기위해
구성 -> ssh server -> 고급
verbose output 선택(자세히 볼수 있음)
exec command
cd /home/vagrant/myweb
docker build -t myweb .
docker run -d -p 8080:8080 myweb
apply -> 저장
docker build & deploy 확인
docker image
docker ps
curl localhost:8080/webapp/
빌드유발 시
poll SCM 을 걸면 오류가 발생
H * * * (= * * * * ) 매분
앞뒤로 약간의 편차를 줌
H Hash
:
:
:
vm은 jenkins 1대 ansible1대 docker1대 준비
ansible vm 에는 ansible과 docker가 같이 있어야함
sudo apt update
sudo apt install ansible
docker 설치 링크: https://docs.docker.com/engine/install/ubuntu/
ansible 에서 docker vm ssh 연결
ssh-keygen
ssh-copy-id vagrant@192.168.59.12
ssh-copy-id vagrant@192.168.59.13
#인벤토리 설정
vi .ansible.cfg
[defaults]
inventory = hosts.ini
#호스트 설정
vi hosts.ini
[ansible_host]
192.168.58.13
[docker_host]
192.168.59.12
ansible all -m ping #연결확인
jenkins관리 -> 시스템 설정 -> (맨 아래) publish [추가]
[고급] -> use password (check)
testconfiguration 클릭하여 success 확인
apply ->저장
jenkins 새로운 Item -> maven project
기존과 동일하게 설정
git
->레포지토리 주소
branch
-> */main
golas
-> clean package
빌드 후 조치
[send build artifacts over SSH]
(server - name)
ansible-host
(source file)
webapp/target/webapp.war
(remove prefix)
webapp/target
(remote directory)
java-hello-world
추가
(source file)
Dockerfile
(remote directory)
java-hello-world
추가
(source file)
docker_build_and_push.yaml
(remove prefix)
playbook
(remote directory)
java-hello-world
(exec command)
ansible-playbook java-hello-world/docker_build_and_push.yaml
apply -> 저장
mkdir playbook
cd playbook
vi docker_build_and_push.yaml
- name: Docker Image Build
hosts: ansible_host
gather_facts: false
tasks:
- command: docker image build -t java-hello-world java-hello-world/
- command: docker container rm -f java-hello-world
ignore_errors: yes
- command: docker container run --name java-hello-world -d -p 8080:8080 java-hello-world
git add .
git commit -m 'create docker'
git push origin main
name -> Sunny-1030
password -> 토큰
git push가 안될 경우
[에러 문구]! [rejected] main -> main (non-fast-forward) error: failed to push some refs to 'https://github.com/Sunny-1030/source-java-maven-hello-world'
git pull origin main --allow-unrelated-histories
ansible(vm) 확인
docker ps
docker images
#tip
토큰을 변수처리
Default Value에 토큰 값 넣기 (docker 토큰을 넣어야함!)
docker repogitory create 생성하기
-> git push
확인 후 docker container 삭제하기
docker rm -f `docker ps -a -q`
docker ps
tip
vi편집기 붙여넣기 오류
:set paste 엔터 로 일시적 해결
참고링크: [재민님 블로그]
https://velog.io/@repush/CICD-%EA%B7%B8%EB%8C%80%EB%A1%9C-%EB%94%B0%EB%9D%BC%ED%95%98%EA%B8%B0-5%ED%8E%B8
Ansible로 k8s_*
모듈을 사용하여 Kubernetes 호스트 관리
사전 구성:
sudo apt install python3-pip
sudo pip3 install openshift==0.11
시점에 따라 사용하는 버전이 다를 수 있음