Jenkins-Gitlab-Springboot-Build Trigger Deploy

공부는 혼자하는 거·2021년 9월 4일
0

환경

목록 보기
2/23

목적은 내 로컬서버에 젠킨스를 띄운 다음, 깃랩과 연동하여 원격서버에 배포할려고 한다.

일단 로컬에 젠킨스를 설치하자.

로컬 OS는 window다.

원격서버 계정/IP/OS: jenkins@172.16.81.180 (우분투)


주의점: 위의 설치버전은 system 계정으로 젠킨스를 설치한다. 나중에 ssh key를 만들어 원격 서버에 접속할 예정이므로, 도메인 이름으로 변경하자. 아니면 나중에 서비스에서 유저 권한을 도메인 유저로 변경해야 한다.

설치가 완료되면 자동으로 브라우저에 localhost:port 로 Jenkins가 기동이 된다. 그리고 가장 처음 맞이하는 화면은 Unlock Jenkins이다. 초기 비밀번호를 넣어줘야한다. 위에 빨간 네모친 경로로 가서 비밀번호를 찾아서 넣어준다.

Customize Jenkins

자신이 Jenkins plugin에 좀 안다 하면 Select plugins to install을 선택하고 아니라면 Install suggested plugins 를 선택한다. Install suggested plugins를 선택한다 하더라도 언제라도 플러그인은 설치할 수 있다.

Jenkins Create First Admin User

admin / stella@6767


이제 Gitlab과 연동할 플러그인을 설치해주자.

대시보드⇒ Jenkins 관리 ⇒ 플러그인 관리 ⇒ 설치가능


재부팅 해준다.

다시 젠킨스 관리 ⇒ manage crdentical ⇒... 로 쭉 들어가서

username, password로 해줘도 되고, 토큰 방식을 하고 싶다면, 깃랩에 접속해서,

깃랩 계정은 가지고 있다고 가정하고 진행하겠다. 계정에 들어가서,

https://gwonsungjun.github.io/articles/2019-04/jenkins_tutorial_2

토큰을 만들어주고.

q1bS2sncwp2971LTW9Wg

왼쪽 메뉴에서 Credentials > System > Global credentials > Add Credentials를 클릭해서 2-6에서 복사한 GitLab API token을 등록해주자.

  • Kind : GitLab API token
  • Scope : Global
  • 방금 위에서 GitLab에서 복사한 Access Token, API token에 붙여넣기
  • ID, Description 입력 후 OK

왼쪽 메뉴 Jenkins 관리 > 시스템 설정 > GitLab에서 GitLab connections를 설정합니다.

  • Connection name : 식별할 수 있는 값 입력
  • GitLab Host URL
    • docker inspect gitlab | grep "IPAddress" 명령을 입력해서 나오는 IP를 입력한다.
    • 도커 컨테이너의 private IP는 유동적으로 바뀌기 때문에 매번 바꿔줘야 하는 불편함이 있다. 따라서 로컬 테스트일 경우만 사용하고 실제 상용 서비스일 경우 gitlab의 도메인 주소를 입력해주면 된다.

Test Connection > Success 확인되면 SAVE

이제 연동할 깃랩 주소로 들어가주자.


유저네임 방식으로 했으면 요렇게 프로젝트에 맴버로 등록해주면 된다.

다시 젠킨스 대시보드로 가서 새로운 Item을 클릭한다. 아무이름이나 지어주고 ok


소스코드 관리 란에서 연동할 프로젝트 깃랩 주소와 branch를 입력해주자.

크리덴셜이 없다면 새로 add


빌드 트리거

기본 준비는 다 끝났다! 이제 빌드 트리거를 위해서 빌드유발란을 살펴보자. build when a change is pushed to gitlab 을 체크하고 고급을 클릭해 토큰을 생성해준다.

다시 깃랩으로 돌아가자.

URL 에는 위에 나온 주소를 입력하고 토큰에도 만들어진 토큰값을 입력하면 된다. add Webhooks


원래는 localhost로 하면 안 된다. 도메인 주소를 만들어주둔지 IP 확인해서 등록해야 한다.

Test 해서 연결이 잘 되었는지 확인!!!!

이제 본격적으로 원격서버에 배포할 명령어를 입력하겠다. 우리는 window OS고 배포할 환경은 리눅스라는 것을 명심해라. 일단 springboot maven으로 install 할거니..

젠킨스 환경은 window니 execute windows batch를 선택!!! Command는 나중에 입력하기로 해놓고 일단 세팅은 완성했다. SSH 키를 만들어보자!

.ssh 폴더 아래서 git bash 이용

ssh-keygan -t rsa -C "alsrb9434@gmail.com" -f "id_rsa_userC" 
//id_rsa_userC라는 이름으로 ssh 공개키 비밀키 생성

나는 ssh 키가 여러개이므로 config 파일을 설정하겠다.


접속할 원격서버에 공개키를 던짐.

https://opentutorials.org/module/432/3742

이제 id_rsa.pub 파일을 리모트 서버의 $HOME/.ssh/authorized_keys 파일에 추가해줘야 한다. 아래의 그림을 보자.

SSH Server의 authorized_keys 의 내용이 SSH Client의 id_rsa.pub 파일과 같아야 한다. 그래서 ssh 접속을 할 때 id_rsa 파일과 authorized_keys 파일의 내용을 비교 할 수 있다. 일반적으로 SCP를 사용한다. SCP는 파일을 전송하는 프로그램인데, 아래와 같은 형식을 갖는다.

scp $HOME/.ssh/id_rsa 리모트 머신의 아이디@리모트 머신의 호스트 주소:저장할 파일

위의 형식에 따라서 로컬 머신의 id_rsa.pub 파일을 리모트 머신의 홈디렉토리로 전송해보자. 아래는 SSH Client가 설치된 로컬 머신에서 실행하는 명령이다.

1

scp $HOME/.ssh/id_rsa.pub egoing@egoing.net:id_rsa.pub

아래와 같은 메시지가 뜬다면 전송에 성공한 것이다.

id_rsa.pub                                                                                       100%  395     0.4KB/s   00:00

config파일 설정

# Personal account-userC
		Host kang
		HostName 172.16.81.180
		User jenkins
    IdentityFile ~/.ssh/id_rsa_userC

위의 설정파일이 ssh -T kang을 하면,

ssh jenkins@172.16.81.180 -i ~/.ssh/id_rsa_userC 와 같음


비밀번호 없이 원격 접속이 되는 것을 확인!!!

jenkins가 System 계정이면 사용자 계정 안의 ssh 키를 못 건드리므로,


만약 system 계정이면, 아래처럼 변경해주고, 다시 설치해야 된다.


이제 다시 젠킨스 새 아이템 구성에 들어가서, 아래 명령어들을 입력해주자.

echo " "
echo "========================"
echo "File DELETE"
echo "========================"

ssh kang -t -t "cd /springBoot/bilabCs/ && rm bilabCs.jar"
ssh kang -t -t "rm -f /springBoot/bilabCs/*.jar || true" 

echo " "
echo "========================"
echo "Path move"
echo "========================"

cd C:\Users\songn\AppData\Local\Jenkins\.jenkins\workspace\gitlab-Test\target

echo " "
echo "========================"
echo "File Copy"
echo "========================"

scp -i C:/Users/songn/.ssh/id_rsa_userC bilabCs.jar jenkins@172.16.81.180:/springBoot/bilabCs/

echo " "
echo "========================"
echo "server connect"
echo "========================"

ssh kang -t -t "kill $(netstat -anop | grep 8088 | awk '{print $7}' | awk -F / '{print $1}') | awk -F / '{print $1}' || true "

echo " "
echo "========================"
echo "Jar execute"
echo "========================"

ssh kang -t -t "export BUILD_ID=dontKillMe && nohup /usr/lib/jvm/java-11-openjdk-amd64/bin/java -jar /springBoot/bilabCs/bilabCs.jar & sleep 2"

원래는 publish over ssh 플러그인을 이용할려고 했는데, low level skill을 익혀두는 것이 도움이 될 거므로 다 명령어를 입력하자.

젠킨스는 각 명령어 한줄마다, 독립적인 쉘이므로, ssh kang으로 이동해주고, 명령들을 수행하고 빠져나오는 게 안 된다. 그래서 -t -옵션으로 " " 안에 원격 리눅스 명령어들을 입력해줘야 한다.

만약 여러개의 명령들을 한줄에 입력하고 싶다면, -t -t 연달아 입력해 접속하고 && 로 구분해주면 된다. 여기서 주의점은, jar를 백그라운드로 실행하는 명령어 &

nohup /usr/lib/jvm/java-11-openjdk-amd64/bin/java -jar /springBoot/bilabCs/bilabCs.jar &
//자바 11버전으로 실행

다음에 명령어를 이어갈 때 , && 는 필요없다. 왜인지 모르지만 jar 가 실행 후 바로 뻗으니, sleep 2 를 줘서 정상적으로 실행되게끔 한다.

이제 build를 해서 test해보자.

콘솔을 보면 상세한 정보를 알 수 있다.

젠킨스 배포를 하면, 아래와 같은 경로로 워크스페이스가 생기고, maven clean install을 하는 것을 볼 수 있을 것이다. 그래서 위에 batch cli에 경로를 그리로 이동한 것이다.


성공!!! , git push만 해줘도 위와 같이 빌드가 되고 success가 되는 것을 확인할 수 있다!!!

내 젠킨스 주소!!!!

http://localhost:18080/login?from=%2F

profile
시간대비효율

0개의 댓글