⚙️ Ops/CI & CD

[Jenkins] Jenkins 기본 설정 (On Container)

신건우 2023. 5. 26. 10:41

Jenkins 설정 (On Container)

Jenkins Version : 2.387.3


Container 설정

로컬과 마운트를 위한 도커 볼륨 생성

$ docker volume create jenkins

Jenkins Container 생성 & 실행 & 볼륨 마운트 & 포트포워딩

$ docker run -d --name --privileged jenkins -v jenkins:/var/jenkins_home -p 18080:8080 -p 50000:50000 --restart=on-failure jenkins/jenkins:lts-jdk11

방화벽 포트 오픈

$ firewall-cmd --permanent --add-port=18080/tcp && firewall-cmd --permanent --add-port=50000/tcp && firewalll-cmd --reload

# Github Webhook IP 등록을 해야 자동 빌드가 됨
$ firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address=192.30.252.0/22 port port="22" protocol="tcp" accept' && firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address=185.199.108.0/22 port port="22" protocol="tcp" accept' && firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address=140.82.112.0/20 port port="22" protocol="tcp" accept' && firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address=143.55.64.0/20 port port="22" protocol="tcp" accept' && firewall-cmd --permanent --remove-rich-rule='rule family="ipv6" source address=2a0a:a440::/29 port port="22" protocol="tcp" accept' && firewall-cmd --permanent --remove-rich-rule='rule family="ipv6" source address=2606:50c0::/32 port port="22" protocol="tcp" accept'

Jenkins 초기 Password 확인

$ docker logs jenkins

Jenkins 웹 접속

  • http://{light-sail-public-ip}:18080/ 접속
  • Install Suggested Plugins 클릭 -> 플러그인 자동 다운로드
  • 접속 잘 되는거 확인 후 Jenkins 관리자 회원가입

Jenkins 비밀번호 분실 시

$ docker exec -it -u root jenkins /bin/bash
$ sudo vi /var/lib/jenkins/config.xml   # 파일 편집 진입

<useSecurity> true </useSecurity> 부분을 false로 하고 컨테이너 재시작

$ docker restart jenkins

웹 접속을 다시 하면 비밀번호가 초기화 되고 docker logs jenkins로 다시 확인 후 접속


SSH Key 등록

Jenkins 컨테이너 내부 진입후 SSH 키 생성

$ cd && mkdir .ssh && cd .ssh && ssh-keygen -t rsa
$ cat id_rsa.pub # 키값 복사하기

Github 계정 설정 - SSH and GPG Keys에 Public Key 값 등록


Docker Hub Credentials 등록

Docker Hub Token을 등록해줘야 Jenkins를 통해 Docker Push 시 Docker Hub 로그인 과정에서 권한에러가 안뜬다.

먼저 Docker Hub Token을 발급한다.

  • Docker Hub 로그인
  • Account Settings
  • Security
  • New Access Tokens
  • Access Token Description (원하는 이름으로 입력)
  • Generate
  • Token 복사 (창이 닫히면 다시 확인이 불가능 하므로 따로 저장해두자.)

다시 Jenkins 관리로 돌아와서

  • Credentials 진입
  • Add Credentials 선택
  • Kind : username with password
  • Username : Docker Hub 아이디 입력
  • Password : Docker Hub 토큰 입력
  • ID : 빈칸으로 냅두자
  • Create 눌러서 등록

Github Credentials 등록

Jenkins 관리 -> Security -> Credentials 진입

  • (global) 드랍박스 옆에 Add Credentials 클릭
  • Github 계정 정보 입력
  • kind : SSH Username with Private Key 선택
  • id : 젠킨스에서 식별하는 고유값으로 입력하지 않아도 됨
  • username : 깃허브 닉네임
  • private key 밑에 Enter directly 체크
  • Jenkins Server의 SSH Private Key 값 넣어줌

Github Webhook 연동

  • Github 계정 - Settings - Developer Settings - Token 생성
  • 토큰 권한 : repo, admin, admin:repo_hook
  • 연결하고 싶은 Github Repository - Settings - Webhooks 진입
  • Payload URL 입력하고 Add Hook 클릭
    (Payload URL = http://{jenkins-IP:Port}/github-webhook 형식으로 지정)

다시 Jenkins 관리 - 시스템 설정 - Add Github Server 진입

  • Name : 임의로 지정
  • API URL : 그대로 두기
  • Credentials 부분에 Add 클릭
  • kind : Secret Text
  • Secret : Github에서 발급한 토큰값 입력
  • Add

만든 Credential 선택 - 오른쪽 Test Connection 클릭해서 연결 확인 - Apply 클릭


Gradle Settings

  • Jenkins 관리 Global Tool Configuration 진입
  • Gradle Add
  • name: 알아볼 수 있게 알아서
  • Install automatically 체크 -> Gradle 7.2 선택

JDK Settings

Jenkins 관리 Global Tool Configuration 진입

  • 컨테이너 내부에서 echo $JAVA_HOME
  • 확인 후 경로를 Jenkins의 JAVA_HOME에 입력