devlos
Devlos Archive
devlos
전체 방문자
오늘
어제
08-23 07:49

최근 글

  • 분류 전체보기 (104)
    • 프로젝트 (1)
    • MSA 설계 & 도메인주도 설계 (9)
    • 클라우드 컴퓨팅 & NoSQL (84)
      • [Cilium Study] 실리움 스터디 (5)
      • [KANS] 쿠버네티스 네트워크 심화 스터디 (12)
      • [T101] 테라폼 4기 스터디 (8)
      • [CICD] CICD 맛보기 스터디 (3)
      • [T101] 테라폼 기초 입문 스터디 (6)
      • [AEWS] Amazon EKS 워크숍 스터디 (7)
      • [PKOS] 쿠버네티스 실무 실습 스터디 (7)
      • Kubernetes (13)
      • Docker (7)
      • Redis (1)
      • Jenkins (3)
      • Terraform (1)
      • Ansible (4)
      • Kafka (1)
    • 프로그래밍 (7)
      • Spring Boot (5)
      • Broker (1)
    • 성능과 튜닝 (1)
    • ALM (0)
    • 기타 (2)

인기 글

태그

  • 테라폼
  • 데브옵스
  • ddd
  • 쿠버네티스 스터디
  • t101 4기
  • 도커
  • MSA
  • PKOS
  • kOps
  • CloudNet@
  • docker
  • terraform
  • DevOps
  • 쿠버네티스
  • Kubernetes

티스토리

최근 댓글

hELLO · Designed By 정상우.
devlos
클라우드 컴퓨팅 & NoSQL/Jenkins

[젠킨스(Jenkins)] Jenkins를 이용한 pipeline 구축

[젠킨스(Jenkins)] Jenkins를 이용한 pipeline 구축
클라우드 컴퓨팅 & NoSQL/Jenkins

[젠킨스(Jenkins)] Jenkins를 이용한 pipeline 구축

2021. 4. 19. 02:13
반응형

이번 포스팅에서는 Jenkins를 이용하여 파이프라인(pipeline)을 구축하는 법에 대해서 정리한다.


이전 포스팅에서 다루었던 앤서블(Ansible)을 사용한 Serverspec 테스트를 연결하여 진행한다. Serverspec에 대해서는 아래의 링크에 정리해 두었다.

 

2021.04.15 - [클라우드 컴퓨팅 & NoSQL] - [앤서블(Ansible)] Serverspec 사용법

 

[앤서블(Ansible)] Serverspec 사용법

이번 포스팅에서는 Serverspec이라는 도구를 앤서블에 적용하는 방법에 대해서 알아보도록 한다. Serverspec은 인프라(서버) 테스트 수행을 간단하고 쉽게 하기 위한 도구이다. Serverspec - Home About V2 Ser

devlos.tistory.com

 

Pipeline으로 작업을 연결하는 방법은 두 가지이다.

  • 직접 연결: 프로젝트의 후속 작업을 명시적으로 정의하고 직접 연결하여 순차적으로 실행하는 방법
  • 총괄 프로젝트를 이용한 연결: 총괄하는 프로젝트를 별도로 정의하고 그 안에서 프로젝트 관계를 정의해 파이프라인으로 실행하는 방법

이제부터 두 가지 방법에 대해서 알아보도록 한다.

 

1. 준비사항

기본적으로 Ansible을 실행하는 프로젝트와 Serverspec을 실행하는 프로젝트가 정의되어야 한다.

# Sample Ansible 코드 복제
$ git clone https://github.com/devops-book/ansible-playbook-sample.git /tmp/ansible-playbook-sample

# Jenkins 실행권한 추가
$ vi /etc/sudoers.d/jenkins
jenkins ALL=(ALL) NOPASSWD:ALL

2. 직접 연결

2.1. Ansible 프로젝트 생성

"New Item"에서 "exec-ansible"이라는 프로젝트를 생성하고 프로젝트 방식은 "Freestyle project", "Execute shell" 필드에 다음 명령어를 입력한다.

cd /home/vagrant/ansible-playbook-sample
ansible-playbook -i development site.yml --diff

 

 


2.2. 프로젝트 빌드 확인

생성된 프로젝트에서 [Build Now] 버튼을 클릭하면 다음과 같이 정상적으로 빌드가 되는 것을 확인할 수 있다.


2.3. Serverspec 프로젝트 생성

동일한 방법으로 "exec-serverspec" 프로젝트를 생성한다.

그리고 실행 스크립트를 다음과 같이 설정한다.

 

cd /tmp/serverspec_sample
/usr/local/bin/rake spec

2.4. 프로젝트 빌드 확인

위의 단계에서 처럼 생성된 프로젝트에서 [Build Now] 버튼을 클릭하면 다음과 같이 정상적으로 빌드가 되는것을 확인할 수 있다.


2.5. 트리거 설정

2.1. 단계에서 만든 "exec-ansible"의 설정에서 "Post-build Actions" 부분에 "Build other project"를 선택하고, exec-serverspec을 입력한다. 그리고 선택은 Trigger only if build is stable을 선택한 후 저장한다.

 


2.6. 동작 확인

위의 세팅을 완료하고 나서 "exec-ansible"을 빌드하면 성공적으로 빌드가 되었을 경우 "exec-serverspec"도 정상적으로 실행되는 것을 확인할 수 있다.


3. 총괄 프로젝트(Pipeline)를 이용한 연결

이 방법은 두 개의 별도의 프로젝트를 상위의 프로젝트를 이용하여 빌드하는 방법이다.

이 방법을 진행하기 위해서는 위에서 진행한 트리거 설정을 해제하고 진행한다. 환경설정에 가면 x 표시를 선택할 수 있도록 되어있다.


3.1. 총괄 프로젝트 생성

"exec-ansible-serverspec"이라는 프로젝트를 생성한다. 이때 프로젝트 타입은 Pipeline을 선택한다.


3.2 Pipeline script 작성

다음과 같이 파이프라인 스크립트를 작성하고 저장한다.

 

node {
    stage 'ansible'
    build 'exec-ansible'
    stage 'serverspec'
    build 'exec-serverspec'
}

 

 

여기서 stage란 논리적인 단계를 의미하고, build는 이 단계마다 프로젝트들을 실행한다는 것을 의미한다.


3.3. 프로젝트 빌드 확인

위의 단계에서 처럼 생성된 프로젝트에서 [Build Now] 버튼을 클릭하면 다음과 같이 아이콘이 나오면서 빌드가 되는 것을 확인할 수 있다.

빌드 결과

#1에 대한 배포는 필자가 프로젝트 명을 잘못 입력해서 발생한 에러이다. 정상적으로 빌드가 된다면 #2와 같이 둘 다 성공이 된다. 

앞전에 했던 프로젝트에 명시적으로 다음 빌드 프로젝트를 기록하여 관리하는 것보다 파이프라인을 이용한 방식이 관리하기 훨씬 편해 보인다.

프로젝트가 많은 상황에서 대규모로 작업하기에도 이 방법이 훨씬 좋아 보인다.


4. 매개 변수 설정

프로젝트 빌드시 다음과 같이 명령어가 일부분 다를 경우에는 매개 변수 옵션을 설정하여 빌드 처리가 가능하다.

예:

ansible-playbook -i development site.yml --diff #개발환경
ansible-playbook -i production site.yml --diff #운영환경

 

 

Dasnboard에서 exec-ansible 프로젝트를 선택하고 옵션에서 "This project is parameterized"를 선택한다.

그리고 파라미터명을 ENVIRONMENT로 작성하고, 선택 값은 development production으로 작성한다.

 

다음으로는 Build 부분에서 playbook 실행 시 ${ENVIRONMENT} 파라미터를 받을 수 있도록 shell command를 수정후 저장한다.

그러면 아래와 같이 [Build Now] 버튼이 [Build with Parameters]로 변경되고, 변수를 설정할 수 있도록 변경된다.

파라메터 적용결과

 

여기서 "production"을 선택하여 빌드를 수행하고, curl명령어를 이용하여 원하는 설정이 잘 배포되었는지 확인해보자.

 

$ curl 192.168.33.10

 

curl 실행결과

 

실행결과 정상적으로 잘 동작하는 것을 확인하였다. 

 

파라미터 옵션을 사용하면 범용적인 처리가 가능하며 프로젝트 수를 최소화하면서 효율적인 관리가 가능하다.


이번 포스팅에서는 Jenkins를 이용하여 빌드 파이프라인을 구축하는 방법에 대해서 알아보았다.

 

우리 회사에서는 nginx, nodejs, 컨테이너들을 하나하나 수동으로 빌드하고 배포했었다. DevOps 관련 툴들을 익혀나가면서 적용하면 좋을 것 같다고 생각되는 포인트들이 많이 생긴다. 다음 주쯤에 회사 프로젝트들도 Jenkins를 도입하여 이런 식으로 관리하도록 변경해야겠다.


참고자료

[1] IT 운용 체제 변화를 위한 데브옵스 | 2019 | 키와무라 세이고 ... | 링크

 

 

반응형

'클라우드 컴퓨팅 & NoSQL > Jenkins' 카테고리의 다른 글

[젠킨스(Jenkins)] Jenkins 프로젝트 생성 및 Build  (0) 2021.04.18
[젠킨스(Jenkins)] Jenkins 소개 및 설치 방법  (0) 2021.04.18
  • 1. 준비사항
  • 2. 직접 연결
  • 2.1. Ansible 프로젝트 생성
  • 2.2. 프로젝트 빌드 확인
  • 2.3. Serverspec 프로젝트 생성
  • 2.4. 프로젝트 빌드 확인
  • 2.5. 트리거 설정
  • 2.6. 동작 확인
  • 3. 총괄 프로젝트(Pipeline)를 이용한 연결
  • 3.1. 총괄 프로젝트 생성
  • 3.2 Pipeline script 작성
  • 3.3. 프로젝트 빌드 확인
  • 4. 매개 변수 설정
devlos
devlos
안녕하세요, Devlos 입니다. 새로 공부 중인 지식들을 공유하고, 명확히 이해하고자 블로그를 개설했습니다 :) 여러 DEVELOPER 분들과 자유롭게 지식을 공유하고 싶어요! 방문해 주셔서 감사합니다 😀 - DEVLOS -

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.