sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
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 서버는 다음과 같습니다. 배포에 사용 Gitlab 원격 웨어하우스는 CPU 및 메모리 요구 사항이 높습니다. 4코어 CPU와 4GB 이상의 메모리를 사용하는 것이 좋습니다.
Runner 서버는 .gitlab-ci에 정의된 단계를 배포하고 실행하는 데 사용됩니다. .yml 파일, Gitlab에 액세스해야 합니다. 웨어하우스 권한은 등록(gitlab-runner 등록)을 통해 다운로드할 수 있습니다.
-
노트북 서버 사용자가 애플리케이션을 배포합니다. 여기에는 SpringBoot의 jar 패키지가 필요합니다. JDK 및 Maven을 미리 설치하고 환경 변수를 구성합니다.
1. 환경 준비(선택 사항)
yum -y upgrade
yum -y install wget
yum -y install vim
로그인 후 복사
2. 참조 주소: yum -y upgrade yum -y install wget yum -y install vim
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 -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
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
rpm -i gitlab-ce-13.4.0-ce.0.el7.x86_64.rpm --nodeps --force
vim /etc/gitlab/gitlab.rb
(6) GitLab을 재설정하고 시작
gitlab-ctl reconfigure gitlab-ctl restart
"ok: run:" 프롬프트는 시작이 성공했음을 의미합니다
3. Runner 설치
(1) 바이너리 파일 다운로드
sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
sudo chmod a+x /usr/local/bin/gitlab-runner
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
로그인 후 복사
(4) 서비스로 설치 및 실행
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner sudo gitlab-runner start
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!
#!/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 <<-'EOF' { "registry-mirrors": ["http://hub-mirror.c.163.com"] } EOF # 启动docker引擎并设置开机启动 sudo systemctl start docker sudo systemctl enable docker # 配置当前用户对docker的执行权限 sudo groupadd docker sudo gpasswd -a ${USER} docker sudo systemctl restart docker
(1) 사용자가 원격으로 로그인하도록 허용(선택 사항)
vi /etc/ssh/sshd_config 修改: PasswordAuthentication yes PermitRootLogin yes 重启服务: service sshd restart
(2) JDK1.8 설치
tar -zxvf jdk-8u161-linux-x64.tar.gz
重命名:
mv jdk1.8.0_161 java1.8
로그인 후 복사
(3) 환경 변수 구성tar -zxvf jdk-8u161-linux-x64.tar.gz 重命名: mv jdk1.8.0_161 java1.8
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
(2) Unzip
tar -zxvf apache-maven-3.3.9-bin.tar.gz 重命名: mv apache-maven-3.3.9 maven-3.3.9
vi /etc/profile 添加以下内容: export MAVEN_HOME=/usr/local/maven-3.3.9 export PATH=$MAVEN_HOME/bin:$PATH 保存退出 source /etc/profile mvn -v
[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
수정된 버전1.5.9.RELEASE을 가리킵니다.
2、添加环境变量(登录应用服务器密码)
注: 其中 ssh_password 这个添加到环境变量中,取消勾选 Protect Branch (仅保护分支);修改和添加都是默认勾选,需要取消,否则,其他分支不能读取到该变量;
先在应用服务器上创建一个目录,用于上传存放项目 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!
可能遇到的问题总结:
权限问题:可以先使用 root 用户看看是不是权限问题导致,如果是的话,提升执行用户的权限;并发问题:这里没有修改 Runner 的并发数,可以修改同时可以进行的任务并发数;其他问题:读取不到配置的环境变量,取消勾选仅保护分支的选项;
未执行job:没有勾选未配置 tags 也执行选项;
위 내용은 SpringBoot 프로젝트를 자동으로 배포하는 Gitlab CI-CD 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











1. Redis는 분산 잠금 원칙과 분산 잠금이 필요한 이유를 구현합니다. 분산 잠금에 대해 이야기하기 전에 분산 잠금이 필요한 이유를 설명해야 합니다. 분산 잠금의 반대는 독립형 잠금입니다. 다중 스레드 프로그램을 작성할 때 공유 변수를 동시에 작동하여 발생하는 데이터 문제를 방지하기 위해 일반적으로 잠금을 사용하여 공유 변수를 상호 제외합니다. 공유 변수의 사용 범위는 동일한 프로세스에 있습니다. 동시에 공유 리소스를 운영해야 하는 여러 프로세스가 있는 경우 어떻게 상호 배타적일 수 있습니까? 오늘날의 비즈니스 애플리케이션은 일반적으로 마이크로서비스 아키텍처입니다. 이는 하나의 애플리케이션이 여러 프로세스를 배포한다는 의미이기도 합니다. 여러 프로세스가 MySQL에서 동일한 레코드 행을 수정해야 하는 경우 잘못된 작업으로 인해 발생하는 더티 데이터를 방지하려면 배포가 필요합니다. 현재 소개할 스타일은 잠겨 있습니다. 포인트를 얻고 싶다

Springboot가 파일을 읽지만 jar 패키지로 패키징한 후 최신 개발에 액세스할 수 없습니다. springboot가 파일을 jar 패키지로 패키징한 후 파일을 읽을 수 없는 상황이 발생합니다. 그 이유는 패키징 후 파일의 가상 경로 때문입니다. 유효하지 않으며 읽기를 통해서만 액세스할 수 있습니다. 파일은 리소스 publicvoidtest(){Listnames=newArrayList();InputStreamReaderread=null;try{ClassPathResourceresource=newClassPathResource("name.txt");Input 아래에 있습니다.

프로젝트 문서 관리를 위해 GitLab을 사용하는 방법 1. 배경 소개 소프트웨어 개발 프로세스에서 프로젝트 문서는 개발 팀이 프로젝트의 요구 사항과 설계를 이해하는 데 도움이 될 뿐만 아니라 테스트 팀에 참조를 제공할 수도 있습니다. 그리고 고객. 프로젝트 문서의 버전 관리 및 팀 협업을 용이하게 하기 위해 프로젝트 문서 관리에 GitLab을 사용할 수 있습니다. GitLab은 Git 기반의 버전 관리 시스템으로, 코드 관리 지원 외에도 프로젝트 문서 관리도 가능합니다. 2. GitLab 환경설정 먼저, 저는

SpringBoot와 SpringMVC는 모두 Java 개발에서 일반적으로 사용되는 프레임워크이지만 둘 사이에는 몇 가지 분명한 차이점이 있습니다. 이 기사에서는 이 두 프레임워크의 기능과 용도를 살펴보고 차이점을 비교할 것입니다. 먼저 SpringBoot에 대해 알아봅시다. SpringBoot는 Spring 프레임워크를 기반으로 하는 애플리케이션의 생성 및 배포를 단순화하기 위해 Pivotal 팀에서 개발되었습니다. 독립 실행형 실행 파일을 구축하는 빠르고 가벼운 방법을 제공합니다.

1. RedisAPI 기본 직렬화 메커니즘인 RedisTemplate1.1을 사용자 정의합니다. API 기반 Redis 캐시 구현은 데이터 캐싱 작업에 RedisTemplate 템플릿을 사용합니다. 여기서 RedisTemplate 클래스를 열고 클래스의 소스 코드 정보를 봅니다. 키 선언, 값의 다양한 직렬화 방법, 초기 값은 비어 있음 @NullableprivateRedisSe

1. gitlab 설치 패키지를 다운로드하세요. [Tsinghua University Open Source Software Mirror Station]에서 최신 중국어 버전의 gitlab 설치 패키지를 다운로드하세요. 설치 패키지에는 중국어 간체 현지화 패키지가 함께 제공됩니다. [gitlab 공식 홈페이지]에서 최신 gitlab 설치 패키지를 다운로드하세요. 2. gitlab을 설치하고 gitlab-ce-14.9.4-ce.0.el7.x86_64를 예로 들어 centos 서버에 업로드한 다음 yum을 사용하여 gitlabyum-yinstallgitlab-ce-14.3.2-ce.0을 설치합니다. el7.x86_64.rpm은 yum을 사용하여 gitum-yinstallgit#git 설치 및 gitlab 구성 파일 vi 수정

프로젝트에서는 일부 구성 정보가 필요한 경우가 많습니다. 이 정보는 테스트 환경과 프로덕션 환경에서 구성이 다를 수 있으며 실제 비즈니스 상황에 따라 나중에 수정해야 할 수도 있습니다. 이러한 구성은 코드에 하드 코딩할 수 없습니다. 예를 들어 이 정보를 application.yml 파일에 작성할 수 있습니다. 그렇다면 코드에서 이 주소를 어떻게 얻거나 사용합니까? 2가지 방법이 있습니다. 방법 1: @Value 주석이 달린 ${key}를 통해 구성 파일(application.yml)의 키에 해당하는 값을 가져올 수 있습니다. 이 방법은 마이크로서비스가 상대적으로 적은 상황에 적합합니다. 프로젝트, 업무가 복잡할 때는 논리

이 글에서는 dubbo+nacos+Spring Boot의 실제 개발에 대해 이야기하기 위해 자세한 예제를 작성하겠습니다. 이 기사에서는 이론적 지식을 너무 많이 다루지는 않지만 dubbo를 nacos와 통합하여 개발 환경을 신속하게 구축하는 방법을 설명하는 가장 간단한 예를 작성합니다.
