::: IT인터넷 :::

Jenkins 에이전트 연결 명령을 우분투 서비스로 실행하기

곰탱이푸우 2022. 1. 31. 08:20
Jenkins에 VirtualBox 가상머신을 이용하여 Docker 이미지 빌드를 위한 에이전트로 등록했다.
 
해당 방법은 다음 포스팅을 참고한다.
가상 머신에서 터미널을 종료하면 생성 된 프로세스가 종료 된다.
따라서 아래와 같이 연결이 다시 끊어진다는 문제가 발생한다.
 
 
해결 방법은 두 가지이다.

 

첫 번째는 터미널을 띄워 놓은 상태에서 가상 머신이 백그라운드로 동작하도록 종료하는 것이다.
아래 포스팅을 참고한다.
 
두 번째는 가상 머신에 해당 명령어를 서비스로 등록하는 방법이다.

 

 

서비스로 등록

아래 포스팅에서 터미널에서 실행한 에이전트 등록 명령어를 우분투의 서비스로 등록한다.

쉘 스크립트 작성

Jenkins의 에이전트 상태 페이지에 있는 명령어 실행을 위해 먼저 쉘 스크립트 파일을 생성한다.
나중에 해당 쉘 스크립트 파일을 서비스로 등록한다.
 
먼저 아래 명령으로 Bash 쉘 스크립트 파일을 생성한다.
$ gedit /home/dockerbuild/jenkins/agent.sh
 
 
그리고 아래 코드의 주석을 참고하여 각자의 환경에 맞게 수정한다.
상단에 bash 쉘 스크립트를 알려주는 부분이 있고, 아래 명령어는 Jenkins의 에이전트 상태 페이지에 있는 명령어이다.
#!/bin/bash

java -jar /home/dockerbuild/jenkins/agent.jar  # jar 파일 전체 경로 지정
-jnlpUrl http://172.18.10.53:8080/computer/docker%2Dbuild01/jenkins-agent.jnlp # 주소 수정
-secret 17948adb51e7c3c35930a2e92db6fc84985b6d73a19d7500425b2305535ba441  # 키 값 수정
-workDir "/home/dockerbuild/agent"
 
생성한 쉘 스크립트 파일에 실행 권한을 부여한다.
$ chmod 755 /home/dockerbuild/jenkis/agent.sh
 
다음과 같이 실행 권한이 부여되었다.
 
 

서비스로 등록하기

아래 명령을 수행하여 서비스 파일을 생성한다. 시스템 설정을 변경하기 때문에 sudo 권한으로 실행한다.
$ sudo vi /etc/systemd/system/jenkins-agent.service
 
우분투의 서비스 설정 파일의 기본 템플릿은 다음과 같다. 주석을 참고한다.
[Unit]
Description=*** ****** Service  // 서비스 제목 또는 설명
After=network.target // network가 커널에서 로드 된 이후

[Service]
ExecStart=/path/to/exec/start // 실행하고자 하는 파일 경로
WorkingDirectory=/your/working/dir // 실행하고자 하는 작업 디렉토리
User=username

[Install]
WantedBy=multi-user.target

 

위의 템플릿을 이용하여 작성한 서비스 실행 코드는 다음과 같다.
[Unit]
Description=Jenkins Agent Service
After=network.target

[Service]
User=dockerbuild
ExecStart=/home/dockerbuild/jenkins/agent.sh
WorkingDirectory=/home/dockerbuild/jenkins

[Install]
WantedBy=multi-user.target
 
파일을 저장하고 편집기를 종료한다.
그리고 아래 명령으로 실행 권한을 부여한다.
$ sudo chmod 755 /etc/systemd/system/jenkins-agent.service
 

 

아래 명령으로 서비스를 실행한다.
$ sudo systemctl daemon-reload         # 서비스 목록 다시 읽기
$ sudo systemctl enable jenkins-agent  # 서비스 활성화
$ sudo systemctl start jenkins-agent   # 서비스 실행
 
서비스가 실행되면 아래 명령으로 서비스 실행 상태를 확인한다.
$ sudo systemctl status jenkins-agent

 

정상적으로 실행되면 아래와 같이 실행되고 있는 것을 확인할 수 있다.

 

 

만약 오류가 발생한다면 아래 로그 부분에 존재하는 오류 메시지를 참고하여 서비스 설정을 수정한다.
서비스 설정을 수정한 경우 daemon-reload, enable, start 명령을 순서대로 다시 실행한다.
 
서비스를 재시작하려면 아래 명령을 실행한다.
$ sudo systemctl restart jenkins-agent

 

 

설정 저장

연결 상태 확인

서비스가 정상적으로 동작하면 Jenkins의 에이전트 상태 페이지에서 연결 상태를 확인한다.
정상적으로 연결 된 것을 확인할 수 있다.
 
 

스냅샷 생성

설정이 완료되었으므로 가상 머신에서 스냅샷을 생성한다.
 

 

이후 설정이 꼬이거나 불필요한 파일이 많이 쌓여 초기화가 필요할 때 유용하게 활용 가능하다.