gitlab,gitlab runner自动化部署docker容器

一 、基础概念


软件开发中经常持续集成,持续交付,持续部署这三个概念到底是什么意思?

持续集成:

  • 持续集成是指开发者在代码的开发过程中,可以频繁的将代码部署集成到主干并进程自动化测试

持续交付:

  • 持续交付指的是在持续集成的环境基础之上,将代码部署到预生产环境

持续部署:

  • 在持续交付的基础上,把部署到生产环境的过程自动化,持续部署和持续交付的区别就是最终部署到生产环境是自动化的

二、自动化部署流程


第一步:开发人员将代码上传到代码仓库,gitlab 根据gitlab-ci.yml中的命令,触发ci/cd逻辑,通知gitlab-runner进行构建部署

代码仓库工具:

  • CVS(Concurrent Version System):

    • 早期的集中式版本控制系统,现已基本淘汰
    • 会出现数据提交后不完整的情况
  • SVN(Subversion)--集中式版本控制系统
    • 2000年开始开发,目标就是替代CVS
    • 集中式管理,依赖于网络,一台服务器集中管理
    • 目前很少公司在用
  • Gitlib—分布式版本控制系统
    • 2002年由linux内核作者Linus使用C语言开发
    • 分布式版本控制系统,不依赖于服务器,离线依然可以工作
    • 目前广泛适用于互联网公司
    • 功能强大,使用灵活
    • 目前主流的代码管理,后续篇幅主要也是通过git

第二步:gitlab-runner根据gitlab.yml脚本进行代码检测,单元测试

代码质量管理工具

  • sornar-开源免费的代码质量管理工具

    • 基于web浏览器访问,客户端无需任何安装
    • sonar可以很方便地统计并展示单元测试覆盖率
    • sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具规范代码编写。
    • 程序中包含大量复制粘贴的代码是质量低下的,sonar可以展示 源码中重复严重的地方
    • 检测注释不足或者过多

第三步: gitlab-runner根据gitlab.yml脚本进行构建打包

打包编译工具

  • java语言:

    • maven
    • gradle

第四步:gitlab-runner根据gitlab.yml脚本将代码部署到相应的环境中

三、利用gitlab CI/CD 持续集成与部署实例讲解


下面我将如何进行docker自动化部署的整体流程以具体的例子进行讲解

运维架构流程图

gitlab安装

  • 概念

Git,Gitlab,GitHub之间的关系

  • git - 版本控制工具

    • Git是一个免费的开源 分布式版本控制系统,可让您在本地跟踪更改并从远程资源推送或提取更改
  • GitHub - 一个网站,提供给用户空间创建git仓储,保存用户的一些数据文档或者代码等
    • Github目前拥有140多万开发者用户,好多用户将源代码托管到github
  • GitLab - 基于Git的项目管理软件:
    • GitLab 是一个用于仓库管理系统的开源项目。使用Git作为代码管理工具,并在此基础上搭建起来的web服务

gitlab CI/CD相关组件以及介绍

  • GitLab CI / CD是GitLab内置的强大工具,允许您将所有连续方法(持续集成,交付和部署)应用于您的软件,而无需第三方应用程序或集成。
  • GitLab CI/CD工作原理
    • 在代码仓库的根目录下去创建.gitlab-ci.yml文件(注意是.gitlab-ci.yml)
    • .gitlab-ci.yml文件中需要定义要运行的脚本,定义包含和缓存依赖项,选择要按顺序运行的命令以及要并行运行的命令,定义要部署应用程序的位置等
    • 每次提交代码,gitlab根据.gitab-ci.yml脚本出发对应的runner,运行脚本命令,脚本被分组到作业中,它们一起组成一个自动化部署流水线
  • gitlab-runner
    • GitLab Runner是一个开源项目,用于运行您的作业并将结果发送回GitLab
  • 工具搭建

docker搭建gitlab

注意事项

1.gitlab比较占用没存,必须保证系统的内存在4GB以上,否则可能导致gitlab不能启动
2.此文章主要是讲解自动化部署,每个组件的具体使用情况就不详细介绍

启动命令

docker run -d --publish 22:22 -p 80:80 -p 443:443 --name gitlab --restart unless-stopped -v /data/gitlab/config:/etc/gitlab -v /data/gitlab/logs:/var/log/gitlab -v /data/gitlab/data:/var/opt/gitlab -v /var/run/docker.sock:/var/run/docker.sock twang2218/gitlab-ce-zh:10.5.4

详细说明

twang2218/gitlab-ce-zh:10.5.4:启动的镜像名称,次镜像是gtilab汉化版,镜像地址:
22端口:git端口,与本地的SSH端口冲突,我已经将本地ssh默认端口修改成其他的端口
80/443:gitlab web端口

使用

登录地址:http://ip:port ,由于为我的web端口默认为80 ,直接输入http://ip即可进入gitlab界面

友情链接:gitlab管网搭建指南

gitlab-runner安装

docker启动gitlab-runner

sudo docker run -d --name gitlab-runner --restart=always -v /data/gitlab-runner/config:/etc/gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock gitlab/gitlab-runner:v10.6.0
友情链接:gitlab-runner官网安装指南

-

gitlab-runner注册到gitlab中

  • 进入runner容器:

    sudo docker exec -it gitlab-runner bash

  • 将runner注册到gitlab中

sudo gitlab-runner register

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com ) :输入gitlab地址\
Please enter the gitlab-ci token for this runner:输入gitlab token
Please enter the gitlab-ci description for this runner:输入runner描述信息\
Please enter the gitlab-ci tags for this runner (comma separated):输入runner tag信息\
Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:输入runner的类型\
Please enter the Docker image (eg. ruby:2.1):(如果选择docker需要输入镜像)

  • gitlab token获取

    管理员登录gitlab--->管理区域--概述---runner

  • .gitlab-ci.yml脚本实例
stages:
  - test
  - build
  - deploy
cache:
  paths:
    - .m2/

variables:
  MAVEN_OPTS: "-Dmaven.repo.local=.m2"
  MAVEN_IMAGE: registry.cn-beijing.aliyuncs.com/qian/prod:maven3-jdk8
  CONTAINER_NAME: daily_report_java

  LAN_REPO:  registry-vpc.cn-beijing.aliyuncs.com/qian/prod
  WAN_REPO: registry.cn-beijing.aliyuncs.com/qian/prod

  DEV_REPO: $WAN_REPO/dev
  PRED_REPO: $WAN_REPO/pred
  PROD_REPO: $LAN_REPO/prod

test and build image:
    image: $MAVEN_IMAGE
    stage: test
    script:
      - mvn  package docker:build -q -Dmaven.test.skip=false -Dspring.profiles.active=test sonar:sonar -Dsonar.host.url=http://sonar.allhome.com.cn -Dsonar.login=admin -Dsonar.password=admin -Dsonar.projectName=$CONTAINER_NAME
    tags:
      - maven
    only:
      - release

build image:
    image: $MAVEN_IMAGE
    stage: test
    script:
      - mvn  package docker:build -q -Dmaven.test.skip=true
    tags:
      - maven
    only:
      - dev
      - master

push image dev:
    stage: build
    before_script:
      - docker login --username=阿里云镜像仓库地址 --password="password" registry-vpc.cn-beijing.aliyuncs.com
    script:
      - echo $version
      - docker tag  $DEV_REPO:$CONTAINER_NAME  $LAN_REPO/qianjia_dev:$CONTAINER_NAME
      - docker push $LAN_REPO/qianjia_dev:$CONTAINER_NAME
    tags:
      - docker-run
    only:
      - dev
    when: on_success

push image master:
    stage: build
    before_script:
     - docker login --username=阿里云镜像仓库地址 --password="password" registry-vpc.cn-beijing.aliyuncs.com
    script:
      - docker tag $DEV_REPO:$CONTAINER_NAME  $LAN_REPO/qianjia_pred:$CONTAINER_NAME
      - docker push $LAN_REPO/qianjia_pred:$CONTAINER_NAME
    tags:
      - docker-run
    only:
      - release
    when: on_success

push image prod:
    stage: build
    before_script:
      - docker login --username=阿里云镜像仓库地址 --password="password" registry-vpc.cn-beijing.aliyuncs.com
    script:
      - docker tag $DEV_REPO:$CONTAINER_NAME  $LAN_REPO/qianjia_prod:$CONTAINER_NAME
      - docker push $LAN_REPO/qianjia_prod:$CONTAINER_NAME
    tags:
      - docker-run
    only:
      - master
    when: on_success

ssh run on remote machine dev:
    stage: deploy
    script:
      - bash ~/.local/bin/200.sh   $CONTAINER_NAME    8801 8801    $DEV_REPO:$CONTAINER_NAME  guojia   192.168.10.200
    tags:
      - shell-200
    only:
      - dev
    when: on_success

ssh run on remote machine master:
    stage: deploy
    script:
      - bash ~/.local/bin/deploy.sh   $CONTAINER_NAME    8801 8801    $PRED_REPO:$CONTAINER_NAME  zp   预生产ip地址
    tags:
      - shell-prod
    only:
      - release
    when: on_success

ssh run on remote machine prod:
    stage: deploy
    script:
      - bash ~/.local/bin/deploy.sh   $CONTAINER_NAME  8801 8801   $PROD_REPO:$CONTAINER_NAME   zp   生产ip地址
    tags:
      - shell-prod
    only:
      - master
    when: on_success
  • runner流水线

Pipelines 中文称为流水线,是分阶段执行的构建任务,一次自动发布流程就称为一次流水线,以上边脚本举例,安装依赖、运行测试、打包、部署开发服务器等整套流程叫做一次流水线

  • 查看流水线:进行gitlab项目目录-----CI/CD----流水线即可查看项目部署的流水线

Stages:Stages 表示构建阶段,一次流水线包括多个stages,在脚本实例中stages定义了一次流水线的三个阶段:第一个阶段:运行测试,进行代码检测,第二个阶段:打包java程序并生成镜像,第三个阶段:执行shell脚本,把容器部署到服务器

  • 每个阶段有tag制定的runner去执行
  • 每个阶段按照脚本顺序进行

Jobs :表示构建的作业(或称之为任务),表示某个 Stage 里面执行的具体任务。我们可以在 Stages 里面定义多个 Jobs

  • 相同 Stage 中的 Jobs 无执行顺序要求,会并行执行
  • 相同 Stage 中的 Jobs 都执行成功时,该 Stage 才会成功
  • 如果任何一个 Job 失败,那么该 Stage 失败,
  • 总结:
    • 一次自动发布流程称为一次流水线,每个流水线有多个阶段,每个阶段有多个任务
    • 上边的博客只是写了一个整体发布流程没有具体写每个工具的使用方法,请自行查阅
    • 上面的脚本是还需要在项目根目录里面添加dockerfile文件,每个公司的dockerfile文件不同,不做展示,在.gitlab-ci.yml构建镜像的时候会自动使用项目根目录下的dockerfile

原文地址:https://blog.51cto.com/11750513/2422946

时间: 2024-10-05 20:26:12

gitlab,gitlab runner自动化部署docker容器的相关文章

Jenkins+GitLab+dotnet+Python自动化部署.Net Core项目

部署环境与流程1) Jenkins是java产品,需安装JDK8.由于.netFreamwork项目自动化时是基于Windows,所以继续使用Windows server 2012环境下的已有的Jenkins,部署.构建dotnet Core项目继续在Windows平台下操作.2) .NET Core SDK:2.2.402.dotnet build构建.3) 代码仓库GitLab.4) .NET Core服务端CentOS7部署环境流程: 需求一个项目下分两个子项目,而子项目需分别进行构建部署

部署docker容器虚拟化平台

Dcoker概述 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app).几乎没有性能开销,可以很容易地在机器和数据中心中运行.最重要的是,他们不依赖于任何语言.框架或包装系统.   Docker是dotCloud公司开源的一个基于LXC的高级容器引擎,源代码托管在Github上, 基于go语言并遵从Apache2

阿里云主机部署Docker容器引擎

一.部分  通过阿里云软件市场一键部署 配置过程如下链接: https://market.aliyun.com/products/56014007/cmjj017110.html?spm=5176.2020520132.101.5.4MIrmY最终get到云主机+Docker容器引擎 云主机登录:ssh -p 22 [email protected]公网IP  user:root pass:[email protected] 容器远程登录:ssh –p9090 [email protected]

搭建部署Docker容器详解实操

Docker 容器 :    容器是Docker又一核心的概念,简单来说,容器是独立运行的一个或一组应用,以及它们的运行态环境.对应的,虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和跑在上面的应用. 接下来具体介绍如何管理一个容器,包括创建.启动和停止等. 启动容器有两种方式:          (1.) 第一种是基于镜像新建一个容器并启动.   所需要的命令主要为docker run    实例:            -t:让docker分配一个为终端(pase

Pycharm 部署 Docker 容器解释器

假定 164 服务器中的 Docker 容器已配置完成.接下来,我们将详细说明如何在 Pycharm 中,将项目的 python 解释器指向 Docker 容器. 1 配置 Docker (1)依次点击 View --> Tool Windows --> Docker. (2)然后点击铅笔图标,开始配置 Docker. (3) 弹出「Docker」窗口后,在如下图所示的「Engine API URL」中填入:tcp://192.168.7.164:2375,其中 2375 为服务器端 Dock

Gitlab+Harbor+Jenkins pipeline实现利用tag部署docker容器

环境 测试部署主机IP:192.168.1.1 Jenkins主机IP:192.168.1.2 Harbor主机IP:192.168.1.3 Gitlab主机IP:192.168.0.10 系统信息: 系统:CentOS 7.5 内核:4.18.7-1.el7.elrepo.x86_64 Docker版本:18.09 docker-compose版本:1.23.1 有道笔记原文,为了防止复制粘贴出来的代码格式有误~~~~ 所有主机的Docker安装方式 wget -O /etc/yum.repo

gitlab+jenkins自动化部署

基于gitlab和jenkins的自动化部署 Gitlab基于Jenkins自动化部署教程: https://blog.csdn.net/aaaaaab_/article/details/82012044 https://www.cnblogs.com/dengbingbing/p/10448185.html GitLab是一个代码仓库,用来管理代码. Jenkins是一个自动化服务器,可以运行各种自动化构建.测试或部署任务.所以这两者结合起来,就可以实现开发者提交代码到GitLab,Jenki

通过Intellij IDEA 14.1将web应用部署到docker容器

2015年2月4日发布的IntelliJ IDEA 14.1宣布支持Docker,详情:Docker Support in IntelliJ IDEA 14.1 本文主要介绍IntelliJ IDEA 14.1中部署docker容器的方法. 1.下载安装IntelliJ IDEA 14.1() http://www.jetbrains.com/idea/ 2.下载安装插件Docker-plugin.jar 3. 配置远程docker 4.在web项目中新建目录docker-dir和文件Docke

自动化部署

---恢复内容开始--- 背景: 作为一个运维方面还算可以的小白,很自然部门中关于一些运维,部署,监控的任务就落到我身上.在被小伙伴们无数次的呼唤解决项目部署问题后,我忍无可忍,所以,我的目标是把他们交给我的部 署任务完美的退回去,即使他们对Linux一无所知. 解决的问题: 频繁的部署,重启任务. 主要项目描述: 项目总有13个模块,spring boot 项目,启动模块有10个. 前提: 主管项目后台模块架构设计,参与大部分开发任务,使平台提供运维支持成为可能.由于项目在 不断扩展期间,所以