如何利用Gitlab-CI持续部署到远程机器?
时间:2022-07-22
本文章向大家介绍如何利用Gitlab-CI持续部署到远程机器?,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
长话短说,今天聊一聊使用Gitlab-CI 自动部署到远程服务器。
如果看过《基于docker-compose的Gitlab CI/CD实践&排坑指南》这篇文章的朋友,会注意到我是在 Gitlab-Runner服务器上自动部署的站点,本次我们结合ssh
部署到远程机器(将CI服务器和部署服务器分离,避免资源抢占)。
SSH免密登陆
还是那句:CI/CD实质是将我们手动集成、拷贝部署的方式脚本化,远程部署的重要姿势是要求免密操控。
受控机器上的某个账户信任 CI机器上gitlab-runner账户。
- 先执行
su gitlab-runner
切换到gitlab-runner
账户 - 在你的CI机器(主控端)上使用 ssh-keygen命令创建公钥,使用
ssh-keygen -t rsa
来创建,程序会问你存放目录,如果不需要修改,直接回车几次即可 - 将~/.ssh目录下
id_rsa.pub
文件拷贝到受控机器的~/.ssh
目录中,然后将文件内容导入到~/.ssh/authorized_keys
文件
主控方:
scp /home/gitlab-runner/.ssh/id_rsa.pub ****@10.202.42.252:/home/***/.ssh/
受控方:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
- 在受控方机器设置权限:
~/.ssh
权限设置为700;~/.ssh/authorized_keys
权限设置为600
之后在主控CI机器 就具备免密登陆 远程机器的能力。
如何持续部署?
利用镜像tag持续部署: gitlab项目只要打出tag--> 执行构建镜像Job(以此次git tag为镜像tag)-->执行部署Job,拿到git tag-->部署该tag镜像
-
CI_COMMIT_REF_NAME
变量得到 The branch or tag name for which project is built - 在docker-compose.yml里设置image: {DOCKER_REGISTRY}/eap/eap-front-end:{TAG},可感知部署时插入的tag变量
build_image:Front-end:
stage: build_image
script:
- docker build -t $DOCKER_REGISTRY_HOST/eap/eap-front-end:$CI_COMMIT_REF_NAME .
- docker login $DOCKER_REGISTRY_HOST -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD
- docker push $DOCKER_REGISTRY_HOST/eap/eap-front-end:$CI_COMMIT_REF_NAME
tags:
- my-tag
only:
- tags
deploy:alpha:
stage: deploy
variables:
deploy_path: "/home/eap/website"
script:
- ssh -t ***@10.202.42.252 "cd $deploy_path && export TAG=$CI_COMMIT_REF_NAME && docker-compose -f docker-compose.yml pull && docker-compose -f docker-compose.yml up -d"
tags:
- my-tag
only:
- tags
上面的黄色背景行描述了 ssh远程登陆-->切换到部署目录-->插入本次构建的git tag--->执行容器部署的脚本写法。
That'all, 本文记录了gitlab-ci持续部署到远程机器的过程: ssh免密登陆是本菜鸡最近搞定的姿势,持续部署的方式简单实用。
“两年前,本人也是linux小白,也经历了[想学][放弃][想学][放弃]...的循环。.NETCore 作为新一代开源跨平台框架,面向云原生而生,容器技术作为云原生的奠基石,.NETer要拥抱容器,拥抱Linux。
- https://www.jianshu.com/p/33461b619d53
- WCF技术剖析之二十二: 深入剖析WCF底层异常处理框架实现原理[上篇]
- 5个典型实例启发:什么是数据可视化
- 智能家居“智商”不够,能靠情商来补吗
- 大话MVP
- AngularJS in Action读书笔记1——扫平一揽子专业术语
- MS Enterprise Library 5.0发布!!
- WCF技术剖析之二十二: 深入剖析WCF底层异常处理框架实现原理[中篇]
- 《Enterprise Library深入解析与灵活应用》博文系列汇总
- 使命必达: 深入剖析WCF的可靠会话[概念篇]
- AngularJS in Action读书笔记2——view和controller的那些事儿
- WCF技术剖析之二十一:WCF基本异常处理模式[中篇]
- 小程序上线“小游戏”,正式引爆3.0社交红利
- 漫谈人工智能机器翻译的前世今生
- 并发与实例上下文模式: WCF服务在不同实例上下文模式下具有怎样的并发表现
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- numpy 矩阵形状调整:拉伸、变成一位数组的实例
- 使用Nibabel库对nii格式图像的读写操作
- ThinkPHP like模糊查询,like多匹配查询,between查询,in查询,一般查询书写方法
- 使用SimpleITK读取和保存NIfTI/DICOM文件实例
- php中上传文件的的解决方案
- python 实现两个npy档案合并
- PHP使用函数用法详解
- 读取nii或nii.gz文件中的信息即输出图像操作
- PHP实现SMTP邮件的发送实例
- 多个Laravel项目如何共用migrations详解
- PHP实现文字写入图片功能
- php中file_get_contents()函数用法实例
- PHP通过GD库实现验证码功能示例
- Thinkphp 5.0实现微信企业付款到零钱
- 使用npy转image图像并保存的实例