젠킨스
네이버 클라우드 플랫폼에서 포트 열어주기
젠킨스 설치하기
docker run \\
--name jenkins_1 \\
-p 8081:8080 \\
-e TZ=Asia/Seoul \\
-v /docker_projects/jenkins_1/var/jenkins_home:/var/jenkins_home \\
-v /var/run/docker.sock:/var/run/docker.sock \\
-v /docker_projects/jenkins_1/data:/data \\
-u root \\
-d \\
--restart unless-stopped \\
jenkins/jenkins:lts
--name jenkins_1
: 컨테이너의 이름을 "jenkins_1"
로 지정
-p 8081:8080
: 호스트의 8081 포트와 컨테이너의 8080 포트를 매핑
-e TZ=Asia/Seoul
: 컨테이너 내부에서 사용할 타임존을 "Asia/Seoul"로 설정
-v docker_projects/jenkins_1/var/jenkins_home:/var/jenkins_home
: 호스트의 /docker_projects/jenkins_1/var/jenkins_home 경로와 컨테이너의 /var/jenkins_home 경로를 볼륨 매핑 / Jenkins 설정과 데이터를 영구적으로 보관
-v /var/run/docker.sock:/var/run/docker.sock
: 호스트의 Docker 소켓 파일(/var/run/docker.sock)을 컨테이너 내부의 동일한 경로에 바인드 (Docker 명령을 컨테이너에서 실행가능)
-v /docker_projects/jenkins_1/data:/data
: 호스트의 /docker_projects/jenkins_1/data 경로와 컨테이너의 /data 경로를 볼륨 매핑 / Jenkins 작업 데이터를 영구적으로 보관
-u root
: 컨테이너 내부에서 root 사용자로 실행
-d
: 컨테이너를 백그라운드에서 실행 (데몬)
--restart unless-stopped
: 컨테이너가 비정상적으로 종료되었을 때 자동으로 재시작
jenkins/jenkins:lts
: 사용할 Docker 이미지를 jenkins/jenkins:lts로 지정
젠킨스 로그인
초기 비밀번호 확인
docker exec jenkins_1 cat /var/jenkins_home/secrets/initialAdminPassword
JDK Update
docker exec -it jenkins_1 bash
apt-get update
apt-get install openjdk-17-jdk -y
젠킨스 컨테이너 내에 Docker 설치
docker exec -it jenkins_1 bash
apt-get update -y
apt-get install -y ca-certificates curl gnupg lsb-release
mkdir -p /etc/apt/keyrings
rm /etc/apt/keyrings/docker.gpg
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.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 docker-ce-cli docker-compose-plugin
apt-get update -y
: 패키지 업데이트
apt-get install -y ca-certificates curl gnupg lsb-release
: Docker
설치를 위해 종속성 패키지 설치
mkdir -p /etc/apt/keyrings
: /etc/apt/keyrings
경로에 디렉토리를 생성 (APT
패키지 매니저의 키링(keyring)
파일을 저장하기 위한 공간)
rm /etc/apt/keyrings/docker.gpg
: /etc/apt/keyrings/docker.gpg
파일을 삭제 (Docker
의 공식 GPG
키를 저장하기 위한 용도)
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
: Docker
의 공식 GPG
키를 다운로드하여 /etc/apt/keyrings/docker.gpg
파일로 저장(GPG
키는 APT
가 Docker
의 패키지를 신뢰할 수 있는지 확인하는 데 사용)
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
: Docker
의 APT
저장소 정보를 /etc/apt/sources.list.d/docker.list
파일에 저장 (Docker
관련 패키지를 설치)
apt-get update
: 패키지 업데이트
apt-get install -y docker-ce docker-ce-cli docker-compose-plugin
: Docker
와 Docker Engine
및 Docker Compose
의 구성 요소 설치
젠킨스에서 Pipeline 생성
Credentials을 이용해 secret.yml 자동 업로드
- Credentials : 보안 관련 정보를 저장하고 관리하기 위한 기능
- 원격 Git 저장소에서 코드를 가져올 때 인증 정보를 사용하거나, 도커 레지스트리에 이미지를 푸시할 때 인증 정보를 사용
파이프 라인 작성
빌드 성공
Github Webhooks 설정
젠킨스 트리거 설정
자동배포 성공
Git push 트리거 생성
젠킨스 자동 빌드 실행
☠️ 배포 작업중 막혔던 내용
🤯 openjdk-17-jdk
JDK
를 Doker
에서는 설치를 해줘서 왜 안되지 하면서 계속 JDK
삭제하고 다시 설치하고, 또 환경변수 설정이 잘못됐나 확인하며 시간을 많이 보냈다.
😏 해결 방법
- 젠킨스에서 JDK를 사용하기 위해서는 설정을 해줘야 한다.
- 젠킨스 관리 페이지에 로그인합니다.
- 좌측 메뉴에서
"시스템 설정"
을 선택합니다.
- JDK 섹션으로 스크롤하거나
"JDK installations..."
링크를 클릭합니다.
"Add JDK"
버튼을 클릭하여 새로운 JDK 설정을 추가합니다.
- JDK 설정 페이지에서 다음 정보를 입력합니다:
- "Name": JDK의 이름을 지정합니다. (예: JDK 11)
- "JAVA_HOME": JDK의 설치 경로를 입력합니다.
- 저장을 클릭하여 JDK 설정을 저장합니다
🤯 Docker Rm Fail
- 처음 빌드 할경우
Docker Rm
은 정상 작동한다. 하지만 이후 Build Docker Images
에서 실패를 할경우 다시 재빌드를 하게 되면 이전에 Docker Rm
에서 이미 이미지와 컨테이너가 삭제 되었기 때문에 삭제할게 없어서 에러가 발생한다.
😏 해결방안
- 수동으로 도커이미지와 도커컨테이너를 만들어주고 빌드를 돌린다.
- 파이프라인에서 도커이미지, 도커컨테이너가 있으면 삭제하고 없으면 넘어간다 라는 파이프라인 코드를 작성해 준다. (추후 도전예정)
🤯 Build Docker image
- 도커 이미지 빌드에서 오류가 났다. 분명 리눅스 환경에서는 명령어가 잘 수행하지만 빌드에서는 실패를 했다. 원인을 찾다보니
Dockerfile
을 찾을수 없다고 한다. 하지만 분명 리눅스 환경에서 도커파일을 설치했는데 의문이 들었다. 그래서 도커파일을 못찾는 줄 알고 경로를 설정하거나 절대경로를 설정해도 원인을 찾을수 없었다.
😏 해결방안
- 깃 레포지터리에
Dockerfile
을 따로 만들어 주어야 한다. 리눅스환경에 도커파일이 있으면 될줄 알았지만 아니였다. 파이프라인은 도커 -> 젠킨스 컨테이너 -> 젠킨스내부의 도커
에서 실행되기 떄문이다.
🤯 Githook
Payload URL
정보가 잘못됐다고 한다. 원인을 몰라서 http
-> https
도 바꿔보고 포트를 8080
으로 바꿔보고 해봐도 되지않았다.
😏 해결방안