Jenkins Agent JNLP연결 백그라운드에서 유지시키기

backend developer interested in technical problem
Agent가 Jenkins Controller와 JNLP로 커넥션을 맺기 위해서는
java -jar /home/bts/agent.jar -jnlpUrl http://YOURJENKINS-URL/computer/AGENT-NAME/jenkins-agent.jnlp -secret abc -workDir "/YOUR/WORK/DIR" 와 같은 명령어를 수행한다. 하지만 명령어를 입력하면 이 이후에 터미널을 사용하지 못한다.
이때에 첫 번째 방법으로는 nohup을 이용하는것이다. 하지만 이는 재부팅시에는 다시 해당 명령어를 입력해줘야한다.
두 번째 방법인 systemctl을 이용하는 방법은 재부팅시에도 자동으로 백그라운드에서 연결을 맺는다. 우선 service파일을 만들자.
sudo vi /etc/systemd/system/jenkins-agent.service
이후 서비스 파일을 아래와 같이 채워준다.
[Unit]
Description=Jenkins Agent
After=network.target
[Service]
User= # 해당 서비스를 수행할 계정
WorkingDirectory= #작업경로
# 이는 처음 노드를 생성했을 때 자동으로 나오는 명령어를 입력한 것이다. 아래 그림참조
ExecStart=/usr/bin/java -jar [agent.jar파일의 경로] -jnlpUrl <http://[JENKINS CONTROLLER URL]/computer/[JENKINS JOB NAME]/jenkins-agent.jnlp> -secret [SECRET] -workDir ""
[Install]
WantedBy=multi-user.target

이 때 ExecStart에는 Jenkins Node를 처음 만들면 JNLP연결을 위한 커맨드가 주어지는데 이를 입력한다.(위 그림처럼 command line이 주어진다)
systemctl enable jenkins-agent.service #재부팅시에도 적용.




