>  기사  >  Java  >  Gitlab-runner+Docker가 SpringBoot 프로젝트의 자동 배포를 구현하는 방법

Gitlab-runner+Docker가 SpringBoot 프로젝트의 자동 배포를 구현하는 방법

王林
王林앞으로
2023-05-20 18:55:201818검색

1. 환경 요구 사항

다음 서버의 운영 체제는 모두 Centos7

  • 서버 A: Gitlab

  • 서버 B: GitlabRunner, Docker, docker-compose, Java1.8, maven3.6.3, git

ps: 여기에서는 서버 B의 GitlabRunner, Java1.8, maven3.6.3, git을 분리하여 독립적으로 배포할 수 있습니다. Java가 필요한 이유는 패키징에 사용되는 maven입니다.

시연의 편의를 위해 애플리케이션 서버 B에서는 docker와 docker-compose만 사용하면 됩니다.

관련 서비스 구축 튜토리얼은 공식 문서나 기타 신뢰할 수 있는 타사 블로그 튜토리얼을 참조하세요!

내 서비스의 현재 버전

  • Gitlab: 14.9

  • GitlabRunner: 14.10.0

  • docker: 20.10.14

  • docker-compose: 1 .29.2

  • Git: 2.31 .1, Git이 최신 버전인지 미리 확인하세요. 그렇지 않으면 나중에 오류가 발생합니다.

2. 주요 프로세스

우리의 주요 프로세스는 Gitlab을 통해 코드를 관리한 다음 Gitlab 자체 Gitlab CI/CD 기능을 사용하여 GitlabRunner에 등록하고 바인딩하는 것입니다.

바인딩이 성공하면 코드가 제출될 때마다 GitlabRunner가 활성화되고 자동 배포를 위해 해당 스크립트가 실행됩니다.

Gitlab-runner+Docker가 SpringBoot 프로젝트의 자동 배포를 구현하는 방법

3. GitlabRunner 설치 및 등록

3.1 설치

요약 총 2단계가 있습니다.

1 gitlab 공식 라이브러리 추가:

Debian/Ubuntu/Mint의 경우

curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash

RHEL/CentOS의 경우 /Fedora

curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash

2. 명령 설치:

For Debian/Ubuntu/Mint

sudo apt-get install gitlab-ci-multi-runner

For RHEL/CentOS/Fedora

sudo yum -y install gitlab-ci-multi-runner

3.2 등록 시작

1 Gitlab이 자동으로 배포해야 하는 웨어하우스를 열고 설정을 선택하세요. 》CI/CD -》러너스.

Gitlab-runner+Docker가 SpringBoot 프로젝트의 자동 배포를 구현하는 방법

2. 아래에 표시된 것처럼 나중에 GitlabRunner를 등록할 때 사용되는 두 가지 중요한 정보를 볼 수 있습니다.

Gitlab-runner+Docker가 SpringBoot 프로젝트의 자동 배포를 구현하는 방법

3. GitlabRunner 등록:

기본 명령:

  • 등록: gitlab-runnerregister

  • 등록된 러너 보기: gitlab-runner list

  • 모든 등록 취소: gitlab-runner unregister --all-runners

서버 B로 돌아가서 명령을 실행gitlab-runner registerRegister 자세한 설명 프로세스 중:

Gitlab-runner+Docker가 SpringBoot 프로젝트의 자동 배포를 구현하는 방법

  • GitLab 인스턴스 URL 입력(예: https://gitlab.com/):
    gitlab의 서비스 URL

  • 등록 토큰 입력:
    토큰 입력 , 위 그림을 참조하세요

  • 러너에 대한 설명 입력:
    러너 설명 입력

  • 러너에 대한 태그 입력(쉼표로 구분)

이 gitlab-runner에 대한 태그를 입력하세요. 후속 사용 프로세스에서 이 태그를 사용하여 gitlab-runner(yml 파일, 작업은 태그 라벨을 설정하여 지정된 Runner를 선택함)를 지정해야 합니다.

  • 러너에 대한 선택적 유지 관리 참고 사항을 입력하세요.
    선택적 유지 관리 메모 입력

  • 실행 프로그램 입력: docker+machine, docker-ssh+machine, custom, docker-windows, docker-ssh, ssh, kubernetes, docker, parallels, shell, virtualbox:

Enter 키를 누르세요. gitlab-runner 폴더를 종료하고 설치하면 다음으로 구성이 자동으로 생성됩니다.

gitlab 배경 Runner 설정으로 돌아가서 페이지를 새로 고치면 새 Runner가 표시됩니다:

Gitlab-runner+Docker가 SpringBoot 프로젝트의 자동 배포를 구현하는 방법

4. 중요!!!

코드를 제출한 후 빌드 및 배포를 제어하려면 셸 스크립트를 어떻게 사용해야 합니까? Gitlab은 웨어하우스의 루트 디렉터리에 .gitlab-ci.yml이라는 파일을 생성하는 템플릿을 제공했습니다. 여기서는 springboot 프로젝트를 예로 들어 3개의 파일(.gitlab-ci)을 추가합니다. .yml, Dockerfile, docker-compose.yml) 파일의 위치와 내용은 아래와 같습니다. 필요에 따라 내용을 수정하면 됩니다. Dockerfile의 몇 가지 기본 파일 구조와 구문을 숙지해야 합니다. 및 docker-compose.yml:

3 파일 위치 맵

Gitlab-runner+Docker가 SpringBoot 프로젝트의 자동 배포를 구현하는 방법.gitlab-ci.yml

stages:
  - build
  - deploy_dev
  - clean
# 打包镜像
build:
  stage: build
  only:
    - dev
  script:
    - $MAVEN_HOME/bin/mvn clean package '-Dmaven.test.skip=true'
    - cp ./XXX/target/XXX.jar docker/
    - cd docker
    - docker build -t dev/XXX:v1.0.0 .
  tags:
    - maven
# 部署开发服务器
deploy_dev:
  stage: deploy_dev
  only:
    - dev
  script:
    - cd docker
    - docker-compose down
    - docker-compose up -d
  tags:
    - maven
#清理虚悬镜像
clean:
  stage: clean
  only:
    - dev
  script:
    - docker rmi $(docker images -q -f dangling=true)
  tags:
    - maven

루트 디렉터리에 Docker 폴더를 생성하고

Dockerfile 생성:

#FROM java:8 #java:8这个镜像体积有643MB,打包镜像后体积太大了,不建议使用
# openjdk:8-jre-alpine 体积最小,只有85MB
FROM openjdk:8-jre-alpine
# 以下2个RUN解决 java验证码接口报错的问题,
RUN echo -e "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/main\n\
https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/community" > /etc/apk/repositories
RUN apk --update add curl bash ttf-dejavu && \
      rm -rf /var/cache/apk/*
COPY . /opt/app
WORKDIR /opt/app

docker-compose.yml 생성:

version: '3.1'
services:
  education-course:
    container_name: dev-XXX-server
    restart: always
    image: dev/XXX:v1.0.0
    network_mode: "host"
    volumes:
      - /opt/XXX-server/logs:/XXX/logs
    command: java -jar -Xms1024m -Xmx1024m -Duser.timezone=GMT+08 xxx.jar --spring.profiles.active=dev

5. Test

로컬 아이디어 코드를 dev 브랜치에 한 번만 제출하면 바로 실행할 수 있습니다

点进去看,出现问题

Gitlab-runner+Docker가 SpringBoot 프로젝트의 자동 배포를 구현하는 방법

Gitlab-runner+Docker가 SpringBoot 프로젝트의 자동 배포를 구현하는 방법

这里提示我们的git版本太低了

当前git版本:

[root@localhost local]# git --version
git version 1.8.3.1

升级最新版git后:

[root@localhost yum.repos.d]# git --version
git version 2.24.4

回到gitlab后台,这里手动再执行一次:

Gitlab-runner+Docker가 SpringBoot 프로젝트의 자동 배포를 구현하는 방법

最新的一次已通过 passed:

Gitlab-runner+Docker가 SpringBoot 프로젝트의 자동 배포를 구현하는 방법

查看日志的方法,进第一个build查看日志,获取项目的路径(大家有更好的方法可以告诉下我)

Gitlab-runner+Docker가 SpringBoot 프로젝트의 자동 배포를 구현하는 방법

Gitlab-runner+Docker가 SpringBoot 프로젝트의 자동 배포를 구현하는 방법

cd到 项目的docker目录,使用

docker-compose logs -ft

测试接口:

Gitlab-runner+Docker가 SpringBoot 프로젝트의 자동 배포를 구현하는 방법

6.常见问题

问题1:自动化部署build报错:

Gitlab-runner+Docker가 SpringBoot 프로젝트의 자동 배포를 구현하는 방법

解决方法,执行命令:

sudo chmod 777 /var/run/docker.sock

问题2:docker apline temporary error (try again later) 错误
没有dns导致的

在本机系统上创建daemon文件添加dns,然后重启docker

vim /etc/docker/daemon.json
{
"dns": ["8.8.8.8"]
}
sudo service docker restart

위 내용은 Gitlab-runner+Docker가 SpringBoot 프로젝트의 자동 배포를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제