DevOps系列文章 之 Gitlab+Docker自动部署SpringBoot

这篇具有很好参考价值的文章主要介绍了DevOps系列文章 之 Gitlab+Docker自动部署SpringBoot。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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,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,从而执行相应的脚本程序实现自动部署。

DevOps系列文章 之 Gitlab+Docker自动部署SpringBoot,devops,gitlab,docker

3.GitlabRunner 安装和注册

3.1 安装

官方文档安装教程:Install GitLab Runner manually on GNU/Linux | GitLab

总结一共就2个步骤:

1.添加gitlab官方库:

For Debian/Ubuntu/Mint

1

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

For RHEL/CentOS/Fedora

1

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

2.命令安装:

For Debian/Ubuntu/Mint

1

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

For RHEL/CentOS/Fedora

1

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

3.2 开始注册

1.打开Gitlab需要自动部署的仓库,选择Setting-》CI / CD -》Runners。

DevOps系列文章 之 Gitlab+Docker自动部署SpringBoot,devops,gitlab,docker

2.如下图,可以看到最关键的两个信息,这俩待会GitlabRunner注册的时候会用到.

DevOps系列文章 之 Gitlab+Docker自动部署SpringBoot,devops,gitlab,docker

3.GitlabRunner注册:

基本命令:

  • 注册:gitlab-runner register
  • 查看已注册Runner:gitlab-runner list
  • 取消所有注册:gitlab-runner unregister --all-runners

回到服务器B,执行命令gitlab-runner register 注册流程详解:

DevOps系列文章 之 Gitlab+Docker自动部署SpringBoot,devops,gitlab,docker

  • Enter the GitLab instance URL (for example, The DevSecOps Platform | GitLab):
    输入gitlab的服务URL
  • Enter the registration token:
    输入令牌,参考上图
  • Enter a description for the runner:
    输入Runner描述
  • Enter tags for the runner (comma-separated)

给这个gitlab-runner输入一个标记,这个tag非常重要,在后续的使用过程中需要使用这个tag来指定gitlab-runner(yml文件,job通过设置tags标签选用指定的Runner)

  • Enter optional maintenance note for the runner:
    输入可选维护说明
  • Enter an executor: docker+machine, docker-ssh+machine, custom, docker-windows, docker-ssh, ssh, kubernetes, docker, parallels, shell, virtualbox:

回车结束,安装gitlab-runner文件夹下会自动生成config.

回到gitlab后台Runner设置处,刷新页面就可以看到新增的一个Runner:

DevOps系列文章 之 Gitlab+Docker自动部署SpringBoot,devops,gitlab,docker

4.制作脚本! 重要!!!

当提交代码后,我们应该怎么用Shell脚本来控制构建和部署呢?Gitlab为我们提供好了一个模版,就是在仓库根目录下创建名为:.gitlab-ci.yml 文件

这里以一个springboot项目为例子,在原项目基础上增加了3个文件(.gitlab-ci.yml 、Dockerfile 、docker-compose.yml),下面展示了文件的位置和内容,内容根据你的需求修改就行了,需要熟悉Dockerfile 和 docker-compose.yml的一些基础文件结构及语法:

3个文件位置图

DevOps系列文章 之 Gitlab+Docker自动部署SpringBoot,devops,gitlab,docker

.gitlab-ci.yml

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

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:

1

2

3

4

5

6

7

8

9

10

#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 :

1

2

3

4

5

6

7

8

9

10

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.测试

本地idea提交一次代码到dev分支,可以到已经在跑了

DevOps系列文章 之 Gitlab+Docker自动部署SpringBoot,devops,gitlab,docker

点进去看,出现问题

DevOps系列文章 之 Gitlab+Docker自动部署SpringBoot,devops,gitlab,docker

DevOps系列文章 之 Gitlab+Docker自动部署SpringBoot,devops,gitlab,docker

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

当前git版本:

1

2

[root@localhost local]# git --version

git version 1.8.3.1

升级最新版git后:

1

2

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

git version 2.24.4

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

DevOps系列文章 之 Gitlab+Docker自动部署SpringBoot,devops,gitlab,docker

最新的一次已通过 passed:

DevOps系列文章 之 Gitlab+Docker自动部署SpringBoot,devops,gitlab,docker

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

DevOps系列文章 之 Gitlab+Docker自动部署SpringBoot,devops,gitlab,docker

DevOps系列文章 之 Gitlab+Docker自动部署SpringBoot,devops,gitlab,docker

cd到 项目的docker目录,使用

1

docker-compose logs -ft

测试接口:

DevOps系列文章 之 Gitlab+Docker自动部署SpringBoot,devops,gitlab,docker

6.常见问题

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

DevOps系列文章 之 Gitlab+Docker自动部署SpringBoot,devops,gitlab,docker

解决方法,执行命令:

1

sudo chmod 777 /var/run/docker.sock

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

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

1

2

3

4

5

vim /etc/docker/daemon.json

{

"dns": ["8.8.8.8"]

}

sudo service docker restart文章来源地址https://www.toymoban.com/news/detail-649129.html

到了这里,关于DevOps系列文章 之 Gitlab+Docker自动部署SpringBoot的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Devops系列六(CI篇之jenkinsfile)jenkins将gitlab helm yaml和argocd 串联,自动部署到K8S

    上文我们说了pipeline,已为本文铺路不少,接下里就是将之串联起来。 先想说下,为什么是jenkinsfile, 因为jenkins job还支持pipeline方式。 这种方式,不建议实际使用,仅限于测试或调试groovy代码。 下面贴出来,我们的使用方式。好处是:采用分布式的思想,改动git上的jenkinsf

    2024年02月13日
    浏览(55)
  • DevOps系列文章 之 SpringBoot整合GitLab-CI实现持续集成

    在企业开发过程中,我们开发的功能或者是修复的BUG都需要部署到服务器上去,而这部分部署操作又是重复且繁琐的工作,GitLab-CI 持续集成为我们解决了这一痛点,将重复部署的工作自动化,大大的节省了程序员们的宝贵时间。本文详细讲述了 GitLab-CI 持续集成的安装、部署

    2024年02月13日
    浏览(45)
  • Devops系列五(CI篇之pipeline libraray)jenkins将gitlab helm yaml和argocd 串联,自动部署到K8S

    本文是CI篇的上文,因为上一篇已经作了总体设计,就不再赘述,有需要的请看前文。 我们将演示,使用CI工具–jenkins,怎么和CD工具–argocd串联,重点是在Jenkins该怎么做。准备工作和argocd等相关事项,在前文已铺垫ok。 Jenkins,我们是使用k8s来部署的一个master-slave结构的集群

    2024年02月13日
    浏览(47)
  • DevOps系列文章 之 Docker in Docker

    一、  背景介绍 工作中,要实现在docker中运行docker,实现镜像的拉取,创建,修改,上传等操作。 尝试过在docker中,安装docker。行不通,服务起不来。 而且直接在 docker 容器内嵌套安装 docker 未免太过臃肿。 内部安装与运行Docker无疑增加了服务器镜像的大小,同时还增加D

    2024年02月16日
    浏览(41)
  • DevOps系列文章 之 docker 制作kafka镜像

    Docker制作Kafka镜像教程 概述 本教程将指导你如何使用Docker制作一个Kafka镜像。Kafka是一个高性能、分布式的消息队列系统,用于处理大规模的实时数据流。使用Docker制作Kafka镜像可以方便地部署和管理Kafka集群。 整体流程 下面是制作Kafka镜像的整体流程: 步骤1:安装Docker 首先

    2024年02月15日
    浏览(34)
  • DevOps系列文章之 Spring Boot Docker打包

    应用准备容器化,因为几十个应用从测试到发布太麻烦了,而且还会因为环境的因素导致部署中出现各种问题。为了在开发、测试、生产都能保持一致的环境,就引进了容器技术,而目前常用的应用使用基于spring boot的。 在Spring Boot应用中,我们可以约定不同的标识来定义不

    2024年02月11日
    浏览(46)
  • DevOps系列文章之 Docker 安装 NFS 服务器

    环境: 192.186.2.105 NFS 服务器 192.168.2.106 Client 客户端 安装 一、服务器端 https://github.com/f-u-z-z-l-e/docker-nfs-server 1、创建目录 2、启动脚本 二、安装 客户端 1、安装 2、查看 showmount -e 192.168.59.139 如图所示可以看到NFS服务器内的共享文件夹为nfs(因为我们的nfs服务端部署为docker部

    2024年02月14日
    浏览(35)
  • DevOps系列文章之 自动化测试大全(单测和集成测试)

    核心目标: 主要是功能测试和覆盖率测试 业界常用主流工具 GoogleTest GoogleTest是一个跨平台的(Liunx、Mac OS X、Windows 、Cygwin 、Windows CE and Symbian ) C++单元测试框架,由google公司发布,为在不同平台上为编写C++测试而开发的。它提供了丰富的断言、致命和非致命判断、参数化、”

    2024年02月14日
    浏览(43)
  • 记录使用gitlab实现Docker自动化部署

    目录 前言 一、gitlab-runner docker安装 二、gitlab-runner的注册与使用 1.注册 2. .gitlab-ci.yml 脚本编写 总结 前面搭建了gitlab与harbor ,现在就使用它们来实现自动化docker部署。所谓自动化部署,就是提交代码到指定分支时自动触发预先写好的脚本,来实现打包,推送镜像。想要实现这

    2023年04月11日
    浏览(47)
  • 【运维篇】基于docker,jenkins结合gitlab做自动部署

    我的环境是windows系统,使用Docker Desktop制作了gitlab容器和jenkins容器,也可以在虚拟机上使用docker。 gitlab有镜像我们直接使用即可,jenkins镜像有一些环境没有,我们在它的基础上添加一些环境。 需要准备的文件比较多,我百度网盘共享一下。 链接:https://pan.baidu.com/s/1K7FD-ngQ

    2024年01月16日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包