Leeyebin의 블로그

[Jenkins]사내 전산시스템 젠킨스 도입기(feat ant/넥사크로)[2/3] 본문

프로그래밍/DevOps

[Jenkins]사내 전산시스템 젠킨스 도입기(feat ant/넥사크로)[2/3]

안되면될때까지 2020. 3. 30. 23:59

Jenkins(window용) 설치

https://jenkins.io/

 

Jenkins

Jenkins – an open source automation server which enables developers around the world to reliably build, test, and deploy their software

jenkins.io

위 사이트를 참고하여 운영체제에 맞게 다운로드 받아 설치하자

 

[주의] Jenkins 설치 위치가 곧 Jenkins의 Workspace이고 소스를 받는 장소이기 때문에 Jenkins 설치 위치를 신중하게 설치하자

 

설치 대화창을 넘어가게 되면 Customize Jenkins가 보이게 되는데

필요한것만 골라서 할수도있지만 필자는 왼쪽을 선택하여 설치하였다.

 

계정을 만들고나면 URL을 설정하는 창이 나온다.

 

기존에 8080포트를 사용하는 사람들은 포트를 다른것으로 바꾸면된다. 내 경우에는 http://localhost:55555/ 로 설정하였다.

 

설치가 끝났다.

 

이제 여러가지 세팅을 해줘야한다. Jenkins내에서 설정하는 것과 JOB에서 설정하는것을 나누었다.

Jenkins에서 처리해야할 것 및 선행되야할 것
  • SVN으로 소스 받기
    • Jenkins에서 해야할 것
      • Jenkins에 SVN설정(JOB에서 세팅)
  • 넥사크로 Generate 하기
    • Jenkins에서 해야할 것
      • cmd 명령어 작성해두기(앞페이지에서 작성해 둔 것)(JOB에서 세팅)
  • Ant 빌드
    • Jenkins에서 해야할 것
      • Ant 설정(버전확인해놓을 것) , JDK설정(빌드시 사용할 Java버전)
  • Deploy
    • Jenkins에서 해야할 것
      • 개발, 운영 서버 정보 설정
      • tar,jar 업로드 후 파일 푸는 명령어와 이름 바꾸는 명령어 준비(JOB에서 세팅)

Jenkins안에서의 하나의 프로젝트를 JOB이라고 할 수 있는데, 이 JOB을 만들기 전에 준비해야할 것을 먼저 하겠다.

위에 표에서는 어차피 "SVN설정"과 "넥사크로 스크립트"는 JOB을 만들때 세팅하면 되기 때문에 Ant와 Deploy를 위한 세팅을 먼저 할 예정이다.

 

배포할 서버정보 세팅

배포를 하기 위해서는 SSH프로토콜을 이용하여 전송하는 방식이 있는데 Jenkins에 플러그인을 사용하여 이용할 수 있다. 먼저 SSH플러그인이 설치 되어있는지 부터 확인해보겠다. (SSH 플러그인은 여러개가 있는 것으로 알고있는데 많이 쓰는 "Publish Over SSH" 플러그인을 기준으로 설명하겠다.

젠킨스 로그인 후 "Jenkins 관리"에 들어간다.

 

 

플러그인 관리 클릭

 

"설치된 플러그인 목록"에서 Filter를 SSH로 검색해서 "Publish Over SSH"가 있으면 이미 설치가 되어있는거니 설치하는 과정은 생략해도 된다.

플러그인 설치를 해야한다면, "설치 가능" 탭에서 "Publish OVER SSH"를 검색하여 체크박스에 체크 후에 아래와 같이

둘 중에 하나를 선택하여 설치하자

 

설치가 끝나면 Deploy를 할 대상 서버를 세팅해보자

[Jenkins 관리]-[시스템 설정] 페이지에 진입한다.

첫번째 시스템 설정을 클릭한다.

 

 

중간에 "Jenkins Location"에 내 컴퓨터에 깔았던 주소가 보인다. 더 내려가보도록하자

좀더 내려가다 보면 "Publish over SSH" 가 있다.

 

추가 버튼을 누르면

 

입력을 할 수 있는 항목들이 나온다. 비밀번호도 입력해야하니 "고급" 버튼도 눌러주자.

 

필자는 위에 Name, Hostname, username, Remote Directory, Passphrase/Password 다섯가지만 입력하였다.

항목 비고
Name Jenkins에서 Job을 만들때 사용할 이름
Hostname 주소(필자는 서버의 ip를 적었다.)
Username 업로드시 사용할 id(SSH프로토콜로 접근할 계정)
Remote Directory 계정이 로그인시 시작할 디렉토리(배포할 위치가 여러개라면 상위만 지정, 어차피 JOB을 만들면 디테일하게 세팅 가능하다.)
Passphrase/Password 계정비밀번호

p.s 고급탭에서 적지 않은 부분이 있는데 필요하다면 세팅해줘야한다. 예를들어 포트 등

추가적인 사항은 아래 사이트를 참고하자

https://plugins.jenkins.io/publish-over-ssh/

 

설정을 다 했다면 테스트를 해보자

우측 밑에 "Test Configuration"이라는 버튼을 누르면 배포하려는 서버와 정상적으로 통신을 완료했다면 'Testing'이라는 로딩 후에 위와 같이 'Success'라고 문구가 뜨게 되면 서버 하나의 세팅이 완료되었다. 필자의 개발서버를 기준으로 잡자면 web서버, was서버 이렇게 두개를 입력하였다.(주소가 같아도 계정이 달라서 2개, 같다면 하나로 사용해도 무관하다.)

 

JDK세팅 및 Ant 버전 세팅

[Jenkins 관리]-[Global Tool Configuration] 페이지에 들어간다.

여기에서는 빌드를 위한 여러가지들을 세팅할 수 있다. 밑에 maven이랑 docker도 보이고 사내시스템의 경우에는 Ant와 jdk1.7.0_80버전을 사용하고 있었기때문에 jdk와 Ant를 버전에 맞추어 주소를 직접 세팅해놓았다.

(p.s 인터넷이 안되는 환경에서는 수동으로 직접 입력 시킬수도 있고, "Install automatically"를 사용하면 알아서 다운로드 받아준다.)

 

이제 준비물들이 끝났기때문에 Jenkins의 JOB을 만들어보자

 

좌측에 [새로운 Item] 버튼을 클릭하고, 

위 스샷의 경우에는 이미 "Dev_Web_hdr"이 존재하기때문에 빨간글씨로 뜬다.

"Freestyle project"를 입력한다.

아래 "OK"버튼을 눌러주자

 

 

P.S 아래 빨강 괄호의 경우에는 기존에 있는 JOB을 복사해서 프로젝트를 만드는 것인데, 이미 만들어진 JOB에서 몇 개만 바꾸고 만들경우에 유용하다.

 

 

이렇게 왼쪽 회색으로 JOB이 생성되고 클릭해보자

 

각종 세팅을 위해 "구성"을 클릭하자

 

위에 탭들을 클릭하면 해당하는 항목으로 스크롤 이동을 한다. 결국 스크롤을 내리면 다 지나가는 항목들이다.

 

 

JOB설정

먼저 JOB에서 해야할 것들을 정리해보자

Jenkins에서 처리해야할 것 및 선행되야할 것
  • SVN으로 소스 받기
    • Jenkins에서 해야할 것
      • Jenkins에 SVN설정(JOB에서 세팅)
  • 넥사크로 Generate 하기
    • Jenkins에서 해야할 것
      • cmd 명령어 작성해두기(앞페이지에서 작성해 둔 것)
  • Ant 빌드
    • Jenkins에서 해야할 것
      • Ant 설정(버전확인해놓을 것) , JDK설정(빌드시 사용할 Java버전) -> 세팅함
  • Deploy
    • Jenkins에서 해야할 것
      • 개발, 운영 서버 정보 설정 -> 세팅함
      • tar,jar 업로드 후 파일 푸는 명령어와 이름 바꾸는 명령어 준비
개발 젠킨스를 기준으로 두개의 JOB을 만들 예정이다
-WEB(넥사크로)
-WAS(클래스파일들)


아래의 설정들에 [공통],[WEB][WAS]로 나눌 계획이다.

SVN 설정[공통]

소스 코드 관리 항목을 가보자

필자는 Subversion을 사용하기 때문에 라디오버튼을 선택하였고 아래와 같이 나온다.

디폴트로 체크되어있거나 세팅되어있는건 건드리지 말고, SVN정보를 입력해보자

 

"Credentials"의 경우에는 옆에 열쇠모양을 클릭하여 팝업이 뜨면 아이디와 비밀번호를 입력하고 Add하여주면, 팝업창이 닫히고 "Credentials" 항목에 콤보로 선택할 수 있게 된다.

 

문제가 없다면 콤보를 선택하고도 아무일도 일어나지 않지만, 만약 svn접근에 실패한다면 아래와 같은 오류가 나온다.

BUILD 설정[공통]

"빌드 환경" 탭을 눌러보면 빌드환경 항목들이 나온다.

 

개발환경이 Ant이기 때문에 "With Ant"에 체크를 해주고 위에 글로벌 설정에서 설정해두었던 Ant의 버전과 JDK의 버전을 선택하면된다.

 

BUILD[WEB]

"Build"탭으로 내려가서 "Add build step"을 클릭하면 여러가지 항목들이 보인다. 윈도우 커맨드, 쉘, Ant, 그래들 등등 여기서 우리는 Ant빌드 하기전에 넥사크로파일을 javascript파일로 파싱해야하는 작업을 선행해야하기때문에 

"Execute Windows batch command"를 클릭하고, 다시 "Invodke Ant"를 클릭하면된다.

 

p.s 참고로 아래의 동그라미를 드래그하면 순서를 손쉽게 바꿀수있다.

"Command"항목에는 윈도우에서 cmd 명령어를 사용한다고 생각하고 치면된다.

//nexacrodeploy17.exe 실행을 위해 이동한다.
cd C:\Program Files (x86)\nexacro\17 

//Generate를 하기 위한 파일 경로를 찾는다.(Jenkins에서 SVN소스를 받은 경로를 명시하면됨.)
nexacrodeploy17.exe  -P "C:\Jenkins\HRCS\hdr\nxui\hrcs\hrcs.xprj" -O "D:\ResultGenerate\_web_" -B "C:\Jenkins\HRCS\hdr\nxui\hrcs\nexacro17lib" -D "D:\ResultDeploy\_web_" -MERGE

//Generate 폴더에 사용하지않는 svn확장자를 제거하기 위한 커맨드(필수는 아님)
cd /d d:\ResultGenerate
for /f "tokens=*" %%d in ('dir /b/s/a:d *.svn') do rmdir /q/s "%%d"

 

"Invoke Ant"항목에 "Ant Version"에 ant버전을 명시하고 아래 고급버튼을 눌러 web용 Ant빌드 xml파일을 Target에 넣는다.

 

빌드 후 조치[WEB]

"빌드 후 조치 추가"를 누르면 아래와같이 여러 개가 나오는데 "Send build artifacts over SSH"를 누른다.

따로 고급은 건드리지 않았고, 

항목 비고
Source files Ant빌드를 하고나서 나온 tar파일 위치
Remove prefix 접두어를 지우는데 보통 위에 Source files가 project/build/web.tar라면
"project/build/"까지 적으면 된다.
Remote directory 위에서 SSH 서버 세팅 후에 작성하는 "Remote directory" 가 있는데 동일하다면 입력하지 않아도 된다. 아니면 그대로 SSH서버 설정할때의 디렉토리 명을 입력해주자
Exec command 서버에 접속해서 내릴 명령어를 넣으면된다.
본인의 경우에는 
1. tar 압축풀기
2. 압축을 푼 tar파일 이름바꿔놓기(백업)

Exec command

본인은 이름만 바꿔서 백업해놓았지만 따로 backup 디렉토리에 옮겨 넣는것도 응용이 가능하다.

cd /webapp/rental_hrcs/rental_hrcs //이동
tar xvf web.tar //압축풀고
mv web.tar/ web.tar_$(date '+%Y%m%d_%H%M')/      //web.tar파일을 web.tar_년월일_시분 으로 바꾼다.

p.s 서버가 두개라면 "Add transfer set"을 눌러 서버만 바꿔주고 세팅을 다시하면 된다.(두번일 하는것)

 

 

이제 web쪽 JOB은 작성이 끝났다. 저장을 누르고 Jenkins 메인화면에 가보자 그리고 제일 우측에 아이콘을 클릭해보자

공포의 버튼이다.

 

한 번에 성공했다면 내가 글을 잘 쓴것일거고, 잘 안돌아간다면 지극히 정상이다. 삽질을 해야 기억에도 잘 남는다.

여기 댓글에 남겨도 될것이고, 구글신에 도움을 받아 헤쳐나가도록하자. 여기 작성한 블로그 글은 전체를 한묶음으로 하였지만 step by step을 추천하긴한다.(svn만 붙여보고 시도해보고, 서버에 업로드만해보고 시도해보고 등)

본인은 차례대로 참고로 본인의 빌드 히스토리를 보면 엄청난 삽질을 했다. (빨강색이 빌드 실패, 노랑이는 중간에 내가 취소한 것)

 

BUILD[WAS]

자 이제 [WAS]를 해야한다. WAS는 클래스파일과 라이브러리파일만 필요하기 때문에 [WEB]에서 했던 generate를 하지 않아도 된다. 

"Invoke Ant"만 선택하자

"Invoke Ant"항목에 "Ant Version"에 ant버전을 명시하고 아래 고급버튼을 눌러 was용 Ant빌드 xml파일을 Target에 넣는다.

 

빌드 후 조치[WAS]

WEB과 명령어가 거의 비슷하다. 위치가 다를뿐

자세한 항목들은 위에 [WEB]을 참고하자

cd /wasapp/rental_hrcs/rental_hrcs //이동
jar xvf hrcs.war //압축풀고
mv hrcs.war/ hrcs.war_$(date '+%Y%m%d_%H%M')/      //hrcs.war파일을 hrcs.war_년월일_시분 으로 바꾼다.

p.s 서버가 두개라면 "Add transfer set"을 눌러 서버정보만 바꿔주고 세팅을 다시하면 된다.(두번일 하는것)

 

 

2/3에서는 Jenkins JOB에 대해 WEB설정과 WAS설정에 대해서 알아보았다.

3/3에서는 삽질을하면 얻은 정보들을 적을 예정이다.

 

궁금한점 있으면 댓글달아주시면 늦게라도 도와드리겠습니다.

 

 

Comments