1. swap 메모리 설정
# dd 명령을 통해 swap 메모리 생성/ of : swapfile 경로/ bs : Block 사이즈/ count : Block 개수
sudo dd if=/dev/zero of=/swapfile bs=128M count=16
# swapfile 읽기 쓰기 권한 업데이트
sudo chmod 600 /swapfile
# 리눅스 swap 영역 설정
sudo mkswap /swapfile
# 스왑 메모리를 활성화
sudo swapon /swapfile
# 절차가 성공했는지 확인
sudo swapon -s
# 파일 열기
sudo vi /etc/fstab
# 파일 가장 마지막에 다음을 추가하고 :wq로 저장하고 종료
/swapfile swap swap defaults 0 0
# swap 메모리 확인
free
t2.micro로 젠킨스 실행시 멈출 수 있으므로 swap memory를 설정해준다.
2. ubuntu JDK-17 설치
sudo apt-get update
sudo apt-get install openjdk-17-jdk
java -version
환경변수 추가(초기화 방지)
sudo vi /etc/profile
# 아래 코드를 파일의 맨 밑에 추가 후 :wq로 저장 후 vim 종료
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
우분투 재부팅 후 적용 확인
echo $JAVA_HOME
echo $PATH
echo $CLASSPATH
3. 아래 명령을 통해서 우분투의 apt의 패키지 인덱스를 최신화하고, apt가 HTTPS를 통해 패키지를 설치할 수 있도록 설정한다.
sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
4. 도커의 공식 GPG 키 추가
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
5. 레포지토리 셋업
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
6. 도커 엔진 설치, 가장 최신 버전의 도커가 설치된다.
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
7. 도커 설치 확인
sudo docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
Hello from Docker! 문장이 실행되면 성공
8. 젠킨스 이미지 다운로드 받고 컨테이너로 실행
sudo docker run -d -p 9090:8080 -v /jenkins:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock --name jenkins -u root jenkins/jenkins:latest
옵션
- d : 컨테이너를 데몬으로 띄운다.
- p 8080:8080 : 컨테이너 외부와 내부 포트를 포워딩한다. 좌측이 호스트 포트, 우측이 컨테이너 포트다
- v /jenkins:/var/jenkins_home : 도커 컨테이너의 데이터는 컨테이너가 종료되면 휘발된다. 도커 컨테이너의 데이터를 보존하기 위한 여러 방법이 존재하는데, 그 중 한 방법이 볼륨 마운트이다. 이 옵션을 사용하여 젠킨스 컨테이너의 /var/jenkins_home 이라는 디렉토리를 호스트의 /jenkins 와 마운트하고 데이터를 보존할 수 있다.
- -name jenkins : 도커 컨테이너의 이름을 설정한다..
- u root : 컨테이너가 실행될 리눅스의 사용자 계정을 root 로 명시한다.
- -v /var/run/docker.sock:/var/run/docker.sock : Docker in Docker 구현을 위한 소켓 설정
젠킨스 컨테이너 shell에 접속
docker exec -it -u root jenkins bash
apt명령어 실행을 위해 root 접속한다.
apt-get update && \
apt-get -y install apt-transport-https \
ca-certificates \
curl \
gnupg2 \
software-properties-common && \
curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg > /tmp/dkey; apt-key add /tmp/dkey && \
add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \
$(lsb_release -cs) \
stable" && \
apt-get update && \
apt-get -y install docker-ce
공식 docker apt repository 구성 및 docker ce 바이너리 설치하는 명령어를 입력해준다.
추가적으로 docker jenkins에서 host docker 접근 권한을 부여
groupadd -f docker
usermod -aG docker jenkins
chown root:docker /var/run/docker.sock
exit로 젠킨스 shell을 빠져나온 다음 우분투 shell에서
sudo chmod 666 /var/run/docker.sock
를 입력하여 도커 컨테이너 내부의 사용자도 docker.sock 파일에 접속 가능하도록 설정한다.
9. 젠킨스 실행
http://{public ip}:9090 주소 입력
최초 비밀번호 구하기
sudo docker logs 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:
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
*************************************************************
*************************************************************
*************************************************************
위의 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX가 최초 비밀번호이다.
10. 플러그인 설치 후 지역 시간 설정
도커로 젠킨스 설치시 제안하는 플러그인을 다운 받으면 되는데 오류가 오지게 나면서 다운이 안 된다.
해결 방법은 Jenkins관리 → plugin → Advanced settings에서 https로 되어 있는 것을 http로 바꾸고 재실행 후 plugin에서 skip-certificate-check plugin 설치하고 다운 받는다.
그래도 문제가 해결되지 않는다면 https → http로 계속 바꿔가면서 plugin을 다운 받는다.
이후 대쉬보드에서 Jenkins관리 → Script Console에서 해당 스크립트를 입력하고 실행한다.
System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Seoul')
지역 시간을 서울로 설정