千家信息网

gitlab,gitlab runner自动化部署docke

发表于:2024-10-22 作者:千家信息网编辑
千家信息网最后更新 2024年10月22日,一 、知识点gitlab,gitlab CI/CD相关组件以及介绍GitLab - 基于Git的项目管理软件:GitLab 是一个用于仓库管理系统的开源项目。使用Git作为代码管理工具,并在此基础上搭
千家信息网最后更新 2024年10月22日gitlab,gitlab runner自动化部署docke

一 、知识点

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

  • GitLab - 基于Git的项目管理软件:
    • GitLab 是一个用于仓库管理系统的开源项目。使用Git作为代码管理工具,并在此基础上搭建起来的web服务
  • gitlab-runner
    • GitLab Runner是一个开源项目,是gitlab的插件,用于执行.gitlab-ci.yml脚本中的命令
  • GitLab CI / CD是GitLab内置的强大工具,允许您将所有连续方法(持续集成,交付和部署)应用于您的软件,而无需第三方应用程序或集成。

  • GitLab CI/CD工作原理
    • 在代码仓库的根目录下去创建.gitlab-ci.yml文件(注意是.gitlab-ci.yml)
    • .gitlab-ci.yml文件中需要定义要运行的脚本,定义包含和缓存依赖项,选择要按顺序运行的命令以及要并行运行的命令,定义要部署应用程序的位置等
    • 每次提交代码,gitlab根据.gitab-ci.yml脚本出发对应的runner,运行脚本命令,脚本被分组到作业中,它们一起组成一个自动化部署流水线

docker基础知识

二、自动化部署流程


第一步:开发人员将代码上传到代码仓库,gitlab 根据gitlab-ci.yml中的命令,触发ci/cd逻辑,通知gitlab-runner进行构建部署
第二步:gitlab-runner根据.gitlab-ci.yml脚本进行代码检测,单元测试
第三步: gitlab-runner根据.gitlab-ci.yml脚本进行构建打包
第四步:gitlab-runner根据.gitlab--ci.yml脚本将代码部署到相应的环境中

三、利用gitlab CI/CD 自动部署spring boot实例讲解


运维架构流程图

gitlab/gitlab runner安装

docker搭建gitlab

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端口

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中

  • 进入容器:sudo docker exec -it gitlab-runner bash
  • 执行注册命令: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-ci.ym脚本编写

stages:  - test  - build  - deploycache:  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/prodtest 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:      - releasebuild image:    image: $MAVEN_IMAGE    stage: test    script:      - mvn  package docker:build -q -Dmaven.test.skip=true    tags:      - maven    only:      - dev      - masterpush 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_successpush 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_successpush 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_successssh 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_successssh 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_successssh 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

修改pom.xml,添加如下代码

                            org.springframework.boot            spring-boot-maven-plugin                                            true                            
      
    
0