728x90
jenkins_1에서 도커를 설치하여 HOST OS의 도커명령어를 사용할 수 있도록 한다.
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
exit
프로젝트에서 DB도 사용하기 때문에 설치를 진행한다.
MariaDB 최신 이미지 실행
docker run \
--name mariadb_1 \
-d \
--restart unless-stopped \
-e MARIADB_ROOT_PASSWORD=lldj123414 \
-e TZ=Asia/Seoul \
-p 3306:3306 \
-v /docker_projects/mariadb_1/conf.d:/etc/mysql/conf.d \
-v /docker_projects/mariadb_1/mysql:/var/lib/mysql \
-v /docker_projects/mariadb_1/run/mysqld:/run/mysqld/ \
mariadb:latest
보안설정
- docker exec -it mariadb_1 /usr/bin/mariadb-secure-installation
- Switch to unix_socket authentication [Y/n] n
- Change the root password? [Y/n] n
- 나머지 Y
마스터계정 생성 및 DB 생성
- docker exec -it mariadb_1 mysql -u root -p
- GRANT ALL PRIVILEGES ON *.* TO lldj@'%' IDENTIFIED BY 'lldj123414';
- GRANT ALL PRIVILEGES ON *.* TO lldjlocal@127.0.0.1 IDENTIFIED BY '1234';
- GRANT ALL PRIVILEGES ON *.* TO lldjlocal@'172.17.%.%' IDENTIFIED BY '1234';
CREATE DATABASE nginx;
CREATE DATABASE app20220916_2__test;
CREATE DATABASE app20220916_2;
USE app20220916_2;
CREATE TABLE `article` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`subject` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
);
insert into `article`(`id`,`subject`) values
(1,'제목1'),
(2,'제목2');
git 설치
- sudo yum install git -y
java-17-openjdk 설치
- sudo yum install java-17-openjdk -y
- sudo yum install java-17-openjdk-devel -y
프로젝트 구성 및 빌드
- git clone https://github.com/sh970901/dockerDB .
- chmod 744 ./gradlew
- ./gradlew clean build
현재 실행중인 컨테이너 중지 및 삭제
- docker stop sbdb_1
- 안되면 : docker kill sbdb_1
- docker rm -f sbdb_1
새 sbdb 이미지 만들기 ("프로젝트에 도커파일이 존재")
- git pull origin master ("git clone으로 받았다면 스킵"
- 그래드 빌드
- docker build -t sbdb .
sbdb 이미지 실행
docker run \
--name=sbdb_1 \
-p 8080:8080 \
-v /docker_projects/sbdb_1/volumes/gen:/gen \
--restart unless-stopped \
-e TZ=Asia/Seoul \
-d \
sbdb
실행 결과
이 방법은 jenkins가 아닌 수동으로 리눅스 서버에서 프로젝트를 받고 DB를 설치하고 빌드한 결과이다. 이 방법 이외에도 ./gradle bootBuildImage로 한번에 간단하게 하는 방법도 존재한다. 자세한 과정은 https://sh970901.tistory.com/62에 기록하였다.하지만 우리가 원하는건 jenkins를 활용하여 빌드를 자동화하는 것이다.
jenkins에 프로젝트를 생성
접속 후 해당 폴더로 이동
- docker exec -it jenkins_1 bash
- cd /var/jenkins_home/workspace/sbdb_1 => 이전에 만들었던 젠킨스 설정 참고
JAVA_HOME 환경변수 변경
- export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
그래들 빌드
- chmod 744 ./gradlew
- ./gradlew clean build
실패원인
- jenkins_1 안에서는 127.0.0.1 으로 DB서버를 찾을 수 없다. 127.0.0.1은 젠킨스 본인 자신을 말한다. 이전에 수동으로 성공했던 이유는 리눅스에서는 127.0.0.1에 3306포트가 Mariadb의 3306과 포트포워딩으로 DB연결이 되었지만 지금 젠킨스에서 빌드할 때는 127.0.0.1로 실행해서는 DB를 찾을 수 없어 안된다.
application.yml에 DB 설정 url을 변경하였다.
이렇게 되면 testDbIp값이 존재하지 않을 때만 127.0.0.1의 주소를 사용하게 된다.
다시 젠킨스로 돌아와서 빌드버튼을 누르면 (수동) 값이 변경 됨을 확인 할 수 있다.
재 실행
- testDbIp=172.17.0.1 (안되면 vim(vi)을 설치하고(apt-get install) 값을 바꿔주고 빌드를 다시해보자)
- ./gradlew clean build
버전으로 인한 빌드 실패 에러메시지가 출력되었다. => export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
'IT' 카테고리의 다른 글
OAuth 2.0 (access Token 발급 과정) (0) | 2022.09.25 |
---|---|
젠킨스(jenkins)로 스프링부트 자동화 3(파이프라인) (0) | 2022.09.22 |
젠킨스(jenkins)로 스프링부트 자동화 1(jenkins에서 jdk-17설치) (1) | 2022.09.21 |
젠킨스(jenkins) 3(github webhook, Private 레포지, 비밀키, 공개키) (0) | 2022.09.21 |
젠킨스(jenkins) 2(ngrok 설치 및 실행) (0) | 2022.09.21 |