모바일 오유 바로가기
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도쿄올림픽
  • 게시판찾기
  • 게시물ID : programmer_18018
    작성자 : 노랑머플러
    추천 : 2
    조회수 : 864
    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 초과시 해당없음)

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

    번호 제 목 이름 날짜 조회 추천
    18024
    JavaScript 질문입니다 [7] 본인삭제금지 lv.27포마피 16/07/27 15:54 471 0
    18023
    스프링을 사용해 웹을 만들려면... [5] 웹지망생 16/07/27 14:21 606 0
    18022
    #define 관련 질문입니다. [3] 본인삭제금지 자르반고등어 16/07/27 12:14 425 0
    18021
    c++ mfc에서 excel 읽는법좀 알려주세요 [2] 본인삭제금지 원래커플 16/07/27 11:35 1998 0
    18019
    웹개발자 개인공부 갈피를 좀 잡아주세요..ㅠㅠㅠㅠㅠㅠㅠ [5] 종구다 16/07/27 08:54 543 0
    Jenkins로 원격지 API 서버에 war 배포하기 창작글 노랑머플러 16/07/27 00:31 865 2
    18016
    현업에서 안드로이드 개발툴은 아직 이클립스가 대세인가요? [6] 종구다 16/07/26 23:48 956 0
    18014
    데이터베이스 와 웹프로그래밍 중에 어떤 과정을 들어야할지 조언부탁합니다 [4] 사색을하자 16/07/26 18:48 480 0
    18013
    [안드] HttpUrlConnection에 해더를 추가 하고 싶습니다. [4] 아롱아밥먹자 16/07/26 16:59 771 0
    18012
    ltdis13n.dll 파일 중요한건가요 본인삭제금지 꿀꼼 16/07/26 16:21 220 0
    18010
    예전에 html공부하던때가있었는데.. [4] 꾸르렁꾸르렁대 16/07/26 08:15 431 0
    18009
    다들 뭐하십니까 기회가 왔습니다. [1] 창작글본인삭제금지 irowin 16/07/26 03:02 653 7
    18008
    병원 전산직에 대해 궁금합니다! [4] 창작글베스트금지베오베금지 일찍오래 16/07/25 23:24 5638 1
    18007
    java 초보적 질문도 받아주시나요?~? [2] 본인삭제금지 그린파이 16/07/25 20:24 487 0
    18005
    php개발자분들 질문이 있습니다. [3] 베스트금지베오베금지본인삭제금지외부펌금지 검은새벽달 16/07/25 17:25 526 0
    18004
    JTable refresh 질문입니다. [1] 본인삭제금지 あかねちゃん 16/07/25 13:40 2436 0
    18003
    ㅄㄱ>>엑셀 랜덤 생성 질문 드립니다.!! [3] 본인삭제금지 LOCCITANE 16/07/25 10:29 420 0
    18002
    jsp 오라클 연동이 안됩니다. [2] 창작글베스트금지베오베금지본인삭제금지외부펌금지 웹지망생 16/07/25 01:57 637 1
    18001
    리눅스초보입니다 컴파일 질문이요 [1] 흥안알랴줌 16/07/24 15:55 527 0
    18000
    로드밸런싱 L2 에 대해서 정확히 설명해주실 수 있나요? [3] 본인삭제금지 dodooli 16/07/24 15:24 684 0
    17998
    미러링은 우리 영역 아니었던가? [24] 본인삭제금지외부펌금지 irowin 16/07/24 02:02 706 11
    17997
    웹개발8년차 진로가 고민되네요 [4] 외부펌금지 푸른열정 16/07/23 23:16 1286 3
    17996
    안드로이드 스튜디오에서의 에러인데 본인삭제금지 엿먹이기 16/07/23 22:49 705 0
    17995
    안드로이드 notification에 버튼 andgate 16/07/23 15:40 342 0
    17994
    1인게임 개발이 돈벌이가 되나요 ?? [12] 가온이다아 16/07/23 11:50 8072 0
    17993
    html로 레이아웃 지정할때... [3] 웹지망생 16/07/23 00:59 678 0
    17992
    [엑셀] 질문 드립니다 [3] 베오베금지본인삭제금지외부펌금지 지혜의눈물 16/07/22 17:28 476 0
    17989
    안녕하세요. 컴공 3학년생입니다. [7] 본인삭제금지 카토리 16/07/22 14:25 1377 3
    17988
    웹프로그래밍쪽으로 취업훈련을 받았었는데요 네트워크쪽은 어떤가요? [4] 사색을하자 16/07/22 14:10 650 0
    17986
    ㅄㄱ>> 이곳에 질문 하는게 맞을까요?;; [2] 본인삭제금지 LOCCITANE 16/07/22 10:21 370 0
    [◀이전10개] [141] [142] [143] [144] [145] [146] [147] [148] [149] [150] [다음10개▶]
    단축키 운영진에게 바란다(삭제요청/제안) 운영게 게시판신청 자료창고 보류 개인정보취급방침 청소년보호정책 모바일홈