일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- EMR
- config
- SpringBoot
- gradle
- spring
- 자동
- 젠킨스
- 머신러닝
- 예제
- 간단
- java
- Jenkins
- Docker
- Cluster
- 클러스터
- Kafka
- fastcampus
- Zeppelin
- Mac
- hive
- aws
- ec2
- 로그인
- Redis
- 레디스
- vue
- 설정
- redash
- 자바
- login
- Today
- Total
코알못
[Jenkins] 젠킨스 배포 자동화 (with. newman) 본문
이전 포스팅에서는 JenKins를 통해 배포 자동화(co-de.tistory.com/17) 하는 방법을 배웠습니다.
이번 시간에서는 배포 후에 필수로 해야하는 테스트까지 자동화하여 배포 시간을 단축하는 방법을 다뤄보겠습니다.
그전에 다룰 서비스에 대해 간단하게 설명 하면 아래와 같습니다.
- NewMan : postman 에서 만든 테스트 케이스를 CLI 상에서 실행 시킬수 있도록 하는 서비스
- PostMan : 테스트를 쉽게 할 수 있도록 도와주는 서비스
일단 포스트맨을 통해 테스트 케이스 collection 을 작성합니다.
[잠깐!] 포스트 맨이 설치 되어 있지 않다면 설치 해주세요
- Postman 으로 collection 을 만들고, 테스트 케이스를 만든다. (참고로 해당 컬렉션 단위로 테스트를 진행하게 된다.)
- 저자는 RAN-A 호출 결과를 RAN-B 호출 파라미터로 사용할 예정으로 아래와 같이 환경 설정을 이용하면 쉽게 셋팅이 가능합니다.
1. 환경 설정에 필요한 설정을 넣는다. (key 는 동적으로 사용할 파라미터라 빈값으로 둔다 = RAN-A 호출 결과)
2. 환경설정을 사용하여 RAN-A 의 테스트 케이스를 작성한다.
- tests 안에 테스트 스크립트는 jenkins 에서 테스트 실패, 성공여부를 판단하는 요소가 된다.
- 테스트 스크립트 사용 방법은 링크를 참고한다. (learning.postman.com/docs/writing-scripts/test-scripts/)
// test script
// status 코드가 200인가?
pm.test("Status code is 200 - OK",function(){ pm.response.to.have.status(200); });
var data = pm.response.text(); // 결과를 data에 저장한다.
if (data != ""){
pm.environment.set("key", data); // RAN-A 결과를 환경 key에 저장한다. (나중에 key로 불러올 수 있다.)
}else{
console.log("값이 없습니다.");
}
3. RAN-A 에서 리턴한 key 를 가져와서 RAN-B 모듈 파라미터로 사용하여 호출한다.
4. jenkins 에서 B 모듈 성공 실패를 판단할 테스트 스크립트를 작성 한다.
// test script
// status 코드가 200인가?
pm.test("Status code is 200 - OK",function(){ pm.response.to.have.status(200); });
// 결과를 로그로 출력
var data = pm.response.text();
console.log("TEST SUCCESS : "+data);
포스트맨을 이용해서 테스트 케이스와 환경 설정이 끝났다면 Mac에서 hombrew를 통해 쉽게 NewMan을 설치할 수 있다.
$ brew install newman
설치가 완료 됐으면 NewMan을 통한 테스트를 하기위해 두가지가 필요하다.
- Collection 정보
- Environment 정보 (테스트 케이스 생성시 사용 안했다면 필요하지 않습니다.)
정보는 아래와 같이 2가지 방법으로 얻을 수 있다.
- postman 으로 export 하여 json 파일로 내려 받는다.
- postman 으로 URL 얻는다
# 1번 방식
- Collection
- Environment
# 2번 방식
- 참고 문서 : www.npmjs.com/package/newman
- 참고 문서 처럼 Environment 도 URL 로 가능하지만 테스트시 잘 되지 않았다. 무료 버전이라 안되는건지, 이제 지원안하는지는 찾아봐야 한다.
1 Generate an API key
2 Fetch a list of your collections from: https://api.getpostman.com/collections?apikey=$apiKey
3 Get the collection link via it's uid: https://api.getpostman.com/collections/$uid?apikey=$apiKey
4 Obtain the environment URI from: https://api.getpostman.com/environments?apikey=$apiKey
# apiKey 얻는법
1. 아래 URL 접속
- https://app.getpostman.com/dashboard/integrations
2. 아래 그림대로 순서대로 실행
이제 NewMan을 통해 테스트를 해보자!
// 예)
$ newman run [Collection URL or Json파일] -e [Environment URL or Json파일]
테스트 결과 아래와 같이 실행한 test script 결과가 나온다. (2개의 테스트중 0개가 실패함을 나타냄)
NewMan 테스트가 정상적으로 실행 됐다면 Jenkins 와 연동 해본다!
1. 매개변수 지정
- 저자는 Collection 정보를 얻어올때 동적으로 테스트 케이스를 수정하기 위해 URL 을 사용했으며, 해당 정보를 얻어 오기 위해 필요한 Key, UID 정보를 매개변수로 지정했다.
2. 빌드 후 조치에 NewMan 스크립트 추가
- 아래와 같이 newman 옵션을 주어 실행 결과를 newman.xml 로 리턴하도록 한다.
# 옵션 설명
- -e : Environment 설정
- --reporters : 결과를 리턴하는 방식 지정 (저자는 2개 모두 보고 싶었기에 2개를 쉼표로 구분)
- junit : xml 파일로 리턴
- junit 으로 리턴시 --reporter-junit-export <path> 옵션이 추가 필요로 하며 <path> 에 파일명을 적어주면 된다.(경로 포함 가능)
- cli : cli로 리턴
- json : json 파일로 리턴
- json 으로 리턴시 --reporter-json-export <path> 옵션이 추가 필요로 하며 <path> 에 파일명을 적어주면 된다.(경로 포함 가능)
- junit : xml 파일로 리턴
// URL 사용시
$ newman run https://api.getpostman.com/collections/${COLLECTION_UID}?apikey=${POSTMAN_API_KEY} -e https://api.getpostman.com/environments/${ENVIRONMENT_UID}?apikey=${POSTMAN_API_KEY} --reporters cli,junit --reporter-junit-export "newman.xml"
// JSON FILE 사용시
newman run /Users/hongyoolee/script/postman/Multi-Module.postman_collection.json -e /Users/hongyoolee/script/postman/postman_environment.json --reporters cli,junit --reporter-junit-export "newman.xml"
3. 빌드 후 조치에 결과를 읽어서 jenkins 에서 빌드 상태에 대한 성공 실패를 판단하는 설정을 해준다. (위에서 newman.xml 로 파일을 리턴하도록 했으니 아래와 같이 적는다)
# 테스트
- Bulid 를 시작한다.
- 아래 실행바를 클릭하여 로그를 확인한다.
- 로그에 NewMan 테스트 했던 결과와 동일하게 로그가 나와 정상 실행 됐음을 확인 할 수 있다.
- 테스트 결과 상세 확인
- 2개의 테스트가 실행 됐으며, 모두 정상적으로 Pass 됐다.
만약 실패하면 어떻게 될까?
RAN-B 테스트 스크립트를 추가해서 일부러 실패하도록 한다.
// RAN-B 테스트 스크립트에 아래와 같이 status 코드가 500일 경우에만 성공인 테스트를 추가 한다.
pm.test("Status code is 500 - OK",function(){ pm.response.to.have.status(500); });
다시 테스트 진행!
- 로그 확인시 3개의 테스트 진행 하였고, 1개의 테스트가 실패 했다고 나오며, UNSTABLE 상태를 리턴하여 테스트가 실패 하였음을 알린다.
* 참고 : 빌드 과정중 실패시에는 FAILURE(빨간색), 성공시에는 SUCCESS(초록색) 을 리턴하며, 경고시에는 UNSTABLE(노란색)을 리턴한다.
- 테스트 결과 확인시 3개의 테스트중 1개의 테스트가 실패 했다고 나온다.
- 실패한 모든 테스트란에 실패한 테스트명이 나오며, 상세 정보 확인시 아래와 같다.
- status 코드가 200이고 500이 아니다라고 나온다.
- 빌드 후에 색으로도 빌드 상태를 확인할 수 있으니 한번에 알기 쉽다. (성공:초록색/경고:주황색/실패:빨간색)
초록색이 아니면 배포가 잘못 됐음을 인지하고 바로 원복을 진행하면 된다.
- Jenkins 프로젝트 메인으로 가면 아래와 같이 그래프로도 확인 가능하다.
참 쉽죠잉~!
-끝-
'ETC' 카테고리의 다른 글
[mac] 사용중인 포트의 PID 찾기 (0) | 2021.12.24 |
---|---|
[스프링부트] The temporary upload location [**/tmp/tomcat.*/work/Tomcat/localhost/ROOT]** is not valid (0) | 2021.09.27 |
[로그인] 로그인 유지는 어떻게 처리 하는 걸까? (0) | 2021.05.01 |
[Jenkins] 젠킨스 배포 자동화 (with. gradle, git) (0) | 2021.04.17 |
[Jenkins] 젠킨스 Mac 으로 설치 (0) | 2021.04.17 |