찾다
Javajava지도 시간SpringBoot 프로젝트를 자동으로 배포하는 Gitlab CI-CD 방법

1. 개요

이 글에서는 주로 Gitlab CI/CD를 통해 SpringBoot 프로젝트 jar 패키지를 자동으로 배포하는 방법을 기록합니다.

2. 준비

CentOS7 서버 3개를 준비하고 각각 다음 서비스를 배포합니다.

Serial Number System IP Service
1 CentOS7 192.168.56.10 Gitlab
2 CentOS7 192.168.56.11 Runner(Docker 설치)
3 CentOS7 192.168.56. SpringBoot 프로젝트 jar 패키지(jdk, maven 등 설치) .)

위 서비스는 하나의 CentOS7만 사용하고 모든 프로그램을 동일한 시스템에 배포할 수도 있지만 별도로 배포하는 것이 더 좋습니다.

3. 전체 아키텍처 다이어그램

Gitlab CI-CD自动化部署SpringBoot项目的方法

설명:

  • Gitlab 서버는 다음과 같습니다. 배포에 사용 Gitlab 원격 웨어하우스는 CPU 및 메모리 요구 사항이 높습니다. 4코어 CPU와 4GB 이상의 메모리를 사용하는 것이 좋습니다.

  • Runner 서버는 .gitlab-ci에 정의된 단계를 배포하고 실행하는 데 사용됩니다. .yml 파일, Gitlab에 액세스해야 합니다. 웨어하우스 권한은 등록(gitlab-runner 등록)을 통해 다운로드할 수 있습니다.

  • 노트북 서버 사용자가 애플리케이션을 배포합니다. 여기에는 SpringBoot의 jar 패키지가 필요합니다. JDK 및 Maven을 미리 설치하고 환경 변수를 구성합니다.

    1. 환경 준비(선택 사항)
3개의 서버에서 다음 명령을 실행합니다.

yum -y upgrade
yum -y install wget
yum -y install vim

2. 참조 주소:

https://about.gitlab .com/install/#centos-7

https://www.xieniao.com/article/188877.htm

(1) 필요한 종속 항목 설치 및 구성

sudo yum install -y curl policycoreutils-python openssh-server
sudo systemctl enable sshd
sudo systemctl start sshd

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo systemctl reload firewalld

(2) 메일 서비스 설치

sudo yum install postfix
sudo systemctl enable postfix
sudo systemctl start postfix

(3) gitlab 미러 추가
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-13.4.0-ce.0.el7.x86_64.rpm
(4) gitlab 설치 명령 설치

rpm -i gitlab-ce-13.4.0-ce.0.el7.x86_64.rpm --nodeps --force
설치 성공 후 사진:

(5) 서버를 지정하도록 gitlab 구성 파일 수정 IP 및 사용자 정의 포트

vim  /etc/gitlab/gitlab.rb

(6) GitLab을 재설정하고 시작
gitlab-ctl reconfigure
gitlab-ctl restart

"ok: run:" 프롬프트는 시작이 성공했음을 의미합니다Gitlab CI-CD自动化部署SpringBoot项目的方法

(7) GitLab 페이지를 방문하세요

502가 보고되면 잠시 기다리세요. 다시 새로고침해 보세요. 보통 1~2분 정도 소요됩니다.

이 글에서 설정한 계정: root, 새 비밀번호: 11112222


3. Runner 설치

(1) 바이너리 파일 다운로드 Gitlab CI-CD自动化部署SpringBoot项目的方法

sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
(2) 실행 권한 수정

sudo chmod a+x /usr/local/bin/gitlab-runner
(3) GitLab CI 사용자 생성

sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash

(4) 서비스로 설치 및 실행

sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start
프롬프트가 표시되는 경우 sudo: gitlab-runner: 명령을 찾을 수 없습니다. 루트 사용자로 전환하면 sudo를 제거하고 위 명령을 실행할 수 있습니다.

(5) Runner 등록

참조 주소: https://docs.gitlab.com/runner/register/index.html

Execute gitlab-runner 등록 명령:

[root@localhost bin]# gitlab-runner register
Runtime platform                                    arch=amd64 os=linux pid=21527 revision=4e1f20da version=13.4.0
Running in system-mode.

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://192.168.56.10/

Please enter the gitlab-ci token for this runner:
PwF1sZPX_zsB-xChSKjH

Please enter the gitlab-ci description for this runner:
[localhost.localdomain]: test ci cd desc

Please enter the gitlab-ci tags for this runner (comma separated):
my-tag,other-tag

Registering runner... succeeded                     runner=PwF1sZPX
Please enter the executor: ssh, virtualbox, parallels, shell, docker-ssh, docker+machine, docker-ssh+machine, kubernetes, custom, docker:
docker

Please enter the default Docker image (e.g. ruby:2.6):
maven:3.3.9-jdk-8
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

참고: 여기서는 docker 방법을 선택합니다. 따라서 서버에 추가 도커를 설치해야 합니다


#!/bin/bash
# 移除掉旧的版本
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine

# 删除所有旧的数据
sudo rm -rf /var/lib/docker

#  安装依赖包
sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

# 添加源,使用了阿里云镜像
sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 配置缓存
sudo yum makecache fast

# 安装最新稳定版本的docker
sudo yum install -y docker-ce

# 配置镜像加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json 여기서 모든 프로젝트에서 사용할 수 있는 전역 공유 Runner(관리자 권한, 서버 주소 복사 및 토큰)를 등록하거나 별도의 Runner를 등록할 수도 있습니다. 프로젝트 수준에서(Project Runner 설정 페이지에 들어가서 주소와 토큰을 복사하세요) <p><strong></strong><br><br></p>등록 성공 후, 등록된 러너는 러너 목록에서 볼 수 있습니다<p><br></p><p><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/164/168379748034185.png?x-oss-process=image/resize,p_40" class="lazy" alt="Gitlab CI-CD自动化部署SpringBoot项目的方法"></p>확인: 태그 없는 작업 실행 이 러너가 태그 없이 작업을 선택할 수 있는지 여부를 나타냅니다<p><br></p><p><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/164/168379748013802.png?x-oss-process=image/resize,p_40" class="lazy" alt="Gitlab CI-CD自动化部署SpringBoot项目的方法"></p> 4. 애플리케이션 서버 환경<p><br>(1) 사용자가 원격으로 로그인하도록 허용(선택 사항)</p><pre class="brush:php;toolbar:false">vi /etc/ssh/sshd_config
修改:
PasswordAuthentication yes                      
PermitRootLogin yes

重启服务:
service sshd restart

(2) JDK1.8 설치Gitlab CI-CD自动化部署SpringBoot项目的方法

(2) Unzip

tar -zxvf jdk-8u161-linux-x64.tar.gz
重命名:
mv jdk1.8.0_161 java1.8

(3) 환경 변수 구성

vi /etc/profile

添加以下内容:
export JAVA_HOME=/usr/local/java1.8
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
保存退出

source /etc/profile
java -version
(3) Maven3 설치 .3.9

(2) Unzip

tar -zxvf apache-maven-3.3.9-bin.tar.gz 

重命名:
mv apache-maven-3.3.9 maven-3.3.9
(3) 환경 변수 구성

vi /etc/profile

添加以下内容:
export MAVEN_HOME=/usr/local/maven-3.3.9
export PATH=$MAVEN_HOME/bin:$PATH
保存退出

source /etc/profile
mvn -v
5. SpringBoot 프로젝트 생성

1 Gitlab Spring 템플릿을 사용하여 SpringBoot 프로젝트를 빠르게 생성합니다. 오류가 보고되면 xml

의 이 줄에서 다음 오류를 보고합니다.

[FATAL] com.example:demo:0.0.1-SNAPSHOT에 대한 확인할 수 없는 상위 POM: org.springframework 아티팩트를 전송할 수 없습니다. boot:spring-boot- starter-parent:pom:2.0.1.RELEASE 중앙에서/중앙으로(https://repo.maven.apache.org/maven2): repo.maven.apache.org:443 [repo .maven.apache.org /151.101.40.215] 실패: 연결 시간 초과(Connection timed out) 및 'parent.relativePath'가 잘못된 로컬 POM @ 라인 14, 열 10

수정된 버전Gitlab CI-CD自动化部署SpringBoot项目的方法1.5.9.RELEASE을 가리킵니다.

2、添加环境变量(登录应用服务器密码)

注: 其中 ssh_password 这个添加到环境变量中,取消勾选 Protect Branch (仅保护分支);修改和添加都是默认勾选,需要取消,否则,其他分支不能读取到该变量;

Gitlab CI-CD自动化部署SpringBoot项目的方法

先在应用服务器上创建一个目录,用于上传存放项目 jar 包:

mkdir gitlab-project

添加 .gitlab-ci.yml 文件时,可以先再 CI/CD Pipeline 中 的 CI Lint 中检验 .gitlab-ci.yml 文件格式

# 定义一些变量, 下面各阶段会使用
variables:
  server_ip: 192.168.56.12
  jar_name: demo-0.0.1-SNAPSHOT.jar
  java_path: /usr/local/java1.8/bin
  upload_path: /usr/local/gitlab-project

# 定义执行的各个阶段及顺序
stages:
  - build
  - upload
  - deploy

# 使用 maven 镜像打包项目
maven-build:
  stage: build
  image: maven:3.5.0-jdk-8
  script:
    - mvn package -B -Dmaven.test.skip=true
  cache:
    key: m2-repo
    paths:
      - .m2/repository
  artifacts:
    paths: 
      - target/$jar_name

# 上传生成的 jar 包到你的应用服务器,这里使用 ictu/sshpass 这个镜像,是为了使用 sshpass 命令
upload-jar:
  stage: upload
  image: ictu/sshpass
  script: 
    - ls -l target/
    - sshpass -p $ssh_password scp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no target/$jar_name root@$server_ip:$upload_path/$jar_name

# 启动 SpringBoot jar包
deploy-test:
  stage: deploy
  image: ictu/sshpass
  script:
    - sshpass -p $ssh_password ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no root@$server_ip "nohup $java_path/java -jar $upload_path/$jar_name >/dev/null 2>&1 &"

这里使用了DockerHub上面的一个公共镜像(ictu/sshpass),主要是想使用启动自带的sshpass命令执行scp和ssh命令。
如果一切顺利的话,就会自动触发 CI/CD ;失败的话查看报错信息,可使用 Debug 模式执行调试命令 。

[root@localhost gitlab-project]# jps
22119 Jps
22073 demo-0.0.1-SNAPSHOT.jar
[root@localhost gitlab-project]# curl localhost:8080
Spring is here!

Gitlab CI-CD自动化部署SpringBoot项目的方法

可能遇到的问题总结:

  1. 权限问题:可以先使用 root 用户看看是不是权限问题导致,如果是的话,提升执行用户的权限;并发问题:这里没有修改 Runner 的并发数,可以修改同时可以进行的任务并发数;其他问题:读取不到配置的环境变量,取消勾选仅保护分支的选项;

  2. 未执行job:没有勾选未配置 tags 也执行选项;

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

성명
이 기사는 亿速云에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
고급 Java 프로젝트 관리, 구축 자동화 및 종속성 해상도에 Maven 또는 Gradle을 어떻게 사용합니까?고급 Java 프로젝트 관리, 구축 자동화 및 종속성 해상도에 Maven 또는 Gradle을 어떻게 사용합니까?Mar 17, 2025 pm 05:46 PM

이 기사에서는 Java 프로젝트 관리, 구축 자동화 및 종속성 해상도에 Maven 및 Gradle을 사용하여 접근 방식과 최적화 전략을 비교합니다.

적절한 버전 및 종속성 관리로 Custom Java 라이브러리 (JAR Files)를 작성하고 사용하려면 어떻게해야합니까?적절한 버전 및 종속성 관리로 Custom Java 라이브러리 (JAR Files)를 작성하고 사용하려면 어떻게해야합니까?Mar 17, 2025 pm 05:45 PM

이 기사에서는 Maven 및 Gradle과 같은 도구를 사용하여 적절한 버전 및 종속성 관리로 사용자 정의 Java 라이브러리 (JAR Files)를 작성하고 사용하는 것에 대해 설명합니다.

카페인 또는 구아바 캐시와 같은 라이브러리를 사용하여 자바 애플리케이션에서 다단계 캐싱을 구현하려면 어떻게해야합니까?카페인 또는 구아바 캐시와 같은 라이브러리를 사용하여 자바 애플리케이션에서 다단계 캐싱을 구현하려면 어떻게해야합니까?Mar 17, 2025 pm 05:44 PM

이 기사는 카페인 및 구아바 캐시를 사용하여 자바에서 다단계 캐싱을 구현하여 응용 프로그램 성능을 향상시키는 것에 대해 설명합니다. 구성 및 퇴거 정책 관리 Best Pra와 함께 설정, 통합 및 성능 이점을 다룹니다.

캐싱 및 게으른 하중과 같은 고급 기능을 사용하여 객체 관계 매핑에 JPA (Java Persistence API)를 어떻게 사용하려면 어떻게해야합니까?캐싱 및 게으른 하중과 같은 고급 기능을 사용하여 객체 관계 매핑에 JPA (Java Persistence API)를 어떻게 사용하려면 어떻게해야합니까?Mar 17, 2025 pm 05:43 PM

이 기사는 캐싱 및 게으른 하중과 같은 고급 기능을 사용하여 객체 관계 매핑에 JPA를 사용하는 것에 대해 설명합니다. 잠재적 인 함정을 강조하면서 성능을 최적화하기위한 설정, 엔티티 매핑 및 모범 사례를 다룹니다. [159 문자]

Java의 클래스로드 메커니즘은 다른 클래스 로더 및 대표 모델을 포함하여 어떻게 작동합니까?Java의 클래스로드 메커니즘은 다른 클래스 로더 및 대표 모델을 포함하여 어떻게 작동합니까?Mar 17, 2025 pm 05:35 PM

Java의 클래스 로딩에는 부트 스트랩, 확장 및 응용 프로그램 클래스 로더가있는 계층 적 시스템을 사용하여 클래스로드, 링크 및 초기화 클래스가 포함됩니다. 학부모 위임 모델은 핵심 클래스가 먼저로드되어 사용자 정의 클래스 LOA에 영향을 미치도록합니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

맨티스BT

맨티스BT

Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전