다음 서버의 운영 체제는 모두 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이 최신 버전인지 미리 확인하세요. 그렇지 않으면 나중에 오류가 발생합니다.
우리의 주요 프로세스는 Gitlab을 통해 코드를 관리한 다음 Gitlab 자체 Gitlab CI/CD 기능을 사용하여 GitlabRunner에 등록하고 바인딩하는 것입니다.
바인딩이 성공하면 코드가 제출될 때마다 GitlabRunner가 활성화되고 자동 배포를 위해 해당 스크립트가 실행됩니다.
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
For Debian/Ubuntu/Mint
sudo apt-get install gitlab-ci-multi-runner
For RHEL/CentOS/Fedora
sudo yum -y install gitlab-ci-multi-runner
1 Gitlab이 자동으로 배포해야 하는 웨어하우스를 열고 설정을 선택하세요. 》CI/CD -》러너스.
2. 아래에 표시된 것처럼 나중에 GitlabRunner를 등록할 때 사용되는 두 가지 중요한 정보를 볼 수 있습니다.
3. GitlabRunner 등록:
기본 명령:
등록: gitlab-runnerregister
등록된 러너 보기: gitlab-runner list
모든 등록 취소: gitlab-runner unregister --all-runners
서버 B로 돌아가서 명령을 실행gitlab-runner register
Register 자세한 설명 프로세스 중:
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은 웨어하우스의 루트 디렉터리에 .gitlab-ci.yml이라는 파일을 생성하는 템플릿을 제공했습니다. 여기서는 springboot 프로젝트를 예로 들어 3개의 파일(.gitlab-ci)을 추가합니다. .yml, Dockerfile, docker-compose.yml) 파일의 위치와 내용은 아래와 같습니다. 필요에 따라 내용을 수정하면 됩니다. Dockerfile의 몇 가지 기본 파일 구조와 구문을 숙지해야 합니다. 및 docker-compose.yml:
3 파일 위치 맵
.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
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
点进去看,出现问题
这里提示我们的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后台,这里手动再执行一次:
最新的一次已通过 passed:
查看日志的方法,进第一个build查看日志,获取项目的路径(大家有更好的方法可以告诉下我)
cd到 项目的docker目录,使用
docker-compose logs -ft
测试接口:
问题1:自动化部署build报错:
解决方法,执行命令:
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!