如何利用Gitlab-CI持续部署到远程机器?

长话短说,今天聊一聊使用Gitlab-CI 自动部署到远程服务器。

如果看过《基于docker-compose的Gitlab CI/CD实践&排坑指南》这篇文章的朋友,会注意到我是在 Gitlab-Runner服务器上自动部署的站点,本次我们结合ssh部署到远程机器(将CI服务器和部署服务器分离,避免资源抢占)。

SSH免密登陆

还是那句:CI/CD实质是将我们手动集成、拷贝部署的方式脚本化,远程部署的重要姿势是要求免密操控

受控机器上的某个账户信任 CI机器上gitlab-runner账户。

  1. 先执行su gitlab-runner切换到gitlab-runner账户

  2. 在你的CI机器(主控端)上使用 ssh-keygen命令创建公钥,使用ssh-keygen -t rsa来创建,程序会问你存放目录,如果不需要修改,直接回车几次即可

  3. 将~/.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
  1. 在受控方机器设置权限:
    ~/.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_imagescript:- 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-tagonly:     - tagsdeploy:alpha:stage: deployvariables: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-tagonly:- tags

上面的黄色背景行描述了 ssh远程登陆-->切换到部署目录-->插入本次构建的git tag--->执行容器部署的脚本写法。

That'all, 本文记录了gitlab-ci持续部署到远程机器的过程:  ssh免密登陆是本菜鸡最近搞定的姿势,持续部署的方式简单实用。

两年前,本人也是linux小白,也经历了[想学][放弃][想学][放弃]...的循环。.NETCore 作为新一代开源跨平台框架,面向云原生而生,容器技术作为云原生的奠基石,.NETer要拥抱容器,拥抱Linux。

  • https://www.jianshu.com/p/33461b619d53

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/308664.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[RabbitMQ]工作队列原理_代码实现

Work Queues 工作队列(又称任务队列)的主要思想是避免立即执行资源密集型任务,而不得不等待它完成。 相反我们安排任务在之后执行。我们把任务封装为消息并将其发送到队列。在后台运行的工作进程将弹出任务并最终执行作业。当有多个工作线程时,这些工作…

使用ImpromptuInterface反射方便的创建自定义DfaGraphWriter

在本文中,我为创建的自定义的DfaGraphWriter实现奠定了基础。DfaGraphWriter是公开的,因此您可以如上一篇文章《将终结点图添加到你的ASP.NET Core应用程序中》中所示在应用程序中使用它,但它使用的所有类均已标记为internal。这使得创建自己…

[RabbitMQ]消息应答概念_消息手动应答代码

消息应答 概念 消费者完成一个任务可能需要一段时间,如果其中一个消费者处理一个长的任务并仅只完成了部分突然它挂掉了,会发生什么情况。RabbitMQ 一旦向消费者传递了一条消息,便立即将该消 息标记为删除。在这种情况下,突然有…

rust火箭基地主楼开启方法_Rust 为什么能成为 Stack Overflow 最受欢迎的语言?

每年,开发者问答网站 Stack Overflow 都会对程序员社区展开年度调查,包括他们最喜爱的技术到工作偏好的所有内容。 在2017 年和2018 年Stack Overflow 年度开发者调查中,Rust语言已经连续两年成为最受欢迎语言Top 1。2018 年 Stack Overflow …

[RabbitMQ]队列持久化

RabbitMQ持久化 概念 如何保障当 RabbitMQ 服务停掉以后消息生产者发送过来的消息不丢失。默认情况下 RabbitMQ 退出或由于某种原因崩溃时,它忽视队列和消息,除非告知它不要这样做。确保消息不会丢失需要做两件事:我们需要将队列和消息都标…

微服务认证架构如何演进来的?

【答疑解惑】| 作者 / Edison Zhou这是恰童鞋骚年的第267篇原创内容之前有同事问为何要用基于JWT令牌的认证架构,然后近期又有童鞋在后台留言问微服务安全认证架构的实践,因此我决定花两篇推文来解答一下。为了答好这个话题,我们先来看看微服…

maskrcnn还可以加网络吗_绿茶加蜂蜜的功效,绿茶可以加蜂蜜吗?

绿茶是我国的主要茶类之一,是一种天然健康的饮料,蜂蜜也是一种营养丰富的滋补食品,有些人不喜欢绿茶的苦味,想放点蜂蜜中和一下,但是不知道能不能这样做。那么绿茶能不能加蜂蜜呢?蜂蜜的主要成分是葡萄糖、果糖&#…

三分钟Docker-镜像、容器实战篇

本文主要内容:Docker 镜像、容器 常用命令整理使用Docker常见命令,搭建Consul集群通过创建自定义镜像,把.NetCore Api运行在Docker中1.镜像、容器命令镜像序号命令描述1docker image build基于Dockerfile创建镜像2docker image history显示镜…

手机键鼠映射软件_吃鸡,我最专业!---盖世小鸡键鼠吃鸡套装评测

Hello大家好,欢迎浏览这篇评测贴。首先很荣幸能够参与本期的评测,毕竟如此炫酷富有科技感的装备是可遇而不可求的,所以不论是得知入选还是收到快递开箱的时候,心情都是无比激动。话不多说,接下来就让我带你走进这个不一…

[Redis6]Redis启动_前台启动和后台启动

前台启动(不推荐) 前台启动,命令行窗口不能关闭,否则服务器停止 redis-server 关闭redis ctrlC : 关闭 后台启动(推荐) 备份redis.conf cd redis-6.2.6/cp redis.conf /etc/redis.confcd /etc后台启动设置daemonize no改成y…

深入剖析.NETCORE中CORS(跨站资源共享)

前言由于现代互联网的飞速发展,我们在开发现代 Web 应用程序中,经常需要考虑多种类型的客户端访问服务的情况;而这种情况放在15年前几乎是不可想象的,在那个时代,我们更多的是考虑怎么把网页快速友好的嵌套到服务代码中…

ai进入轮廓模式怎么退出_详解AI中扩展、扩展外观、轮廓化描边、创建轮廓

详解AI中扩展、扩展外观、轮廓化描边、创建轮廓在学习AI软件中,有不少同学分不清扩展、扩展外观、轮廓化描边、创建轮廓这四个概念具体的功能区别,今天我们具体聊一下。先说“扩展”,扩展是把复杂物体拆分成最基本的路径。矢量物体在组合&…

[Redis6]Redis相关知识介绍

Redis介绍相关知识 端口6379 6379 是 "MERZ " 九宫格输入法对应的数字。Alessia Merz 是一位意大利舞女、女演员。 Redis 作者 Antirez 早年看电视节目,觉得 Merz 在节目中的一些话愚蠢可笑,Antirez 喜欢造“梗”用于平时和朋友们交流&#x…

【Power Automate】如何自动生成Word与PDF文件[上]

上半年已经悄悄溜走,因为疫情,大家似乎也很习惯于在家办公。作为业务人员,如何汇报自己的工作,让自己更多地学习和掌握数字化办公技巧至关重要。那么今天我们就来看一下在不使用代码的情况下,如何通过Power Automate自…

easyui datagrid 中怎么选中所有页面的数据_学会这5个Excel中常用技巧,可以准时下班去摆摊了...

Excel是大家常用的办公工具之一,虽说上手简单,但是想要精通还是要下一些功夫的。最近有些小伙伴在留言吐槽说Excel数据处理时很方便,但是操作起来还是挺费时间的,其实工作是离不开技巧的,今天要跟大家分享的5个Excel技…

五年了,别再把务虚会开 “虚” 了

这是头哥侃码的第210篇原创上个月,为了配合公司的半年度战略讨论会,我特意留出一个周六的时间,与几位Leader在公司的会议室里开了一次部门半年度务虚会。让我没想到的是,几位小伙伴在这次讨论过程中都表现得非常亢奋,所…

人工智能正在如何改变传统行业

做了这么多年的技术工作,也正好赶上了这一波的人工智能浪潮,有时候我总是不免在想,人工智能如何真正地融入到我们的日常工作和生活中,实现它应有的价值。大家可能不知道,人工智能其实最早在上个世纪五十年代就提出来了…

[Redis6]key键操作

我们先连接redis cd /usr/local/bin/ redis-cliRedis键(key) keys *查看当前库所有key (匹配:keys *1) exists key判断某个key是否存在 type key 查看你的key是什么类型 del key 删除指定的key数据 unlink key 根据value选择非阻塞删除 仅将keys从keyspace元数据…

继续分享 5 个实用的 vs 调试技巧

前言我在上一篇文章????《5 个非常实用的 vs 调试技巧》 中分享了 5 个我认为非常值得了解的 vs 调试技巧,本周继续分享 5 个很基础但同样实用的调试技巧。1. 条件断点作用简介:顾名思义,带条件的断点。满足条件才中断。条件断点非常非常…

[Redis6]常用数据类型_String字符串

Redis字符串(String) 简介 String是Redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。String类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化的对象。String类型是Redis最基本的数据…