GitHub 와 Jenkins CI 연동하기

Version Control/Git 2015. 12. 22. 21:37 by 후뤼한잉여

GitHub 와 Jenkins CI 연동하기

1. 개요

GitHub 에서도 Jenkins를 적용해보고자 설정한 내용을 정리한 문서입니다.

2. Jenkins 설정

  1. Jenkins 접속
  2. Jenkins 관리 메뉴 클릭
  3. 플러그인 관리 메뉴 클릭
  4. GitHub 연동 플러그인 설치
    • GitHub plugin
    • GitHub API Plugin
    • GIT plugin
    • GIT clent plugin
  5. 잡 구성 설정
    • GitHub project / Project url : GitHub로 접속가능한 메뉴에 사용될 정보
    • Git 관련 설정은 GitLab 과 Jenkins CI 연동하기 참고
    • 빌드 유발 부분에 Build when a change is pushed to GitHub 체크
    • 그외 배포 등의 설정은 프로젝트 설정에 따라서 설정

3. GitHub 설정

  1. 연동할 GitHub 레파지토리 접속
  2. Settings 메뉴 클릭
  3. Webhooks & services 메뉴 클릭
  4. Services에서 Add Service 메뉴 선택
  5. Jenkins (GitHub plugin)를 찾아서 선택
  6. Jenkins hook url 부분 설정
    [Jenkins URL]/github-webhook/
    • Jenkins URL은 각 프로젝트별 URL을 의미하는것이 아닌 Jenkins Root URL을 의미
  7. Add service 버튼 클릭

CentOS 7 에서 Docker 설치하기

Linux/CentOS 2015. 12. 18. 16:33 by 후뤼한잉여

CentOS 7 에서 Docker 설치하기

1. 개요

Cloud IDE 프로젝트인 Eclipse Che를 설치해보고자 도커로 이용한 설치를 진행할 때 작성 한 내용을 정리한 문서입니다.
Eclipse Che의 경우 설치를 진행 후 구동에 성공은 했지만 영어도 잘 모르기도 하거니와 크롬브라우져에서만 제대로 동작하는 등 여러가지 맘에 들지 않아 삭제했습니다.
나중에 좀 더 안정적이고 메뉴얼도 좀 다듬어질 때 쯤 시도하기록 하고 Docker 설치를 해봤던 것에 만족하며 이 글을 정리합니다.

2. 설치

  1. CentOS Kernerl 관련 업데이트
    사실 Kernerl 관련해서만 업데이트 해도 되지만 그냥 무식하게 전체 업데이트 진행했습니다.
    sudo yum update
    
  2. Docker 레파지토리 등록
    sudo tee /etc/yum.repos.d/docker.repo <<-'EOF'
    [dockerrepo]
    name=Docker Repository
    baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
    enabled=1
    gpgcheck=1
    gpgkey=https://yum.dockerproject.org/gpg
    EOF
    
  3. Docker Engine설치
    sudo yum install docker-engine
    
  4. 사용자 계정을 docker 그룹에 추가.
    sudo usermod -aG docker [유저명]
    
  5. 로그아웃 및 재 로그인
  6. Docker 서비스 실행
    sudo service docker start
    
  • 시작시 Docker Engine 실행되도록 서비스 등록 (옵션)
    sudo chkconfig docker on
    
  • Docker 관련 간단 명령어
    • Docker 프로세스 보기 (어떤게 떠있는지, 포트는 무엇인지 정보 등..)
      docker ps
      
    • Docker 정보 보기 (설치된 Docker Engine의 버전은 뭔지, 이미지가 디스크를 얼마나 차지하는 지 등..)
      docker info
      
    • Docker 실행
      docker run [도커이름]
      
      도커 이름등은 실행할려는 도커이미지에 따라 옵션등과 함께 사용합니다.
      -d옵션은 백그라운드로 실행할 때 사용합니다.
    • Docker 종료
      docker stop [도커 컨테이너 ID]
      
  • Docker 컨테이너, 이미지 삭제 방법
    • 컨테이너 삭제
      docker rm [컨테이너명]
      
    • 이미지 삭제
      docker rmi [이미지 명]
      
  • Docker Engine삭제 방법
    sudo yum -y remove docker-engine.x86_64
    
    도커 이미지 파일, 설정파일등 삭제
    rm -rf /var/lib/docker
    

도커에 관한 정보는 도커 홈페이지를 참고 하시고, 도커 이미지에 대한 정보는 도커 허브 홈페이지 등을 참고하세요.

Let’s Encrypt 이용하여 인증서 생성하기

Linux/CentOS 2015. 12. 17. 17:31 by 후뤼한잉여

Let’s Encrypt 이용하여 인증서 생성하기

1. 개요

무료 보안 인증서인 Let’s Encrypt가 퍼블릭 베타가 나왔다는 소식을 알고 있었으나, 퍼블릭 베타인데다, 설치하려면 서버마다 git을 설치해야하므로 주저하고 있다가 gitlab 서버에서 대표로 설치하고 인증서를 옮기기로 마음먹고 설치한 내용을 정리하기 위해 작성한 문서입니다.

  • 자동으로 아파치등에 설치를 해주지만 영 꺼려져서 인증서만 발급해서 수동으로 설치하기 위해 gitlab 서버에서 진행을 했습니다.
  • Let’s Encrpyt의 경우 90일마다 인증서를 갱신을 해줘야 하는데, 자동으로 지원되는 플러그인(IIS, 아파치 등)의 경우 알아서 갱신을 해주는 장점이 있다고 합니다.

2. 설치 및 설정

  1. git 프로젝트 복사
    git clone https://github.com/letsencrypt/letsencrypt
    
  2. let’s encrypt 프로젝트 디렉토리로 이동
    cd letsencrypt
    
  3. let’s encrypt 실행
    실행 시 의존 설치파일을 자동으로 다운 받고 설치 됩니다.
    이 문서에서는 인증서만 발급 받고, 수동으로 인증을 합니다.
    먼저 테스트가 잘 되는지 확인 후 시도 하는것이 좋습니다.
    무턱 대고 하다보면 ip 제한 등이 걸릴 수 있습니다.
    -d을 이용하여 여러개의 도메인이 가능하지만 잘 안될 수 있으므로 저는 하나씩 진행했습니다.
    [테스트 해보기]
    sudo ./letsencrypt-auto certoly --manual --staging --email [이메일 주소] -d [사용할 도메인 주소]
    또는
    sudo ./letsencrypt-auto certoly --manual --server acme-staging.api.letsencrypt.org/directory --email [이메일 주소] -d [사용할 도메인 주소]
    
    [실제 인증서 발급받기 실행]
    sudo ./letsencrypt-auto certonly --manual --email [이메일 주소] -d [사용할 도메인주소]
    
  4. IP 추적 동의 등 내용이 나오면 확인 후 진행
  5. 웹 서버와 통신 확인
    인증을 하기 위해서 사용하는 웹 서버와 통신이 필요한데, 간단하게 파이썬 서버를 사용하는법도 출력합니다.
    여기서는 기존에 사용중인 아파치 서버와 통신으로 인증을 합니다.
    [엔터]키를 누르라고 나오면 아직 누르면 안됩니다.
    이 아래부터는 웹 서버에서 진행합니다.
    • 인증 파일 생성
      Let’s Encrypt에서 키를 발급하기 위해 서버와 통신을 통해 유효인증을 거치는듯 합니다.
      mkdir -p [웹 ROOT 디렉토리]/.well-known/acme-challenge
      
      cd [웹 ROOT 디렉토리]
      
      화면에 출력된 내용대로 파일 생성
      화면에 나오는 printf 문을 긁어다 실행하시면 됩니다.
      printf "%s" [인증파일 내용] > .well-known/acme-challenge/[인증파일명]
      
  6. 인증서 발급
    웹 서버에 파일이 만들어졌으면 인증서를 발급하는 서버에서 [엔터]키를 누릅니다.
    정상적으로 인증서가 발급되면 /etc/letsencrypt/live 디렉토리 밑으로 [도메인주소] 디렉토리가 생성되고 그 안에 인증서 파일들이 생성됩니다.
    생성 되는 파일은 아파치 설정에 아래와 같이 대응됩니다.
    SSLCertificateFile에 SSLCACertificateFile에 사용하는 fullchain.pem을 사용하고
    SSLCertificateFile와 SSLCertificateKeyFile만 사용해도 됩니다.

    • [SSLCertificateFile] >> [/etc/letsencrypt/live/도메인주소/cert.pem]
    • [SSLCertificateChainFile] >> [/etc/letsencrypt/live/도메인주소/chain.pem]
    • [SSLCertificateKeyFile] >> [/etc/letsencrypt/live/도메인주소/privkey.pem]
    • [SSLCACertificateFile] >> [/etc/letsencrypt/live/도메인주소/fullchain.pem]

    이 외에도 설치 방법에 따라 여러 형태로 지원을 하고 있으니 자세한 옵션이나 내용은 Let’s Encrypt 설치 가이드를 참고 하셔서 진행하시면 됩니다.

  7. 인증서 이동
    발급 받은 인증서를 각 서버로 전송을 해야하는데 SSH를 이용한 SCP 명령어를 사용했습니다.
    scp -r [도메인주소] [계정명]@[서버주소]:[복사할 위치]
    

  • need string or buffer, NoneType found 오류 발생시
    테스트와 발급 중간에 무언가 잘 못되어 이런 오류가 발생했었는데, 발급 받아야하는 인증서 중 몇개는 인증서가 발급되어 /etc/letsencrypt 디렉토리를 지울 수 없어, /etc/letsencrypt/account안에 있는 서버 정보와 /etc/letsencrypt/archive/etc/letsencrypt/live에 있는 제대로 발급 받지 못한 인증서를 삭제 했다.
    그 외에 다른 문제가 생겼을 때는 /root/.cache디렉토리를 삭제하고 다시 시도했다.

  • 오류가 나면 /var/log/letsencrypt/letsencrypt.log파일을 통해 로그를 볼 수 있으며, 인증서 발행 명령어에 --debug 옵션을 주면 오류가 날 경우 오류 메세지를 콘솔에 바로 출력해준다.

  • 무료 DDNS를 이용하다보니 같은 DDNS의 발행 제한의 걸려 총 4개중 2개만 발행되고 나머지 2개는 약 7일 정도를 대기해야하는 상황에 놓였다.

  • 참고로 인증서의 정상 등록여부는 crt.sh이라는 사이트에서 검색해봐도 알 수 있다.
    인증에 성공한 주소라면 이 사이트에서 검색이 될 것이다.

  • 인증서 발행 후 얼마나 튼튼한지 인증서를 테스트 할 수 있는 사이트 ssllabs를 통해 테스트 해봐도 좋다.

  • 무슨 문제인지 Jenkins의 경우 기존에 사용하던 인증서 방법으로는 서버가 실행되지 않아 다른 인증방법으로 실행을 시키도록 변경하였다.

    sudo openssl pkcs12 -inkey [인증서 위치]/privkey.pem -in [인증서 위치]/fullchain.pem -export -out keys.pkcs12
    
    sudo keytool -importkeystore -srckeystore keys.pkcs12 -srcstoretype pkcs12 -destkeystore jenkins.jks
    
    sudo vi /etc/sysconfig/jenkins
    

    JENKINS_ARGS 설정 변경

    JENKINS_ARGS=" --httpsKeyStore=[인증서 위치]jenkins.jks --httpsKeyStorePassword=[설정한 암호]
    

WEB 개발시 한글 인코딩 문제

Trouble Shooting 2015. 12. 14. 23:28 by 후뤼한잉여

한글 인코딩 문제

개인적으로 겪은 인코딩에 대한 문제와 해결 방법에 대해서 간단히 정리해보고자 문서를 남깁니다.

1. POST 방식

  1. JSP 페이지에서의 한글 처리
    다른 페이지 또는 서버로 부터 오는 정보가 아닌, 페이지 자체의 페이지 인코딩이 필요할 때 합니다.
    예를 들어 서버로 부터 넘겨받은 파라미터값은 잘 불러와지는데, 페이지 자체의 한글이나, 한글로된 리소스를 불러올 때 필요합니다.
     한글 한글
     <img src="/resources/한글파일.png" />
    
    위와 같은 소스가 깨질 때 pageEncoding 설정을 변경합니다.
     <%@ page pageEncoding="UTF-8"%>
    
  2. 다른 페이지에 넘기는 파라미터에 대한 한글 처리

    1. HttpServletResponse 객체를 이용한 설정 방법
      • 서블릿에서 처리하는 방법
        httpServletResponse.setCharacterEncoding("UTF-8");
        
      • JSP에서 처리하는 방법
        <% response.setCharacterEncoding("UTF-8"); %>
        
    2. 웹 서버의 배치 기술서(Deployment Descriptor, DD) 파일에 필터 설정

      • Tomcat Container

        [web.xml][Spring 사용 시]
        <filter>
          <filter-name>encodingFilter</filter-name>
          <filter-class>
              org.springframework.web.filter.CharacterEncodingFilter
          </filter-class>
          <init-param>
              <param-name>encoding</param-name>
              <param-value>UTF-8</param-value>
          </init-param>
        
          <init-param>
              <param-name>forceEncoding</param-name>
              <param-value>true</param-value>
          </init-param>
        </filter>
        
        <filter-mapping>
          <filter-name>encodingFilter</filter-name>
          <url-pattern>/*</url-pattern>
        </filter-mapping>
        

        스프링이 아닌 자체 프레임워크등을 사용시에는 직접 필터를 구현하여 설정 할 수도 있습니다.
        아래의 소스는 직접 필터를 구현하여 처리하는 간단한 예 입니다.
        UTF-8 부분을 원래 서버에 설정에서 받아오도록 해야하지만 간단한 예이므로 넘어갑니다.

        [필터 클래스]
        import java.io.IOException;
        
        import javax.servlet.Filter;
        import javax.servlet.FilterChain;
        import javax.servlet.FilterConfig;
        import javax.servlet.ServletException;
        import javax.servlet.ServletRequest;
        import javax.servlet.ServletResponse;
        
        public class CharacterEncodingFilter implements Filter{
          FilterConfig config;
        
          @Override
          public void init(FilterConfig config) throws ServletException {
              this.config = config;
          }
        
          @Override
          public void doFilter(ServletRequest request, ServletResponse response, FilterChain nextFilter)
                  throws IOException, ServletException {
              request.setCharacterEncoding("UTF-8");
              nextFilter.doFilter(request, response);
          }
        
          @Override
          public void destroy() { }
        }
        
        [배치 기술서 파일]
        <filter>
          <filter-name>CharacterEncodingFilter</filter-name>
          <filter-class>test.filters.CharacterEncodingFilter</filter-class>
        
          <init-param>
              <param-name>encoding</param-name>
              <param-value>UTF-8</param-value>
          </init-param>
        </filter>
        
        <filter-mapping>
          <filter-name>CharacterEncodingFilter</filter-name>
          <url-pattern>/*</url-pattern>
        </filter-mapping>
        

2. GET 방식

  1. 서버에서의 처리
    요청에 의해 넘어온 스트링 값을 기본 형식인 ISO-8859-1의 바이트형식으로 읽어들여 한글을 처리하기 위한 형식으로 새로운 스트링을 생성한다.
     new String(request.getParameter("파라미터명").getBytes("8859_1"), "UTF-8");
     new String(request.getParameter("파라미터명").getBytes("ISO-8859-1"), "UTF-8");
    
  2. 웹 서버의 서버 설정파일 수정
    • Tomcat Container
      [server.xml]
      <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8" />
      ...
      <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" />
      

      Conntector 설정 부분에 URIEncoding 설정을 하는 방법이다.
      서버로 들어오는 요청에 대해 인코딩 설정을 하는 부분으로 알고 있는데, 톰캣의 경우 8080은 기본 포트이고, 8009는 아파치와의 AJP 프로토콜을 통한 연동시 주로 사용하는 포트로 알고 있다.
      즉, 8080은 톰캣에 직접 요청시에 대한 인코딩 설정이며, 8009부분은 아파치를 통해 넘어오는 값에 대한 설정으로 이해하고 있다.

자바스크립트에서의 인코딩/디코딩

내장함수 명 설명
escape() 영문 알파벳, 숫자, 일부 특수 문자(@, *, -, _, +, ., /)를 제외한 모든 문자를 인코딩
1바이트 문자는 %XX의 형태로, 2바이트 문자는 %uXXXX의 형태로 변환하여 표현
unescape() escape()로 인코딩 된 내용을 디코딩
encodeURI() URL 주소표시를 나타내는 특수문자(:, ;, /, =, ?, &)를 제외한 모든 문자 인코딩
decodeURI() encodeURI()로 인코딩 된 내용을 디코딩
encodeURIComponent() 영문 알파벳, 숫자, 일부 특수문자(-, _, !, ~, *, ‘, (, ))를 제외한 모든 문자를 인코딩
/도 인코딩하기 때문에 URL 경로를 포함해서 사용시 주의가 필요하다.
decodeURIComponent() decodeURIComponent()로 인코딩 된 내용을 디코딩

자세한 내용은 모질라 재단MS사의 TechNet등 문서를 보는것이 좋을것 같습니다.

  • 이클립스에서 테스트나 익스플로러에서 테스트시 직접 URL에 한글을 입력하면 위 설정들에도 불구하고 한글이 깨져나오는 증상이 있었습니다.
    나름의 테스트 결과 갓 구글을 제외한 대형 포털인 네이버, 다음에서도 GET 방식으로 직접 한글을 입력하면 제대로 처리가 되지 않는걸로 확인되었습니다.
  • 자바스크립트를 통해 URL Encoding을 해서 값을 넘겨줘야 잘 처리되는것을 확인 할 수 있었습니다.
  • 처리할 때의 인코딩 방식은 encodeURI()나 encodeURIComponent() 사용하면 되는데, URL 전체 인코딩시에는 encodeURI()를 사용해야 합니다.
    대형 포털에서도 처리 안해주는거에 괜히 힘 빼지 않기로 생각했습니다.
    직접 테스트시에는 직접 프로그램을 만들어서 하거나, URL 인코딩/디코딩 사이트을 이용하여 한글 부분만 처리해서 입력하는 것이 머리가 덜 빠지는 길이라고 생각하고, 나중에 다국어 처리를 해볼 일이 있다면 그 때 내용을 추가하던 할 것 같습니다.
    아니면 브라우저의 콘솔모드를 이용하여 인코딩하는 방법도 하나의 방법입니다.
    마지막으로 자라나라 머리머리~!

'Trouble Shooting' 카테고리의 다른 글

R 패키지 설치 중 rJava 설치 오류나는 경우  (0) 2016.03.11

Jenkins CI 와 Slack 연동하기

CI/Jenkins 2015. 12. 10. 16:38 by 후뤼한잉여

Jenkins CI 와 Slack 연동하기

1. 개요

Jenkins CI를 적용하면서 빌드에 대한 내용도 슬랙으로 받아보는 테스트를 진행해보고자 설정한 내용을 정리한 문서입니다.
잉여이기 때문에 실무에서 사용하는 내용이 아니지만 나중에라도 써먹거나 누군가한테 도움이 될만한 힌트용으로라도 남기고자 합니다.
기본적인 진행 방법은 GitLab과 Slack 연동하기과 동일하므로 그림은 일체 넣지 않았습니다.

2. Slack 설정

Slack에 접속된 상태(PC 앱, 웹) 기준으로 진행합니다.

  1. Slack 왼쪽 상단에 Slack 도메인 선택
  2. 메뉴 중 [Configure Integrations] 메뉴 클릭
  3. 연동할 서비스 목록에 Jenkins 입력하여 검색
  4. 검색 된 Jenkins CI 클릭
  5. Jenkins CI에서 포스팅할 채널을 선택 후 [Add Jenkins CI Intergration] 버튼 클릭
  6. Team DomainIntegration Token 어딘가에 임시로 기록
    (사실 JenkinsCI와 Slack 두 페이지를 동시에 띄어서 작업하겠지만 메뉴얼 작성시에는 동시 설명이 어려우므로… 기록 한다는 형식으로 작성하였습니다.)
  7. Save Settins 메뉴 클릭

3. Jenkins CI 설정

  1. Jenkins CI 접속
  2. [Jenkins 관리] 메뉴 클릭
  3. [플러그인 관리] 메뉴 클릭
  4. 설치 가능 탭에서 Slack Notification Plugin 플러그인 설치
  5. [Jenkins 관리] 메뉴 클릭
  6. [시스템 설정] 메뉴 클릭
  7. 중간 부분에 Global Slack Notifier Settings에 슬랙에서 발급받은 정보 입력
    • Team Domain : 슬랙 도메인 입력
    • Integration Token : 슬랙에서 발급 받은 토큰 입력
    • Channel : 포스트할 채널 입력. 콤마(,)로 여러 채널 포스팅 지원
    • Build Server URL : 빌드 서버 즉, CI 서버 주소 입력
  8. [저장] 버튼 클릭
  9. Job(프로젝트) 선택
  10. [구성] 클릭
  11. Slack Notifications 부분에 슬랙으로 알림 할 상항을 설정.
    • Notify Build Start : 빌드 시작 시
    • Notify Aborted : 사용자가 임의로 중지 시
    • Notify Failure : 빌드 실패 시
    • Notify Not Built :
    • Notify Success : 빌드 성공 시
    • Notify Unstable :
    • Notify Back To Normal :
  12. [빌드 후 조치 추가] 리스트 박스를 클릭 후 Slack Notifications를 등록
  13. [저장] 버튼 클릭

CentOS 7 에서 VMWare Tools 설치

Linux/CentOS 2015. 12. 9. 13:04 by 후뤼한잉여

CentOS 7 에서 VMWare Tools 설치

1. 개요

개인적으로 테스트용도로 사용하는 서버를 노트북에 VMWare를 통해 구성해서 사용하고 있는데, 노트북 절전 모드 이후 다시 실행시 리눅스 서버시간이 멈춰있어 시간 동기화에 필요성을 고민 하던 중 VMWare Tools을 설치하면 PC와의 시간이 동기화가 된다는 문서를 보고 설치를 한 내용을 정리한 문서입니다.

2. 설치하기

  1. VMware에서 제공되는 이미지를 CD ROM에 Mount 시킨다. (Window)
  2. linux상에서 kernel을 업데이트 한다. (이하 Linux)
    kernel 업데이트를 하지 않으면 설치 중 문제가 발생하므로 설치 하도록 한다.
    sudo yum update kernel
    
  3. linux를 재부팅 한다.
    reboot
    
  4. 의존 패키지 설치
    sudo yum install gcc kernel-devel
    
  5. CD-ROM을 linux상에 Mount
    sudo mkdir /mnt/cdrom
    sudo mount /dev/cdrom /mnt/cdrom
    
  6. VMWareTools 설치파일 복사
    sudo cp /mnt/cdrom/VMwareTools*.gz /tmp
    
  7. CD-ROM UnMount 작업
    sudo umount /dev/cdrom
    
    윈도우 VMWare에서 CD-ROM disconect 진행
    
  8. VMWareTools 압축 해제
    cd /tmp
    sudo tar -C /tmp -zxvf VMwareTools*.gz
    
  9. VMWareTools 설치 진행

    cd vmware-tools-distrib
    sudo ./vmware-install.pl
    

    처음 설치시 YES 입력 이후엔 엔터만 쳐줘도 설치가 진행이 된다.

  10. 동기화 설정하기

    vmware-toolbox-cmd timesync enable
    

    자세한 문서는 vmware 홈페이지에서 확인

Jnekins 과 Tomcat 8 연동하여 WAR 파일 배포

CI/Jenkins 2015. 12. 9. 00:37 by 후뤼한잉여

Jnekins 과 Tomcat 8 연동하여 WAR 파일 배포

1. 개요

SSH를 통해 직접 배포를 해도 되지만, 톰캣 컨테이너를 통해 좀 더 자동화를 시키기 위해 설정한 내용을 정리한 문서입니다.

2. Tomcat 설정

톰캣을 외부 또는 웹에서 deploy하기 위해서 deploy관련 서비스에 대해서 권한설정을 해줘야 한다.

vi [톰캣 설치경로]/conf/tomcat-users.xml

세부 설정은 아파치 톰캣 사이트에서 확인이 가능하다.

<tomcat-users>와 </tomcat-users> 사이에 <role>과 <user>를 등록해서 사용해야 한다.
<role>에는 4가지 역할이 존재한다.
1. manager-gui : 톰캣에서 웹으로 제공하는 서비스 이용시 사용한다.
2. manager-status : "Server Status"페이지 접속시에만 사용한다.
3. manager-script : 스크립트를 이용한 배포시 사용하는 듯 하다.
4. manager-jmx : jmx 사용시 사용한다.

대략적인 사용방법은 아래와 같다.

<role rolename="역할명" />
<user username="사용할ID", password="사용할PW" roles="역할명1, 역할명2..." />

Jnekins 연동을 위해서 설정은 아래와 같이 진행하였다.

<tocamt-users>
...
    <role rolename="manager-script" />
    <user username="아이디" password="암호" roles="manager-script" />
</tomcat-user>

3. Jenkins 설정

  1. [Jenkins 관리] -> [플러그인 관리] -> Deploy to container Plugin 플러그인 설치
  2. Job 선택 -> [구성] 메뉴 클릭
  3. 빌드 후 조치 부분에 [빌드 후 조치 추가] 버튼을 클릭 후 Deploy war/ear to a conatiner 선택
  4. Tomcat Deploy 설정 후 저장
    ① WAR/EAR files은 워크스페이스에서 가져올 WAR 또는 EAR파일을 어디에서 어떤 이름으로 가져올지를 설정하는 곳이다.
    ② Context path는 배포시 사용할 컨텍스트를 지정한다. /test로 지정하면 http://URL/test/index.jsp 식으로 접속이 가능해진다.
    현재 톰캣 7.x까지 지원하는걸로 나오는데 7.x 선택 후 8 버전도 사용이 가능하다.
    ③ Container는 사용하는 Container를 선택하는 곳이다.
    ④ Manager username은 앞서 톰캣에서 설정한 아이디를 입력한다.
    ⑤ Manager password도 앞서 톰캣에서 설정한 암호를 입력한다.
    ⑥ Tomcat URL은 톰캣에 접속할 때 사용하는 포트까지의 경로이다. http://IP:포트식을 의미한다.
    

'CI > Jenkins' 카테고리의 다른 글

Jenkins CI 와 Slack 연동하기  (0) 2015.12.10
Jenkins와 SSH를 이용한 배포 연동  (0) 2015.12.08
Jenkins 와 Gradle을 이용한 Build 연동  (0) 2015.12.08
Jenkins HTTPS 적용하기  (0) 2015.11.22
CentOS 7 에 Jenkins CI 설치하기  (1) 2015.11.21

CentOS 7 로컬 DNS 설정하기

Linux/CentOS 2015. 12. 8. 23:20 by 후뤼한잉여

CentOS 7 로컬 DNS 설정하기

1. 개요

개인 서버를 구성하다 보면 내부 IP에서 사용할 때도 있고 외부 IP에서 사용할 때도 있는데
jenkins의 빌드 상태 뱃지등을 내부 IP로 하기도 외부 도메인으로 하기도 애매한 상황이 발생하는데 이럴 때 로컬DNS를 이용하여 외부에서 사용하는 도메인을 그대로 사용할 수 있도록 설정한 내용을 정리한 문서입니다.

2. CentOS 7 로컬 DNS 설정하기

  1. 로컬 DNS파일인 hosts파일을 열어서 수정
    sudo vi /etc/hosts
    
    내부 IP주소와 로컬 DNS를 이용해 사용할 도메인명을 등록
    [IP주소]    [도메인명]
    
  2. 호스트네임 데몬 재시작
    sudo systemctl restart systemd-hostnamed
    

Jenkins와 SSH를 이용한 배포 연동

CI/Jenkins 2015. 12. 8. 11:40 by 후뤼한잉여

Jenkins와 SSH를 이용한 배포 연동

1. 개요

Jenkins를 통해 빌드를 해보았으니 이번엔 배포에 대한 부분을 알아보고자 설정한 내용을 정리한 문서입니다.

2. Jenkins 설정

  1. Jenkins 접속
  2. 왼쪽 메뉴 중 [Jenkins 관리] 메뉴 클릭
  3. [시스템 설정] 메뉴 클릭
  4. 중간의 ‘Publish over SSH’부분에서 ‘SSH Servers’에 [추가]버튼 클릭
  5. SSH로 접속할 대상 서버의 정보를 입력후 저장한다.

3. Jenkins Job 설정

  1. Job(프로젝트) 선택
  2. 왼쪽 메뉴 중 [구성] 메뉴 클릭
  3. 제일 하단 부분에 ‘빌드 후 조치’ 부분에 [빌드 후 조치 추가] 메뉴 클릭 후 [Send build artifacts over SSH]를 클릭
    • 만약 이 메뉴가 안보인다면 [Publish Over SSH] 플러그인을 설치
  4. SSH로 작업할 내역 입력

    • SSH Server Name : Jenkins 시스템 설정에서 등록한 SSH 서버 중 배포할 서버 선택
    • Souce files : 어떤 파일을 배포할 것인지 설정. **/*.jar는 모든 폴더의 jar로 끝나는 파일을 의미한다.

    • Remove prefix : 제거할 접두사를 의미하는데, 기본적으로 작업공간/빌드된 파일들로 되어있다. 예를들어 작업공간/A/B/C/test.jar가 있을때 C/test.jar로 배포하고 싶다면 여기에 A/B를 입력해준다.

    • Remote directory : Jenkins 시스템 설정에서 SSH 설정시 지정한 홈 디렉토리 뒤에 추가로 입력하는 디렉토리인데, 배포할 파일이 저장될 디렉토리를 지정한다. 이 때 없으면 새로 생성해주지 않기 때문에 미리 만들어 져 있어야 한다.
    • Exec command : 배포 후 실행 할 명령어를 입력하는 곳으로 리눅스 설정에 따라 특정 명령어를 사용하지 못하므로 설정을 잘 해주거나, 특정 명령어의 절대경로를 입력해주는 방식으로 해결을 해야 한다.

이제부터는 Gitlab을 통해 GitServer로 push를 하면 Webhook 설정에 의해 Jenkins CI에서 Gradle로 빌드를 하고, 지정한 서버로 SSH를 통해 배포가 가능해졌다.

Jenkins 와 Gradle을 이용한 Build 연동

CI/Jenkins 2015. 12. 8. 10:00 by 후뤼한잉여

Jenkins 와 Gradle을 이용한 Build 연동

1. 개요

Ant를 조금 사용해본 것 외에 의존 라이브러리까지 관리해주는 Maven을 사용해 본 적이 없었습니다.
그러던 중 Gradle이라는 Ant와 Maven의 장점을 녹여냈다는 Gradle이 요즘 뜨는 추세라고 하여 Maven을 건너뛰고 Gradle을 사용하기로 마음을 먹었습니다.
Gradle에 대해서도 간단한 사용법 정도로만 알고 있지만 우선 Jenkins와의 연동을 통해 Gitlab에 푸시된 소스를 빌드할 수 있을 정도로의 환경을 구축을 해본 내용을 정리한 글입니다.
참고로 사용된 OS는 CentOS 7 Minimal 버젼입니다.

2. Gradle 설치

Gradle을 통한 빌드를 사용하려면 Gradle을 설치해야합니다. Maven이나 Ant또한 마찬가지입니다.

  1. 의존 패키지 다운로드
    centos minimal 버젼에서는 unzip 패키지가 설치되어 있지 않기 때문에 추가로 설치하였습니다.
     sudo yum install unzip
    
  2. Gradle 바이너리 파일 다운로드
    작성일 기준 최신 버전인 2.9버젼을 다운로드 합니다.
     wget https://services.gradle.org/distributions/gradle-2.9-bin.zip
    
  3. 다운 받은 Gradle 압축파일 압축 해제
     unzip gradle-2.9-bin.zip
    
  4. 이름 변경
    사용 편의상 이름을 변경한 부분으로 안하셔도 됩니다.
     mv gradle-2.9-bin.zip gradle
    
  5. gradle 위치 이동
    관리하기 편한 곳으로 이동시키기 위해 한 작업으로 안하셔도 됩니다.
     sudo mv gradle /usr/lib
    

3. Jenkins 설정

  1. Jenkins 접속
  2. 왼쪽 메뉴 중 [Jenkins 관리] 메뉴 클릭
  3. [플러그인 관리] 메뉴 클릭
  4. [설치 가능] 탭에서 Gradle plugin 플러그인 설치

     

  5. Jenkins 재시작 후 Jenkins 재접속

  6. 왼쪽 메뉴 중 [Jenkins 관리] 메뉴 클릭
  7. [시스템 설정] 메뉴 클릭
  8. 중간에 Gradle 메뉴에서 [Gradle installations…] 버튼 클릭
  9. [Add Gradle] 버튼 클릭
  10. Jenkins에서 구분할 Gradle 이름과, Gradle이 설치된 디렉토리 입력
    • 저는 앞서 /usr/lib/gradle로 이동시켰기 때문에 /usr/lib/gradle이 gradle 홈 디렉토리가 되었습니다.

4. Jenkins Job 설정

여기에서는 기존 가지고 있는 Job의 내용을 변경을 하지만, 신규 등록 할 때는 신규 등록시 설정하는 화면에서 진행하면 됩니다.
신규 등록하는 방법은 GitLab 과 Jenkins CI 연동하기를 참고하셔서 등록하시면서 추가적인 부분만 이 글을 보시면 됩니다.

  1. Jenkins 접속
  2. 변경할 Job(Project)를 선택
  3. 왼쪽 메뉴 중 [구성] 메뉴 클릭
  4. 중간에 Build 부분에 [Add build step]을 클릭하면 나오는 메뉴중 [Invoke Gradle script] 선택
  5. 설치되어있는 Gradle 중 사용할 Gradle을 선택하고, 작업할 Tasks를 입력 및 Build시 사용할 Build File의 이름을 입력해준 후 [저장] 해주면 됩니다.

 

이 후에는 설정에 따라 Git push를 통해 빌드가 잘 되는지 확인등을 해보시면 됩니다.
위에 Build 설정한 내용은 지극히 간단한 내용만 등록하였습니다.
추가적인 부분은 Gradle과 Jenkins를 어떻게 쓰냐에 따라 달라집니다.

Nav