젠킨스 이미지 다운로드
docker pull jenkins/jenkins:lts
lts : 최신 버전
젠킨스 컨테이너 실행
docker run -d -p 9080:8080 -v /var/run/docker.sock:/var/run/docker.sock -v ~/Documents/jenkinsDir:/var/jenkins_home --name jenkins jenkins/jenkins:lts
옵션 정리
- -d 백그라운드 실행
- -p 매핑할 포트 ( : 기준으로 왼쪽은 호스트 포트 , 오른쪽은 도커 이미지 포트 )
- -v : 기준으로 왼쪽은 호스트 경로 오른쪽은 컨테이너 내부 경로를 마운트함.컨테이너가 종료되어 삭제되어도 jenkins_home에 남아 있는 설정은 로컬에 남게 됨.
- 단, 잘못된 설정으로 오류가 발생할 경우 로컬 경로의 설정 파일도 다 삭제해 줘야 함.
- 즉, 호스트의 경로와 컨테이너 내부 경로를 바인딩 시켜줌 (양방향)
- -name 컨테이너 이름 지정
📌 컨테이너 실행 시 에러
sudo chown 1000 <볼륨으로 사용할 디렉터리> 권한 부여 하면 해결.
젠킨스 컨테이너 실행 시 기본포트 변경 ( 8080 → 9091)
docker run -itd --env JENKINS_OPTS=--httpPort=9091 -p 9091:9091 -v /var/run/docker.sock:/var/run/docker.sock -v ~/Documents/jenkinsDir:/var/jenkins_home --name jenkins jenkins/jenkins:lts
- itd는 Docker 컨테이너를 "인터랙티브 모드"(i)로 실행하고 "터미널 모드"(t)로 연결하며, 백그라운드(d)에서 실행하는 옵션.
- i (Interactive): 컨테이너와 상호 작용하는 데 사용되는 표준 입력을 유지함. 이 옵션을 사용하면 컨테이너 내부의 터미널과 상호 작용할 수 있음.
- t (TTY): 컨테이너와 연결된 가상 터미널을 할당함. 이 옵션을 사용하면 컨테이너 내부의 터미널과 유사한 환경을 얻을 수 있음.
- d (Detached): 컨테이너를 백그라운드에서 실행됨. 컨테이너가 백그라운드에서 실행되면 콘솔에 로그가 표시되지 않음.
즉, -itd 옵션은 Jenkins 컨테이너를 백그라운드에서 실행하면서도 터미널과 상호 작용할 수 있도록 해줌. 이렇게 설정하면 컨테이너가 실행된 후에도 컨테이너에 연결된 터미널을 통해 컨테이너 내부로 접근할 수 있음.
젠킨스 컨테이너 내부 도커 설치
도커 컨테이너 내부 진입 (루트 계정으로 진입)
docker exec --user root -it < 컨테이너 ID > /bin/bash ( 안될시 /bin/sh )
도커 설치 명령어
apt-get update
apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL <https://download.docker.com/linux/debian/gpg> | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] <https://download.docker.com/linux/debian> $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update
apt-get install -y docker-ce-cli
도커 정상 작동하는지 테스트
docker ps
로컬에서 돌아가는 도커 컨테이너 목록이 출력되어야함.
- 호스트 docker.sock 를 젠킨스 컨테이너 내부에 마운트 해줬기 때문.
젠킨스 내부 설정
Install suggested plugins 선택 후 진행
플러그인 자동 설치됨
- 플러그인이 설치되지 않을 경우 버전 확인( 버전이 낮으면 플러그인이 설치가 안됨 )
Item 생성
대쉬보드에서 새로운 Item 클릭
이름 작성 후 Freestyle project 선택
General 에서 Github project 선택 체크 후 Project url에 git repository url 입력
소스코드 관리에서 Git 선택 후 Repository URL에 git repository url 입력
Credentials 밑에 Add 선택 후 Jenkins 선택
Username : 깃허브 profile 이름
Password : 깃 개인 액세스 토큰 값
ID : 키 등록시 사용할 이름
- 깃 토큰 발행 시 엑세스 정의
브랜치는 자신이 배포 할 브랜치 명 작성.
빌드 유발에 GitHub hook trigger for GITScm polling 선택
빌드 스텝에서 Maven Version 에 mvn, Goals 에 clean package
Add build step 클릭 후 Execute shell 선택 후 명령어 입력.
젠킨스 컨테이너 배포 ( ngrok 사용 )
젠킨스 컨테이너 실행 시킬 때 마운트 해둔 로컬의 작업 폴더로 이동
난 ( ~/Documents/jenkinsDir/ )
ngrok 폴더 생성 ( 현재 경로 : ~/Documents/jenkinsDir/ )
mkdir ngrok
ngrok 최신 버전 다운로드
wget <https://bin.equinox.io/c/bNyj1mQVY4c/ngrok-v3-stable-linux-amd64.tgz>
ngrok 압축 해제
tar -xvf ngrok-v3-stable-linux-amd64.tgz
젠킨스 컨테이너 접속
docker exec -it < 젠킨스 컨테이너 아이디 > /bin/bash
로컬에서 마운트 한 ngrok 폴더로 이동
난 ( /var/jenkins_home )
cd /var/jenkins_home/ngrok
ngrok 사용해서 포워딩
./ngrok http <포트 번호>
Forwarding 에 적힌 주소로 외부에서 접속 할 수 있음.
Git hub web hook 설정
배포 할 리포지토리 접속 후 Settings 에서 Webhooks 접속
Add webhook 선택
Payload URL에 외부 접속 가능한 Jenkins 주소 입력 ( ngrok 링크 입력 ) 후 뒤에 /github-webhook/ 입력 . ( /github-webhook/ 입력 안할 시 Fobidden 에러 발생 )
Add webhook 클릭
이제 git에 푸쉬 하면 젠킨스 에서 알아서 수정 사항 반영 후 패키징 하여 도커로 배포 함.
끝!
젠킨스 컨테이너 도커 폴더 권한 부여
젠킨스 컨테이너 내부에서 권한 부여
$ chown jenkins:jenkins /var/run/docker.sock(마운트한 폴더)
'Docker' 카테고리의 다른 글
[Docker] 도커 컨테이너 > 호스트 , 호스트 > 도커 컨테이너 파일 복사 (0) | 2023.10.18 |
---|---|
[Docker] 도커 이미지 삭제 시 에러! (0) | 2023.10.18 |
[Docker] Mysql 도커 컨테이너로 올리기! (0) | 2023.10.18 |
[Docker] 도커 컨테이너에 jar 실행하기 (0) | 2023.09.20 |