모바일 오유 바로가기
http://m.todayhumor.co.kr
분류 게시판
베스트
  • 베스트오브베스트
  • 베스트
  • 오늘의베스트
  • 유머
  • 유머자료
  • 유머글
  • 이야기
  • 자유
  • 고민
  • 연애
  • 결혼생활
  • 좋은글
  • 자랑
  • 공포
  • 멘붕
  • 사이다
  • 군대
  • 밀리터리
  • 미스터리
  • 술한잔
  • 오늘있잖아요
  • 투표인증
  • 새해
  • 이슈
  • 시사
  • 시사아카이브
  • 사회면
  • 사건사고
  • 생활
  • 패션
  • 패션착샷
  • 아동패션착샷
  • 뷰티
  • 인테리어
  • DIY
  • 요리
  • 커피&차
  • 육아
  • 법률
  • 동물
  • 지식
  • 취업정보
  • 식물
  • 다이어트
  • 의료
  • 영어
  • 맛집
  • 추천사이트
  • 해외직구
  • 취미
  • 사진
  • 사진강좌
  • 카메라
  • 만화
  • 애니메이션
  • 포니
  • 자전거
  • 자동차
  • 여행
  • 바이크
  • 민물낚시
  • 바다낚시
  • 장난감
  • 그림판
  • 학술
  • 경제
  • 역사
  • 예술
  • 과학
  • 철학
  • 심리학
  • 방송연예
  • 연예
  • 음악
  • 음악찾기
  • 악기
  • 음향기기
  • 영화
  • 다큐멘터리
  • 국내드라마
  • 해외드라마
  • 예능
  • 팟케스트
  • 방송프로그램
  • 무한도전
  • 더지니어스
  • 개그콘서트
  • 런닝맨
  • 나가수
  • 디지털
  • 컴퓨터
  • 프로그래머
  • IT
  • 안티바이러스
  • 애플
  • 안드로이드
  • 스마트폰
  • 윈도우폰
  • 심비안
  • 스포츠
  • 스포츠
  • 축구
  • 야구
  • 농구
  • 바둑
  • 야구팀
  • 삼성
  • 두산
  • NC
  • 넥센
  • 한화
  • SK
  • 기아
  • 롯데
  • LG
  • KT
  • 메이저리그
  • 일본프로야구리그
  • 게임1
  • 플래시게임
  • 게임토론방
  • 엑스박스
  • 플레이스테이션
  • 닌텐도
  • 모바일게임
  • 게임2
  • 던전앤파이터
  • 마비노기
  • 마비노기영웅전
  • 하스스톤
  • 히어로즈오브더스톰
  • gta5
  • 디아블로
  • 디아블로2
  • 피파온라인2
  • 피파온라인3
  • 워크래프트
  • 월드오브워크래프트
  • 밀리언아서
  • 월드오브탱크
  • 블레이드앤소울
  • 검은사막
  • 스타크래프트
  • 스타크래프트2
  • 베틀필드3
  • 마인크래프트
  • 데이즈
  • 문명
  • 서든어택
  • 테라
  • 아이온
  • 심시티5
  • 프리스타일풋볼
  • 스페셜포스
  • 사이퍼즈
  • 도타2
  • 메이플스토리1
  • 메이플스토리2
  • 오버워치
  • 오버워치그룹모집
  • 포켓몬고
  • 파이널판타지14
  • 배틀그라운드
  • 기타
  • 종교
  • 단어장
  • 자료창고
  • 운영
  • 공지사항
  • 오유운영
  • 게시판신청
  • 보류
  • 임시게시판
  • 메르스
  • 세월호
  • 원전사고
  • 2016리오올림픽
  • 2018평창올림픽
  • 코로나19
  • 2020도쿄올림픽
  • 게시판찾기
  • 오유인페이지
    개인차단 상태
    노랑머플러님의
    개인페이지입니다
    가입 : 09-07-01
    방문 : 4401회
    닉네임변경 이력
    회원차단
    회원차단해제
    게시물ID : programmer_18018
    작성자 : 노랑머플러
    추천 : 2
    조회수 : 870
    IP : 112.168.***.150
    댓글 : 0개
    등록시간 : 2016/07/27 00:31:03
    http://todayhumor.com/?programmer_18018 모바일
    Jenkins로 원격지 API 서버에 war 배포하기
    옵션
    • 창작글

    개인적인 오픈소스 프로젝트 개발을 진행하면서 경험한 내용과 느낌을 간단하게 정리해보기로 했습니다. 현재 github(https://github.com/Pyohwan/JakduK)에 소스 코드가 올라가 있습니다. 또한 K리그 작두왕(https://jakduk.com)이 이 소스 코드로 돌아가는 것입니다.


    현재 K리그 작두왕의 빌드 및 배포는 Jenkins를 통해서 이루어지고 있습니다. 빌드 및 배포를 수행하는 대상은 4곳인데요.

    스테이징과 프로덕션으로 크게 나뉘어 집니다. 또한 RESTful만 담당하는 API 서버와, 웹쪽 렌더링을 담당하는 WEB 서버가 있습니다.


    이번 글에서는 Jenkins로 빌드하고 원격지(프로덕션)에 배포하는 방법을 써볼까 합니다.


    먼저 Jenkins가 설치된 서버가 있어야 합니다. 저는 Centos 6 서버에 rpm으로 Jenkins를 쉽게 설치했습니다. Jenkins 설치에 대해서는 구글에서 검색해보면 많이 나오니 생략하겠습니다.



    JAKDUK Jenkins URL입니다. 물론 계정 정보가 있어야 접속할 수 있습니다.



    현재 3개의 아이템이 등록되어 있습니다.


    JAKDUK_API_Production 아이템의 Build with Parameters를 선택합니다.


    TASK_TYPE에는 각각 build, bowerInstall, deply가 있습니다.





    JAKDUK_API_Production 아이템의 구성을 살펴볼께요.


    Repositories 설정은 Github에 있는 JAKDUK Repository URL를 사용하고 있고, 빌드에 사용할 branch를 설정해 줍니다.



    빌드 환경이 중요합니다.

    Execute shell을 선택하고, TASK_TYPE에 맞는 행동을 수행하도록 쉘 명령어를 사용했습니다.


    WORK="/var/lib/jenkins/workspace"



    if [ "$TASK_TYPE" == "build" ]; then

    $WORK/JakduK_build/gradlew clean test build

    elif [ "$TASK_TYPE" == "bowerInstall" ]; then

    $WORK/JakduK_build/gradlew bowerInstall

    elif [ "$TASK_TYPE" == "deploy" ]; then

    SVR="172.30.1.33"

    ssh jakduk@$SVR "sudo systemctl stop tomcat"

        ssh jakduk@$SVR "sudo rm -rf /usr/local/tomcat/webapps/ROOT"

        scp $WORK/JakduK_build/jakduk-web/build/libs/*.war tomcat@$SVR:/usr/local/tomcat/webapps/ROOT.war

        ssh jakduk@$SVR "sudo systemctl start tomcat"

    fi



    build TASK를 선택하면 gradlew로 test build를 수행하고, bowerInstall TASK를 선택하면 자바스크립트의 의존 라이브러리를 해결해주는 bower 툴을 실행합니다. (이부분은 RESTful 서버로 완전히 분리되면 사라질 예정이고, bowerInstall에 대한 부분은 https://github.com/JakduK/JakduK/blob/master/jakduk-web/build.gradle#L28 를 참고)

    deploy TASK를 선택하면, 원격지(172.30.1.33)의 tomcat을 중지 하고, 빌드한 war를 이동 시킨 다음에 다시 tomcat을 시작합니다.


    하지만 ssh나 scp를 통해 원격지 머신을 컨트롤 하기 위해서는 권한 문제를 해결해야 합니다. deploy TASK를 다시 한번 살펴보면 ssh 시에는 jakduk 유저를 사용하여 sudo 명령어를 수행하고, scp를 할때에는 tomcat 유저로 수행하는것을 볼 수 있습니다.


    1. Jenkins를 별도의 유저(jakduk)로 실행할것. 
    2. Jenkins에서 원격지(172.30.1.33)으로 암호 입력 없이 ssh 수행이 가능할것.


    위 두가지를 해결해야만 Jenkins에서 원격지로 war를 배포할 수 있습니다.


    Jenkins를 별도의 유저(jakduk)로 실행

    Jenkins가 yum install을 통해 설치 되었다면 Jenkins는 기본적으로 jenkins 유저를 하나 만들고, jenkins 유저로 실행하게 됩니다. 하지만 jenkins유저는 nologin 설정이 있기 때문에, 로그인 할수 없는 유저입니다. 원격지의 자원을 마음대로 조정하기 위해서는 jenkins 유저의 공개키가 필요한데, 로그인을 할수 없으니 만들수가 없습니다. 따라서 jakduk유저를 새로 만들었습니다. 


    useradd 명령어로 jakduk 유저를 만듭니다.


    # useradd jakduk



    JAKDUK Jenkins 서버에서 /etc/sysconfig/jenkins 파일을 열어봅니다.


    ## Type:        string

    ## Default:     "jenkins"

    ## ServiceRestart: jenkins

    #

    # Unix user account that runs the Jenkins daemon

    # Be careful when you change this, as you need to update

    # permissions of $JENKINS_HOME and /var/log/jenkins.

    #

    JENKINS_USER="jakduk"



    위 JENKINS_USER의 값을 jakduk로 수정하고, jenkins를 재시작합니다.

    Jenkins에서 원격지(172.30.1.33)으로 암호 입력 없이 ssh 수행

    먼저 Jenkins 서버의 jakduk 유저의 공개키와 비밀키를 생성해야 합니다.

    먼저 jakduk 유저로 바꾸고, ssh-keygen으로 키를 생성합니다.


    # su - jakduk

    # ssh-keygen


    .ssh 디렉토리가 생성되고 ls 명령어로 확인해보면 키를 확인할 수 있습니다.


    [jakduk@localhost .ssh]$ ll

    합계 16

    -rw-rw-r--. 1 jakduk jakduk  410 2016-07-26 00:30 authorized_keys

    -rw-------. 1 jakduk jakduk 1671 2016-06-03 14:04 id_rsa

    -rw-r--r--. 1 jakduk jakduk  410 2016-06-03 14:04 id_rsa.pub

    -rw-r--r--. 1 jakduk jakduk 1965 2016-07-26 00:17 known_hosts


    이제 id_rsa.pub를 원격지(172.30.1.33)에 넣어주면 됩니다.


    원격지에 터미널로 접속하여, useradd 명령어로 jakduk, tomcat 유저를 생성합니다. 굳이 2개의 유저를 생성한 이유는 역할을 분리하기 위해서입니다. jakduk 유저는 systemctl 명령어와 rm 명령어만 사용하기 위함이고, tomcat 유저는 tomcat만 담당하기 위해서입니다.


    먼저 jakduk 유저로 변경하고 .ssh 디렉토리를 생성합니다.


    # mkdir .ssh


    .ssh 로 이동하고나서 authorized_keys를 생성합니다. 이 파일 안에 Jenkins의 jakduk유저 공개키를 넣어줍니다. 그리고 나서 권한을 바꿔주세요.


    # chmod 600 authorized_keys


    이작업을 tomcat 유저도 동일하게 해주면 됩니다.


    참고로 원격지 API 서버의 경우 Centos 7를 설치했습니다. jakduk 유저에 약간의 root 권한을 부여해보겠습니다.


    [root@api ~]# cat /etc/sudoers.d/jakduk-user 

    Cmnd_Alias TOMCAT = /usr/bin/systemctl * tomcat

    Cmnd_Alias RM = /bin/rm


    jakduk ALL=(ALL) NOPASSWD:TOMCAT,NOPASSWD:RM


    jakduk 유저에게 systemctl과 rm 명령어를 비밀번호 입력없이 sudo로 사용할 수 있도록 했습니다.


    또한 /etc/sudoers 파일을 수정해야 합니다. requiretty 옵션을 없애야만 Jenkins서버에서 API 서버로 명령을 날릴 수 있습니다.


    #Defaults    requiretty


    테스트

    Jenkins 서버에서 다음의 명령어를 날려보세요. (꼭 한번은 해야 합니다. 왜냐하면 터미널로 최초 접속시 known_hosts에 등록 해야하기 때문입니다.)


    [jakduk@localhost .ssh]$ ssh [email protected] "sudo systemctl stop tomcat"

    [jakduk@localhost .ssh]$ ssh [email protected] "ls -al"

    합계 28

    drwx------. 3 tomcat tomcat 4096  7월 26 23:18 .

    drwxr-xr-x. 4 root   root     32  7월 25 23:15 ..

    -rw-------. 1 tomcat tomcat  504  7월 26 23:18 .bash_history

    -rw-r--r--. 1 tomcat tomcat   18 11월 20  2015 .bash_logout

    -rw-r--r--. 1 tomcat tomcat  193 11월 20  2015 .bash_profile

    -rw-r--r--. 1 tomcat tomcat  231 11월 20  2015 .bashrc

    drwx------. 2 tomcat tomcat   28  7월 26 23:09 .ssh

    -rw-------. 1 tomcat tomcat 6416  7월 26 23:18 .viminfo




    출처 http://phjang.tistory.com/155
    노랑머플러의 꼬릿말입니다


    K리그 커뮤니티 하나 소개합니다.
    K리그 작두왕


    이 게시물을 추천한 분들의 목록입니다.
    [1] 2016/07/28 12:06:30  110.70.***.78  죽음의일격  550560
    [2] 2016/07/28 19:02:41  183.101.***.207  파랑나비  101056
    푸르딩딩:추천수 3이상 댓글은 배경색이 바뀝니다.
    (단,비공감수가 추천수의 1/3 초과시 해당없음)

    죄송합니다. 댓글 작성은 회원만 가능합니다.

    번호 제 목 이름 날짜 조회 추천
    222
    네이버 메인 뉴스 채널에 추가할 언론사 추천 부탁 [3] 노랑머플러 17/12/17 10:19 288 2
    221
    늦었지만 빼빼로데이 기념 노랑머플러 17/11/18 13:30 102 0
    220
    발기인총회 [12] 노랑머플러 17/11/17 23:14 405 11
    219
    미디어와 축구팬들의 비판이 도가 지나치네요 [2] 펌글 노랑머플러 17/09/07 14:16 82 2
    218
    OpenVpn 설치 창작글 노랑머플러 17/05/25 15:07 46 1
    217
    남자 로션 연한걸로 추천해주세요 [4] 창작글본인삭제금지 노랑머플러 16/07/30 12:51 40 1
    Jenkins로 원격지 API 서버에 war 배포하기 창작글 노랑머플러 16/07/27 00:31 36 2
    215
    5년된 데스크탑 업그레이드 할려고 합니다 [8] 창작글본인삭제금지 노랑머플러 16/06/25 19:51 89 0
    214
    Spring Security에 Spring Social 붙이기 1 [3] 창작글 노랑머플러 16/05/07 22:37 38 11
    213
    2015년 K리그 연봉 현황 [5] 노랑머플러 15/12/24 23:01 43 1
    212
    K리그 진입장벽을 높혀야 합니다 [1] 노랑머플러 15/12/15 11:06 101 1
    211
    청주프로축구단 창단이 결국 무산됐군요 [3] 노랑머플러 15/12/14 11:29 65 0
    210
    중국 슈퍼리그가 거품일까 아닐까요? [7] 노랑머플러 15/12/11 12:41 99 1
    209
    제가 만든 축구 사이트 입니다. [5] 노랑머플러 15/12/10 09:51 74 10
    208
    K리그 2014년 관중수 그래프 노랑머플러 15/11/23 13:12 61 1
    207
    박태하 감독의 옌볜FC가 중국 슈퍼리그로 승격하는군요 노랑머플러 15/10/19 11:34 87 1
    206
    응원하는 팀이 있습니까? [4] 펌글 노랑머플러 15/10/02 12:29 86 3
    205
    임의탈퇴는 왜 있는겁니까? [12] 노랑머플러 15/08/25 18:46 118 11
    204
    Daum에서 아챔 중계 해준다네요 [2] 노랑머플러 15/08/24 15:01 94 2
    203
    전북이 닥공을 포기했다고 하네요 [4] 노랑머플러 15/08/23 14:20 105 1
    202
    올해 K리그 지상파 시청률 [1] 노랑머플러 15/07/22 13:20 120 1
    201
    스포티비+가 다시 K리그 중계를 하네요 [2] 노랑머플러 15/07/20 16:46 71 3
    200
    자바에서 Annotation 만들때 Reflection을 쓰는 이유가? [1] 노랑머플러 15/07/20 12:24 32 1
    199
    6월 21일 토요일 K리그, 야구 지상파 시청률 [2] 노랑머플러 15/06/24 09:44 51 4
    198
    90년대 오락실 게임 이름 찾아주실 분? [7] 노랑머플러 15/06/17 14:49 87 0
    197
    JUnit assertArrayEquals import 관련 질문 [2] 노랑머플러 15/06/16 17:23 12 0
    196
    광저우전 야탑역 거리응원 사진 몇장 [3] 노랑머플러 15/05/28 10:19 111 12
    195
    IE 11 에서 개발자도구로 보면 네트워크가 '중단됨'으로 나오는데.. [2] 노랑머플러 15/05/14 23:44 13 0
    194
    울산 유료관중 6,085명의 의미 [8] 노랑머플러 15/05/13 16:17 77 6
    193
    K리그 작두왕 이번주 화두 노랑머플러 15/04/27 09:22 85 0
    [1] [2] [3] [4] [5] [6] [7] [8]
    단축키 운영진에게 바란다(삭제요청/제안) 운영게 게시판신청 자료창고 보류 개인정보취급방침 청소년보호정책 모바일홈