Devops와 관련 기술 : 구성 요소 및 배치 크기를 세분화, 상향식 유연한 방법
Cloud Native
소프트웨어 엔지니어링에서 CI/CD는 CI(지속적 통합)와 CD(지속적 전달/배포)의 결합된 방식
< 젠킨스 시스템 >
< 젠킨스 글로벌 도구 >
< 젠킨스 플러그인 >
chmod 600 sshkey.pem
ssh -i sshkey.pem ubuntu@publicIP
sudo hostnamectl set-hostname mybuild
exec bash
sudo apt update
sudo apt search openjdk-11-jdk
sudo apt install openjdk-11-jdk
# java11설치
systemctl status jenkins
브라우저에서 인스턴스 퍼블릭IP:8080으로 jenkins접속
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
# 암호보기
Install suggested plugins 선택 후 설치
계정설정 : 이름 / PASSWORD
Jenkins URL
좌측 새로운 item클릭
sudo -i -u jenkins
#젠킨스 사용자 전환
cd workspace/프로젝트명
#빌드한 프로젝트가 존재하는 것을 확인
위에서 등록한 강사님의 현재시점의 repo를 fork를 이용해서 나의 저장소로 가져온다 (추후 repo를 수정해야할 때 나의 repo가 아니면 수정권한이 없기 때문이다)
mvn패키지를 이용해 아티펙트를 얻어낸다
sudo apt install maven # 쉘에 설치
mvn clean package
# 구성에서 build step에 입력
위에서 명령어를 통해 mvn을 실행시켜 아티펙트를 얻어냈다면 이번에는 jenkins의 강력한 장점인 플러그인을 통해 프로젝트를 생성해 mvn을 실행한다.
대시보드 jenkins관리에서 플러그인 관리 접속
대시보드 jenkins관리에서 Global Tool configuration에서 아래와 같이 java , maven추가
which mvn
ls -l 심벌릭 링크 경로
which java
ls -l 심벌릭 링크 경로
새로운 maven_project이름으로 프로젝트 생성 (프리스타일이 아닌 Maven Project 선택)
프로젝트를 빌드하면 마찬가지로 target이 생성되고 hello-world.war파일을 얻을 수 있다.
tomcat 서버 역할을 할 인스턴스 생성
새로운 쉘을 열고 ssh로 해당 인스턴스 접속
sudo apt update && sudo apt install tomcat9 -y
systemctl status tomcat9
# tomcat설치
# jenkins서버 쉘에서
ssh-keygen
cat .ssh/id_rsa.pub
vi .ssh/authorized_keys # tomcat서버 쉘에서
sudo usermod -aG tomcat $USER
#tomcat쉘에서 tomcat을 사용자 그룹에 추가
scp /var/lib/jenkins/workspace/maven_project/target/hello-world.war ubuntu@172.31.45.89:/var/lib/tomcat9/webapps
두 서버를 키를 통해 연결한 후, scp과정을 jenkins에 maven_project에서 Post Steps에 Execute shell에 아래와 같이 쉘 스크립트 작성을 통해 수행한다.
scp /var/lib/jenkins/workspace/maven_project/target/hello-world.war ubuntu@172.31.45.89:/var/lib/tomcat9/webapps
sudo -i -u jenkins
ssh-keygen
cat ~/.ssh/id_rsa.pub
# jenkins사용자에 접속
# jenkins에 key를 생성후 publickey를 복사
vi ~/.ssh/authorized_keys
# tomcat 서버의 같은 ssh디렉터리 authorized_keys 파일에 복사한 pub키를 추가한다.
ssh ubuntu@tomcat서버 프라이빗ip
# jenkins에서 tomcat에 접속이 잘 되는 것을 확인
-> 브라우저에 tomcat의 퍼블릭ip:8080/hello-world를 입력하면 웹 페이지가 뜨는 것을 알 수 있다.
새로운 jenkins-node 인스턴스 생성
#ssh로 jenkins-node에 접속
sudo apt update && sudo apt install openjdk-11-jdk maven -y
#maven과 java 설치
sudo useradd jenkins -d /var/lib/jenkins -m -s /bin/bash
#jenkins 유저 생성
sudo -i -u jenkins
#jenkins 유저로 접속
mkdir .ssh
vi .ssh/authorized_keys
#jenkins서버의 id_rsa.pub의 내용을 추가
cat .ssh/id_rsa.pub # jenkins서버 jenkis사용자의 public키 내용
ssh jenkins@node의 privateIP # 노드로 접속이 잘 되는지 확인
대시보드 - jenkins관리 - 노드관리 - 신규노드
이름지정
executors : 2 # 너무 많으면 cpu사양에 따라 오류 발생
노드의 레이블과 디렉터리 경로 지정
접속 방법 정의
-> ssh접속, 노드의 privateIP입력
ssh접속 인증 방식 정의
key등록
cat .ssh/id_rsa # jenkins서버의 jenkins사용자 프라이빗 키 복사
-> 사용자 이름 등록 및 key항목에 복사한 내용 삽입
이후에 maven_project를 빌드해보면 에러가 발생한다. maven_project가 node에게 시켜서 mvn clean package를 실행시키고 target에 있는 war파일을 tomcat서버의 /var/lib/tomcat9/webapps에 scp를 수행해야하지만 tomcat서버의 authorized_keys에 노드의 키는 등록되어있지 않다.
따라서 node의 jenkins사용자의 publickey를 등록해주어야 한다
ssh-keygen # 노드에서 키 생성
cat id_rsa.pub # 퍼블릭 키 내용 복사
vi ~/.ssh/authorized_keys # tomcat의 authorized_keys에 추가
ssh ubuntu@tomcat프라이빗ip
# 노드에서 접속이 잘 되는지 확인
프로젝트의 구성 - 빌드유발항목에서 cronjob을 설정할 수 있다.
쉘에 home디렉터리에 적당한 git디렉터리(=Working Dir)를 생성한다.
git clone git@github.com:suhwan12/abc.git
# 디렉터리에서 clone으로 원하는 remote repo를 가져온다
vi src/main/webapp/WEB-INF/views/index.jsp
git add .
git commit -m 'Git version 1.0.3'
git push
# remote repo에 새로운 commit을 push한다.