Rundeck 설치와 Job 등록하기, Workflow, Job 실행 시 Error에 대한 설명
문서 개요
문서 작성 목적
이 문서 작성의 목적은 Rundeck에 대해 공부한 것을 정리하기 위한 것이다.
모든 범위의 내용에 대해 정리한 것이 아닌 중요하다고 생각한 특정 항목들에 대해 정리한다.
다루는 내용
이 문서는 아래의 항목에 해당하는 것에 대해 설명한다.
작동 관련
-
Job을 등록하고 실행하는 방법
-
Workflow
-
Job 실행 시 Error
컨셉 관련
-
Job의 성공 여부는 어떻게 체크하고 있는가?
-
스케줄링은 어떻게 되고 있는건가?
Pre-requirements
다음과 같은 항목에 대해 사전 지식 또는 설치가 되어 있다는 가정하에 진행한다.
- Docker
Test 환경
Test 환경은 다음과 같다.
-
macOS Catalina 10.15.4
-
Rundeck 3.2.6
Rundeck을 Docker Container로 실행하기
Docker가 설치되어 있다는 가정하에 진행한다.
Rundeck을 Docker container로 실행하기 위해 다음과 같은 명령어를 입력한다.
$ docker run --name test-rundeck -p 4440:4440 -v {local_volume_path}:/home/rundeck/server/data rundeck/rundeck:3.2.6
명령어 입력 후 브라우저를 이용해 아래의 주소에 접속한다.
127.0.0.1:4440
Rundeck login화면이 보인다면 정상적으로 실행된 것이다. Login하기 위해 다음과 같이 ID, PW를 입력한다.
-
ID: admin
-
PW: admin
Job을 등록하고 실행하는 방법
Job을 등록하고 실행하기 위해 Rundeck docker container(이하 Rundeck)에서 로컬 볼륨을 공유한 폴더에서 테스트 스크립트를 작성한다.
test_echo.sh를 생성하고 아래와 같이 입력한다.
echo "test"
date
로그인 하게 되면 이제 프로젝트를 만들어야되는데 프로젝트는 JOB들의 집합이며 하나의 서비스라고 생각하면 된다. 이 프로젝트에서 여러 개의 작업들을 정의할 수 있고 각 작업들은 각 각의 Workflow에 따라 1회 또는 스케줄링 되어 실행되게 된다. 지금은 테스트로 프로젝트를 생성하는 것이니 자유롭게 항목을 채워 프로젝트를 생성한다.
입력한 후 왼쪽의 JOBS 클릭하면 아래와 같은 화면이 나온다. 아래 사진은 이미 작업을 생성해서 조금 다를 수 있는데, ‘Create a new Job’ 항목을 클릭해 새로운 작업을 생성한다.
클릭하면 아래와 같이 여러 카테고리가 있고 각 카테고리는 세부 항목들이 있는데, 우리가 할 것은 스케줄링된 Shell script 실행을 하는 작업이기 때문에 Details에 작업 이름을 입력하고 ‘Schedule’ 항목을 클릭한다.
클릭하면 아래와 같은 화면이 나오는데 ‘Schedule to run repeatedly’ 항목에 Yes를 하고 원하는 시간을 설정한다.
그 다음은 ‘Workflow’를 클릭한 이후에 설정하면 되는데 Add a Step에서 Command를 클릭해 우리가 만든 Shell script를 설정하면 된다.
Shell script 경로 설정 시 절대경로로 해주어야 하며 Local host machine의 경로가 아닌 Docker Container의 경로를 입력해야 제대로 실행이 된다.
설정 한 이후 Job을 바로 실행시켜볼 수 있는데 아래와 같이 나오면 성공적으로 실행된 것이다.
Workflow 설정 및 설명
1개의 Job은 여러 개의 실행이 가능한 명령의 집합인데, 이 명령들은 순서를 가질 수도 있고 순서 없이 실행될 수 있다.
이런 것들을 정의하기 위해 Rundeck에서는 Workflow가 있다.
Option
먼저, Option에 대해 설명한다.
Option은 해당 Job에 대한 설명을 추가할 수 있으며 Job을 실행할 때 특정 값을 입력하지 않으면 실행이 되지 않게 하는 것등을 설정할 수 있다.
자세한 내용은 다음을 참고한다.
Workflow
Workflow에선 두 가지 중요한 설정이 있다. 이 두 가지 설정 중 하나는 특정 Step에서 실패 했을 경우 어떻게 할지 설정하는 것이다.
-
Stop at the failed step: 바로 실패(Default)
-
Run remaining steps before failing: 다음 Step을 진행하고 모든 Step이 끝난 후 작업을 실패 처리
두 번째는 Strategy이다. Strategy는 Step들을 어떻게 각 Node에 실행할 지 컨트롤하는 설정이다. Node-Oriented와 Step-Oriented이 있다.
-
Node First: 모든 Workflow를 각 노드에 실행한다. (default)
-
Sequential: 각 Step을 차례대로 모든 노드에 실행시킨다. 실행된 Step은 모든 노드에서 실행이 완료되어야 다음 Step으로 진행한다.
-
Parallel: 모든 Step들을 병렬로 실행한다.
Node First는 다음과 같이 실행된다.
1. NodeA step#1
2. " step#2
3. " step#3
4. NodeB step#1
5. " step#2
6. " step#3
Sequential는 다음과 같이 실행된다.
1. NodeA step#1
2. NodeB "
3. NodeA step#2
4. NodeB "
5. NodeA step#3
6. NodeB "
Node-oriented flow가 더 흔하게 쓰이며 프로세스에 따라 적잘하게 선택해 사용하면 된다.
더 복잡한 Strategy rule들은 다음을 참고한다.
Node Steps, Workflow Steps, Error Handler
Node Steps, Workflow Steps는 각 각 클릭 시 나와있는 것(Command, Script, etc..)에 대해 실행할 수 있으며 Node 또는 Workflow 단위로 설정이 가능하다.
Node Steps에서 설정한 작업은 각 Node마다 1번씩 실행된다.
Workflow Steps에서 설정한 작업은 전체 Workflow에서 단 1회만 실행된다.
이 부분에서 중요한 것은 각 작업이 실행되었는데 실패할 경우 어떻게 처리 되는 지가 중요한데, Rundeck에서 이것은 Error Handler를 통해 처리한다.
Error Hadler
Error Handler는 특정 Command가 실패했을 경우 불려지는 처리기이다. 위의 사진처럼 추가할 수 있다.
Error Hadler를 추가했을 경우와 추가하지 않았을 경우의 에러 처리가 다르다.
-
Step 실패 시 Error Handler 추가 안했을 경우
-
Workflow가 실패로 변경된다.
-
만약
keepgoing="false"
- 그러면 전체 Workflow가 중지된다.
-
그렇지 않으면, 남은 Workflow가 순서에 따라 실행된다.
-
Workflow가 실패 결과 상태로 종료된다.
-
-
Step 실패 시 Error Handler 추가 했을 경우
-
Error Handler가 실행된다.
-
만약 Error Handler가 성공적으로 실행되고
keepgoingOnSuccess="true"
-
Workflow
keepgoing
이 무시되고, -
Workflow 상태는 실패로 변경되지 않고 다음 스텝으로 진행된다.
-
-
만약
keepgoing="false"
-
Workflow는 실패로 변경된다.
-
그리고 나서 전체 Workflow는 중지된다.
-
-
만약
keepgoing="true"
-
Error Handler가 실패하면, Workflow는 실패로 변경된다.
-
아니면 Workflow는 추가적으로 변경되지 않는다.
-
-
남아있는 Workflow step들은 순서대로 실행된다.
-
Workflow가 끝나면 이전에 변경된 상태로 종료된다.
-
마지막으로 정리하자면, Error Handler가 추가되고 Error Handler의 작업이 성공적으로 마무리 되면 실패된 Step은 실패되지 않고 성공되었다고 결과 상태가 표시된다.
그래서 Error Handler를 추가 시 정말 오류 없이 성공적으로 결과가 나온 것이 아닌 보조 작업이라면, 반드시 결과가 0으로 리턴하는 것이 아닌 다른 결과 코드를 반환해야 해당 Step이 실패되었다고 표시되며 나중에 다시 디버깅할 때 쉽게 볼 수 있다.
댓글남기기