포스트

Jenkins 설치하기

목차

  1. Jenkins 도입 목적
  2. Jenkins 설치방법
  3. Jenkins 포트 변경 방법
  4. Jenkins 접속
  5. Jenkins Nodes 설정

Jenkins 도입 목적

  1. 자동화된 빌드 및 테스트
  2. 지속적 통합(Continuous Integration, CI)과 배포(Continuous Deployment, CD) 지원
    이를 통해 소프트웨어 개발과 배포의 효율성과 품질을 향상 시키기 위함

Jenkins 설치 방법

Java 설치

1
2
3
sudo apt update
sudo apt install fontconfig openjdk-21-jre
java -version

LTS 버전으로 Jenkins 설치

1
2
3
4
5
6
7
8
9
sudo wget -O /etc/apt/keyrings/jenkins-keyring.asc \
  https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key

echo "deb [signed-by=/etc/apt/keyrings/jenkins-keyring.asc]" \
  https://pkg.jenkins.io/debian-stable binary/ | sudo tee \
  /etc/apt/sources.list.d/jenkins.list > /dev/null

sudo apt-get update
sudo apt-get install jenkins

systemd 설정

1
2
3
4
5
sudo systemctl daemon-reload
sudo systemctl enable jenkins
sudo systemctl start jenkins
sudo systemctl status jenkins
journalctl -u jenkins -f

Jenkins 포트 변경 방법

Jenkins의 기본 포트번호는 8080이다.
하지만 이전에 설치한 airflow-webserver가 8080를 이미 사용하고 있기 때문에 Jenkins의 포트 번호 변경이 필요했다.
sudo vi /usr/lib/systemd/system/jenkins.service에서 Environment="JENKINS_PORT=8081"로 수정한다.
그 이후 sudo systemctl daemon-reload하고 sudo systemctl restart jenkins하도록 한다.

Jenkins 접속

URL을 통해서 Jenkins에 접속하면 비밀번호를 입력해야한다.
비밀번호는 sudo vi /var/lib/jenkins/secrets/initialAdminPassword에서 확인할 수 있다.
기본 플러그인을 선택해서 설치하였고 이후에 이렇게 Admin 계정을 생성하면 된다.
그럼 Jenkins 설치는 완료되었다.

Jenkins Nodes 설정

Jenkins를 설치하면 기본적으로 “built-in node”에서 바로 빌드를 실행할 수 있습니다.
하지만 2가지 보안 위험을 내포하게 됩니다.

  1. master가 빌드 실행도 담당
    외부에서 가져온 코드를 실행할 경우 Jenkins의 핵심 시스템에서 바로 실행됩니다.
    이로 인해 악의적인 스크립트가 Jenkins 서버 자체를 손상시킬 수 있습니다.

  2. 보안 경계가 없다
    빌드 도중 사용하는 플러그인, 쉘 스크립트, 환경 변수 등이 컨트롤러와 동일한 머신에서 돌아가기 때문에 시스템 권한으로 악성 명령을 실행할 위험이 있습니다.

그래서 Node를 설정하는것이 좋습니다. http://xxx.xxxx.xxx.xxx:port/computer/로 접근하면 Node를 생성할 수 있습니다.
Remote root directory는 /home/ubuntu/jenkins-agent로 입력한 다음 서버에서 mkdir -p /home/ubuntu/jenkins-agent로 만들었다.
이후에 chown -R ubuntu:ubuntu /home/ubuntu/jenkins-agent로 권한을 부여했다.
그 다음 다시 web으로 돌아와서 save 버튼을 클릭하면 노드가 생긴다.
노드를 다시 클릭해보면 Run from agent command line: (Unix) 이런 내용을 확인할 수 있다.

1
2
curl -sO http://xxx.xxxx.xxx.xxx:port/jnlpJars/agent.jar
java -jar agent.jar -url http://xxx.xxxx.xxx.xxx:port/ -secret xxxxxx -name {node_name} -webSocket -workDir {workDir}

이거를 systemd에 등록하면 된다. sudo vi /etc/systemd/system/jenkins-agent.service

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[Unit]
Description=Jenkins Agent
After=network.target

[Service]
User=ubuntu
WorkingDirectory=/home/ubuntu/jenkins-agent
ExecStart=/usr/bin/java -jar /home/ubuntu/jenkins-agent/agent.jar \
  -url http://xxx.xxxx.xxx.xxx:port/ \
  -secret {secret} \
  -name "jenkins-agent" \
  -webSocket \
  -workDir "/home/ubuntu/jenkins-agent"
Restart=always

[Install]
WantedBy=multi-user.target

이후에 아래 단계를 실행한다.

1
2
3
4
5
sudo systemctl daemon-reload
sudo systemctl enable jenkins-agent
sudo systemctl start jenkins-agent
sudo systemctl status jenkins-agent
journalctl -u jenkins-agent -f

이 후 web에서 새로고침을 하면 node가 정상적으로 실행되고 있는 것을 확인할 수 있다.


다음에는 Jenkins에서 pipeline을 만드는 것을 작성하겠다.