自动部署之前,需要准备的是放gitlab的服务器,运行gitlab-runner的服务器以及后端代码运行的服务器。需要先搭建好runner并放在自己的项目中,gitlab的 runner 主要作用是用于监视相关项目的变动,然后可以自动拉取对应的分支进行自动构建,测试,和部署。就是对编写好的ci文件进行管理。
其自动部署就是将存放在gitlab上的仓库代码利用rsync实时同步到实际要跑后端代码的那台服务器上,文件传输的方式就是利用SSH,将文件传输过去之后继续让代码后台跑起来,这样就实现了实时部署。
前端的这个部署文件也是将前端代码传输到后端的服务器上,与后端的jar包放在同一个目录下是一个static文件夹下,然后利用nginx进行方向代理进行端口转发就可以了。
首先需要了解的前提:

  1. runner将整个项目文件导入到一个docker中,设置了将docker作为执行器的话。所有在ci文件里写的指令都是在docker容器中运行的,所以实际上是运行runner的这台服务器里的一个docker在向后端服务器同步文件。
  2. 作为一个什么都没有的docker它的基本运行环境应该是乌班图,所以在ci文件里写的指令应该是基于ubantu的。首先要进行代码的打包,前后端都一样,要运行npm或者mvn指令进行打包,这两种指令依赖于ci文件中image的指定,一般都有了无需特别安装。
  3. 注意,可以想象,在刚进去这个docker的时候就处于整个仓库的根目录下,可以直接进行打包。
  4. 将rsync安装在docker里,为接下来文件传输做准备。注意rsync一般都是利用ssh进行文件传输的。所以难题来了,怎么让后端服务器认识这个docker呢,这个docker也没有已经生成ji好的公私钥。
  5. 为了解决上述问题,我们就需要准备一对主机公私钥,用传递变量的形式注入docker作为其身份信息。然后将后端服务器的主机公钥作为known_host保存到docker这样后期后端验证docker身份时验证通过。之后将docker运行的服务器中的root用户公钥存入pubkey文件,并也存入后端服务器的authorized_keys中,这样docker向后端服务器传输文件时就可以认识docker。
    到此,基本需要注意的都完成了接下来是整个部署流程

准备一对公私钥

在自己本机生成一对公私钥,将public_key和private_key分别在gitlab界面中的项目组中设为变量
添加变量的方式在设置,进入CI/CD,点击变量即可添加

在gitlab界面添加公私钥以及追加known_hosts

这个公私钥就是第一步准备好的公私钥,之后要用这对公私钥进行两台主机之间的文件传输。追加的known_hosts是后端运行代码的服务器的公钥

编写ci文件

image: maven:3-jdk-11  # 要用到的打包工具以及运行环境 这是从image库里看到的是一个dockerstages:- test- package- deploymaven-test:          # CI/CD 任务名称stage: test      # 任务阶段,一般有 build、test、deploy等。执行顺序为:build →test →deployservices:- name: mysql        #还需要一个mysql服务器alias: dbscript:          # 执行任务的脚本,每条是一个 Shell 命令。- mvn test -s ci_settings.xml -Dspring.profiles.active=dev # 先用mvn test进行打包 执行jar包的命令 xml文件是项目配置文件可以不写# 通过环境变量$DB_URL、$DB_USER和$DB_PASS提供密码信息。环境变量在仓库设置中配置。except:          # 不在 developer 和 master 测试。maven package 会自动执行编译和部署,因此不需要再次执行test阶段的任务。- main- devidrsmc-test-and-package: #名字随意起stage: packageservices:- name: mysqlalias: dbscript:- mvn package -s ci_settings.xml -Dspring.profiles.active=devartifacts:      # 任务成果,一般为编译后的产物。paths:      # 也可以指定一个或多个目录。- target/migration-2.1.0-SNAPSHOT.jar- target/site/apidocs # api接口文件expire_in: 1 week # 产物会占用 GitLab 服务器的空间,应当定期清理。only:           # 只在 developer 分支和 master 分支执行部署操作。- dev- maindeploy-server:stage: deployimage: ubuntuneeds:- idrsmc-test-and-package # 需要先完成上一步script:- |echo -e "\e[0Ksection_start:`date +%s`:my_first_section\r\e[0K准备 SSH 凭据"which ssh-agent || ( apt-get update -y && apt-get install openssh-client git -y )which rsync || ( apt-get update -y && apt-get install rsync -y )eval $(ssh-agent -s)echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -mkdir -p ~/.sshchmod 700 ~/.sshecho "$SSH_KNOWN_HOSTS" >> ~/.ssh/known_hostschmod 644 ~/.ssh/known_hostsecho "$SSH_PUBLIC_KEY" > ~/.ssh/id_rsa.pubchmod 644 ~/.ssh/id_rsa.pubecho "$SSH_CERTIFICATE" > ~/.ssh/id_rsa-cert.pubchmod 644 ~/.ssh/id_rsa-cert.pubecho -e "\e[0Ksection_end:`date +%s`:my_first_section\r\e[0K" #  上述都是在为了之后的文件传输进行铺垫,就是要利用rsync进行ssh传输echo -e "\e[0Ksection_start:`date +%s`:my_first_section\r\e[0K部署到 $TARGET_SERVER"rsync jar包目录 $TARGET_SERVER:文件目录ssh $TARGET_SERVER "systemctl restart 项目名称.service" #运行项目echo -e "\e[0Ksection_end:`date +%s`:my_first_section\r\e[0K"only:- dev- main

执行流水线

部署好之后,进入gitlab项目,点击流水线,就可以运行了。

流水线执行过程中可能会遇到的问题:

  1. 没有可用的runner所以任务暂存之类,建议直接到设置-》CI/CD中查看runner,是否有可以用的,有的话就检查一下自己ci文件中有没有写tags,tags用来绑定runner
  2. xxx指令不存在,大概是没有安装什么软件,直接安装就好了,注意使用的是ubantu系统的指令(这个好像是可以在哪里修改系统类型)
  3. ssh认证出错,应该主机公钥和用户公钥没有写对。用户公钥是到root下的.ssh目录里找,主机公钥是要到/etc/ssh里面找以ssh_host开头的就是主机公钥

如何远程执行jar包

建议将运行jar作为一个服务进行启动,这样ssh 指令可以直接启动。此时我们的指令还是在ssh环境里,所以要符合ssh语法。写一个jar.service文件

gitlab流水线自动部署流程相关推荐

  1. gitlab nginx php解析,GitLab-webhook-PHP 详解 GitLab Webhooks 自动部署应用服务器

    # GitLab Web Hook For PHP 开始使用 ​ 服务器环境必须先安装git环境,Webhook脚本依赖PHP运行环境,同时需要有exec函数执行权限.使用前需要先开启禁用的PHP部分 ...

  2. GitLab CI 自动部署netcore web api 到Docker

    前端篇文章中,我们已经成功的将asp.net core webapi在Docker容器中运行,并且部署了一套自己的GitLab环境. .Net & Docker(二)5分钟快速用Docker部 ...

  3. Jenkins+Gitlab实现自动部署

    Jenkins自动部署配置其实就是前后端部署步骤,前后端分离项目如何部署可以借鉴另一篇文章:Docker部署前后端分离项目 一.新建任务 二.源码管理 三.构建触发器 注意:需要下载Gitlab插件 ...

  4. 前端Vue+后端Django项目创建以及自动部署流程

    所有的环境都安装完了之后,接下来就要创建项目了,完整的项目开发流程是由开发的同学先写完代码,然后交付给运维的同学部署到测试和生产环境.DevOps可以让整个流程自动化,开发的同学只需要稍微会一些工具就 ...

  5. Azure DevOps 中 Dapr项目自动部署流程实践

    注:本文中主要讨论 .NET6.0项目在 k8s 中运行的 Dapr 的持续集成流程, 但实际上不是Dapr的项目部署到K8s也是相同流程,只是k8s的yaml配置文件有所不同 流程选择 基于 Dap ...

  6. Jenkins+Maven+Git自动部署流程(从环境搭建到部署超级全面)

    说明:本次流程功能是,我们只要上传代码到git平台后面就不用我们管了,jenkins就能自动将我们git原代码编译测试部署发布到生产环境,不用我们每次都自己打包jar包再拉到linux环境java - ...

  7. 统计gitlab代码行脚本_一点也不复杂, GitLab Webhook 自动部署代码

    项目使用了gitlab托管,以前部署代码都是登录服务器,然后git pull代码.这样每次需要发布代码,都需要登录,太繁琐.很早就了解到 gitlab支持 webhook,能够自动同步代码.今天尝试搭 ...

  8. GitLab 8.15中引入了自动部署和Web终端

    最新的GitLab 8.15版提供了新的持续集成和持续部署(CI/CD)特性,目的在于自动化不同平台上的部署,并使用命令行界面让试机(Staging)或产品部署更加便捷. \\ GitLab的自动部署 ...

  9. activity工作流流程部署(自动部署与动态BPMN部署)

    提示:流程部署后很多种,这里,只讲解自动部署与动态BPMN部署 文章目录 前言 一.自动部署 二.动态BPMN模型部署 代码例子 前言 创建一个 Activit 工作流,并启动这个流程,主要包含2个步 ...

最新文章

  1. 预训练模型ProphetNet:根据未来文本信息进行自然语言生成
  2. 第三课.python编程基础(二)
  3. java linux urlencode_iOS urlEncode编码解码(非过时方法,已解决)
  4. JAVA 笔记no.2
  5. 30个创意出色的非常实用的jquery框架插件-(视觉大背景,瀑布流效果)
  6. [转载]高质量c/c++编程指南读书笔记
  7. 开心猫序列C语言,开心猫的读后感作文
  8. UE4 中的人工智能解析—ShooterGame为例
  9. expdp —— XDB SGA initialization
  10. java布尔字段用is前缀_Javabean中,对于boolean类型的属性,可以使用is代替方法名称中的set和get前缀,创建Bean必须带有包名。...
  11. 存款利息python题_python入门教程NO.8 用python写个存款利息计算器
  12. circos配置文件解析
  13. 如何增加百度收录量和友好度
  14. Excel文件批量重命名
  15. Qt 之 事件总线模型
  16. 基于深度学习的医学图像分割(一)
  17. 经济类英文期刊排行榜
  18. YOLO系列:YOLO v3解析
  19. 全媒体运营师胡耀文教你:从0到1搭建直播运营体系
  20. microsoft outlook “未读邮件”收藏夹被误删

热门文章

  1. 关于security_huks安全模块的知识总结(一)
  2. linux 服务器 安装网卡驱动,Linux系统下安装Intel千兆网卡驱动
  3. 事件研究法与其应用(2)---Excel实操步骤
  4. 罗敏为什么不焦虑? | 一点财经
  5. SpringBoot+Shiro实现登陆拦截功能
  6. 拦截QT关闭窗口的CloseEvent()解析
  7. Android camera相机开发拍照功能
  8. 修改Win7硬盘分区盘符出现“虚拟磁盘管理器-参数错误”
  9. word无法验证服务器,Office提示“无法验证此应用程序的许可证”时怎么处理?...
  10. 初中学考英语听说计算机考试,2018中考英语听说计算机考试工作重要通知