- jenkins(젠킨스)란?
- CI/CD(지속적인 통합/배포)를 위한 도구로 소프트웨어 개발 프로세스의 빌드, 테스트, 배포 등을 자동화 해주는 도구이다.
- Jenkins Index와 연동하여 다양한 플러그인 사용이 가능하다
- (디폴트 기준)8080port로 대시보드에 접속하며 50000port의 파이프라인을 통해 슬레이브들에게 배포된다.
- History
- Api의 효율적인 배포를 위해 jenkins를 통한 CI/CD 배포 환경이 필요하게 되었는데 현재 사내 공인아이피를 대부분 사용하고 있어서 추가적으로 요청을 하던지 해서 얻어야하지만 젠킨스 하나만 사용하겠다고 추가 인스턴스에 공인 IP를 할당 받는건 비효율적이라 생각해 기존의 OpenVpn용으로 생성했던 인스턴스에 볼륨만 추가해 jenkins 서비스를 설치할 생각이다.
- 이러한 사항 때문에 패키지 형태의 설치보다 war파일 및 java -jar 함수를 이용한 수동설치가 적합하다 판단하고 진행하게 되었다.
- 또한 추후에 또 사용할거 같아서 지속적으로 수정할 예정이다.
- war파일을 이용해서 특정 디렉토리에 설치를 종속시키는 것과 젠킨스 서비스 파일을 구성해서 수동으로 서비스 등록을 검색으로는 방법이 나오지 않던 부분 이라 구축시간보다 검색하고 검색내용을 바탕으로 조립한 다음 실험해보는 시간이 더 길었던거 같다.
- openstack VM 환경이라 ufw 방화벽 설정이 따로 필요없고 openstack 방화벽만 신경써주면 된다.
- (2024-10) 추가적으로 밑에 쉘 스크립트 형태로 만들었으니 필요한 사람은 그부분만 참고하면 좋을듯 하다.
진행
- 젠킨스 설치(war 파일 형태로 진행)
wget https://get.jenkins.io/war-stable/2.426.3/jenkins.war
#수동 설치를 해야하므로 war 받기
echo 'export JENKINS_HOME=/hdd_add/kit/jenkins/.jenkins' >> ~/.bashrc
#echo 'export JENKINS_HOME=[젠킨스 홈디렉토리]' >> ~/.bashrc
#젠킨스 설치위치 환경변수 설정
nohup java -jar /hdd_add/kit/jenkins.war >> /hdd_add/kit/jenkins/jenkins_$(date +\%m\%d).log 2>&1 &
[1] 48719 #UUID
#젠킨스 실행 및 로그 남기기 위한 명령어
ps -ef | grep jenkins
root 48719 48713 9 14:09 pts/1 00:00:40 java -jar /hdd_add/kit/jenkins.war
root 48800 48713 0 14:16 pts/1 00:00:00 grep --color=auto jenkins
#작동 확인
- 서버 재부팅시에도 실행시키기 위해 시스템 설정 및 등록
vi /etc/systemd/system/jenkins.service
[Unit]
Description=Jenkins Daemon
After=syslog.target network-online.target
Wants=network-online.target
[Service]
Type=simple
ExecStart=/usr/bin/java -jar /hdd_add/kit/jenkins/jenkins.war --webroot=/hdd_add/kit/jenkins/.jenkins/war
Environment="JENKINS_HOME=/hdd_add/kit/jenkins/.jenkins"
User=jenkins
[Install]
WantedBy=multi-user.target
#시스템 파일 생성
systemctl daemon-reload
#system파일 재로드
systemctl enable jenkins.service
Synchronizing state of jenkins.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable jenkins
Created symlink /etc/systemd/system/multi-user.target.wants/jenkins.service → /etc/systemd/system/jenkins.service.
#시스템 파일 활성화
systemctl start jenkins.service
#실행
root@ubuntu:/etc/systemd/system# systemctl status jenkins.service
● jenkins.service - Jenkins Daemon
Loaded: loaded (/etc/systemd/system/jenkins.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2024-01-29 16:24:18 KST; 3s ago
Main PID: 56356 (java)
Tasks: 40 (limit: 9478)
Memory: 169.2M
CPU: 5.935s
CGroup: /system.slice/jenkins.service
└─56356 /usr/bin/java -jar /hdd_add/kit/jenkins/jenkins.war --webroot=/hdd_add/kit/jenkins/.jenkins/war
Jan 29 16:24:20 ubuntu java[56356]: at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
Jan 29 16:24:20 ubuntu java[56356]: at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
Jan 29 16:24:20 ubuntu java[56356]: at java.base/java.lang.reflect.Method.invoke(Method.java:568)
Jan 29 16:24:20 ubuntu java[56356]: at executable.Main.main(Main.java:351)
Jan 29 16:24:20 ubuntu java[56356]: 2024-01-29 07:24:20.952+0000 [id=1] INFO o.e.j.s.handler.ContextHandler#doStart: Started w.@35293c05{Jenkins v2.426.3,/,file:///hdd_add/kit/jenkins/.jenkins/war/,AVAIL>
Jan 29 16:24:20 ubuntu java[56356]: 2024-01-29 07:24:20.977+0000 [id=1] INFO o.e.j.server.AbstractConnector#doStart: Started ServerConnector@2bbaf4f0{HTTP/1.1, (http/1.1)}{0.0.0.0:8080}
Jan 29 16:24:20 ubuntu java[56356]: 2024-01-29 07:24:20.997+0000 [id=1] INFO org.eclipse.jetty.server.Server#doStart: Started Server@4450d156{STARTING}[10.0.18,sto=0] @2010ms
Jan 29 16:24:21 ubuntu java[56356]: 2024-01-29 07:24:21.000+0000 [id=25] INFO winstone.Logger#logInternal: Winstone Servlet Engine running: controlPort=disabled
Jan 29 16:24:21 ubuntu java[56356]: 2024-01-29 07:24:21.287+0000 [id=32] INFO jenkins.InitReactorRunner$1#onAttained: Started initialization
Jan 29 16:24:21 ubuntu java[56356]: 2024-01-29 07:24:21.424+0000 [id=30] INFO jenkins.InitReactorRunner$1#onAttained: Listed all plugins
#정상작동 확인
+
- 기존의 바이너리 설치가 생각보다 번거로워서 새로 바이너리 설치버전 쉘 스크립드를 만들었다.
- 이걸로 쉘 파일을 만들고 sudo 권한이나 루트로 실행시키면 바로 설치할 수 있을것이다.
#!/bin/bash
apt-get update
apt-get install openjdk-17-jdk
if [ -d /usr/local/bin/jenkins ]
then
echo "jenkins 디렉토리가 존재하여 삭제를 진행 후 설치합니다."
rm -rf /usr/local/bin/jenkins
fi
mkdir /usr/local/bin/jenkins
chmod 755 /usr/local/bin/jenkins
wget https://get.jenkins.io/war-stable/2.426.3/jenkins.war
mv jenkins.war /usr/local/bin/jenkins/
chmod +x /usr/local/bin/jenkins/jenkins.war
adduser \
--system \
--shell /bin/bash \
--gecos 'Jenkins Control' \
--group \
--disabled-password \
--home /home/jenkins \
jenkins
chown -R jenkins:jenkins /usr/local/bin/jenkins/
touch /etc/systemd/system/jenkins.service
echo "
[Unit]
Description=Jenkins Daemon
After=syslog.target network-online.target
Wants=network-online.target
[Service]
Type=simple
ExecStart=/usr/bin/java -jar /usr/local/bin/jenkins/jenkins.war --httpPort=4777
webroot=/usr/local/bin/jenkins/jenkins/war
Environment="JENKINS_HOME=/usr/local/bin/jenkins/.jenkins"
User=jenkins
[Install]
WantedBy=multi-user.target
" > /etc/systemd/system/jenkins.service
systemctl daemon-reload
systemctl enable jenkins
systemctl start jenkins
systemctl status jenkins
- 플러그인 설치 진행
- 완료