[Jenkins] - docker / docker-compose를 사용하여 설치
작업 순서
- Dockerfile 생성
- docker-compose 파일 생성
- shell 파일 생성
- 실행
1. Dockerfile 생성
- jenkins에서 docker image를 만들때 jenkins 설치 pc의 docker 기능을 사용하기 위해 docker-cli도 함께 설치합니다.
- 아래 Dockerfile은 Jenkins 사이트의 설명 문서에서 기본 이미지를 jenkins/jenkins:lts로 변경했습니다.
- https://www.jenkins.io/doc/book/installing/docker/
- 한글 설정 추가 > manpath: can't set the locale; make sure $LC_* and $LANG are correct
https://royleej9.tistory.com/entry/manpath-cant-set-the-locale-make-sure-LC-and-LANG-are-correct
#Dockerfile
FROM jenkins/jenkins:lts
USER root
RUN apt-get update && apt-get install -y lsb-release
RUN curl -fsSLo /usr/share/keyrings/docker-archive-keyring.asc \
https://download.docker.com/linux/debian/gpg
RUN echo "deb [arch=$(dpkg --print-architecture) \
signed-by=/usr/share/keyrings/docker-archive-keyring.asc] \
https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list
#---- docker-ce-cli
RUN apt-get update && apt-get install -y docker-ce-cli
#---- sshpass
RUN apt-get -y install sshpass
#---- locale
RUN apt-get install -y locales git \
&& localedef -f UTF-8 -i ko_KR ko_KR.UTF-8
ENV LC_ALL ko_KR.UTF-8
USER jenkins
# image 생성 단계에서 에러 발생하여 주석처리
# RUN jenkins-plugin-cli --plugins "blueocean docker-workflow"
2. docker-compose 파일 생성
아래의 값들은 .env 파일을 통해 전달
- UID/GID - volume 폴더를 읽기/쓰기 위한 권한 사용자의 정보 / id -u / id -g
- $VOLUME_JENKINS_HOME - jenkins 설치 volume 경로
- ${DOCKER_GROUP} - docker 실행 그룹 / stat -c '%g' /var/run/docker.sock
- file: docker-compose.yml
version: "3"
services:
my-jenkins:
container_name: my-jenkins
user: "${UID}:${GID}" # volume 폴더 젒근 권한 설정
image: my-jenkins
build: .
volumes:
- $VOLUME_JENKINS_HOME:/var/jenkins_home # jenkins 설치 폴더
- /var/run:/var/run:ro # docker 실행 폴더 공유
environment:
- TZ=Asia/Seoul # jenkins 시간
ports:
- "18080:8080" # jenkins 접속 port
- "50000:50000" # jenkins agent를 통해 통신 할때
group_add:
- ${DOCKER_GROUP} # docker 실행을 위한 그룹 추가
3. shell 파일 생성
- jenkins 실행에 필요한 .env 및 volume directory 생성하기 위한 용도
- .env / volume 디렉토리를 수동으로 설정한다면 필요 없음 - docker-compose 명령어를 직접 사용
- file: docker-compose-run.sh
#! /bin/bash
# docker image를 사용하여 jenkins를 사용하기위한 스크립트
# docker-compose 실행을 위한 환경 변수 및 폴더 생성
# ./docker-compose-run.sh build - jenkins 실행에 필요한 volume 및 .env파일 생성
# ./docker-compose-run.sh up - jenkins 실행
# ./docker-compose-run.sh down - jenkins 컨테이너 down
# ./docker-compose-run.sh remove - jenkins 컨테이너 /이미지/네트워크 /.env 삭제
# - volume용 directory는 삭제하지 않음
readonly JENKINS_HOME_DIR="/home/asd/doc/jenkins"
readonly RUN_COMMAND=$1
#-------------- functions ---------------------------------------------
# https://stackoverflow.com/questions/3685970/check-if-a-bash-array-contains-a-value
containsElement () {
local e match="$1"
shift
for e; do [[ "$e" == "$match" ]] && return 0; done
return 1
}
check_run_command() {
local commands=("build" "up" "down" "remove")
if ! containsElement "$RUN_COMMAND" "${commands[@]}" ; then
echo "Please select run command(build/up/down/remove): ex) ./docker-compose-run.sh up"
exit 1
fi
}
create_dir() {
mkdir -p $JENKINS_HOME_DIR
echo "----------------- Create directory -----------------"
echo "jenkins_home volume: $JENKINS_HOME_DIR"
}
create_env() {
echo "----------------- Create environment file: .env -----------------"
cat >.env <<EOF
GID=$(id -g)
UID=$(id -u)
DOCKER_GROUP=$(stat -c '%g' /var/run/docker.sock)
VOLUME_JENKINS_HOME=$JENKINS_HOME_DIR
EOF
# print .env file
cat .env
}
execute_docker_compose() {
echo "----------------- Execute docker-compose -----------------"
if [ "$RUN_COMMAND" == "up" ]; then
docker-compose -f docker-compose.yml up -d
elif [ "$RUN_COMMAND" == "remove" ]; then
docker-compose -f docker-compose.yml down --rmi all
rm .env
else
docker-compose -f docker-compose.yml "$RUN_COMMAND"
fi
echo "-----------------------------------------------"
docker ps -f "name=my-jenkins"
echo "-----------------------------------------------"
docker images --filter=reference='my-jenkins'
}
execute_command() {
# env $(cat docker-compose.env) docker-compose -f docker-compose.yml -f docker-compose-build.yml up -d
if [ "$RUN_COMMAND" == "build" ]; then
create_dir
create_env
elif [ "$RUN_COMMAND" == "up" ]; then
if [ ! -f ".env" ]; then
echo "Please execute the build command before executing the up command"
exit 1
fi
fi
execute_docker_compose
}
#----------------------- start -------------------------------------
check_run_command
execute_command
4. 실행
- docker-compose-run.sh 파일에서 아래 항목은 본인 설치 환경에 따라 수정 필요
# jenkins_home volume 경로 수정 필요
readonly JENKINS_HOME_DIR="/home/asd/doc/jenkins"
- shell을 실행하여 jenkins에 실행에 필요한 volume 및 .env 파일 생성
// 실행 권한이 없는 경우
chmod u+x docker-compose-run.sh
./docker-compose-run.sh build
- jenkins 이미지 실행
docker-compose-run.sh up
- 터미널에서 아래 명령어 실행 후 초기 관리자 패스워드를 복사
$ docker logs -f my-jenkins
Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:
175b613d63a947e291fac83228fc627e
This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
*************************************************************
- 웹브라우저에서 [jenkins설치 서버 IP]:18080으로 jenkins 접속 후 초기 관리자 패스워드 키를 입력하여 설치 진행한다.
- 설치 과정 중 플러그인은 jenkins 관리 페이지에서 설치가능하니 install suggested plugins으로 선택 진행
- 관리자 정보 설정 후 설치 완료
'기타' 카테고리의 다른 글
[Jenkins] pipeline jdk 설정 (1) | 2022.02.01 |
---|---|
[Jenkins] SSH 사용 - pipeline SSH Agent (0) | 2022.02.01 |
[Git] revert - 특정 시점으로 원복 (0) | 2021.05.15 |
[Tool] vscode-python 환경 설정 (0) | 2019.05.30 |
[Java] POI SXSSF (0) | 2019.05.30 |