如何利用Gitlab-ci持续部署到远程机器?
长话短说,今天聊一聊使用Gitlab-CI 自动部署到远程服务器。
如果看过《》这篇文章的朋友,会注意到我是在 Gitlab-Runner服务器上自动部署的站点,本次我们结合ssh部署到远程机器(将CI服务器和部署服务器分离,避免资源抢占)。

SSH免密登陆
还是那句话,CI/CD实质是将我们手动集成、拷贝部署的方式脚本化,远程部署的重要姿势是要求免密操控。
要让Gitlab Runner部署到远程机器,远程机器必须信任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
受控方:
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 build && 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。
如何利用Gitlab-ci持续部署到远程机器?的更多相关文章
- Git Hooks、GitLab CI持续集成以及使用Jenkins实现自动化任务
		Git Hooks.GitLab CI持续集成以及使用Jenkins实现自动化任务 前言 在一个共享项目(或者说多人协同开发的项目)的开发过程中,为有效确保团队成员编码风格的统一,确保部署方式的统一, ... 
- 使用GitLab CI + Capistrano部署CakePHP应用程序
		使用GitLab CI + Capistrano部署CakePHP应用程序 摘要:本文描述了如使用GitLab CI + Capistrano部署CakePHP应用程序. 目录 1. 问题2. 解决方 ... 
- Gitlab CI 自动部署 asp.net core web api 到Docker容器
		为什么要写这个? 在一个系统长大的过程中会经历不断重构升级来满足商业的需求,而一个严谨的商业系统需要高效.稳定.可扩展,有时候还不得不考虑成本的问题.我希望能找到比较完整的开源解决方案来解决持续集成. ... 
- Ubuntu Docker 安装和配置 GitLab CI 持续集成
		相关文章: Ubuntu Docker 简单安装 GitLab 劈荆斩棘:Gitlab 部署 CI 持续集成 目的:在 Ubuntu 服务器上,使用 Docker 安装和配置 GitLab Runne ... 
- Gitlab CI 持续集成的完整实践
		Gitlab CI 持续集成的完整实践 本着公司团队初创,又在空档期想搞点事情,搭建了私有Gitlab的契机,顺便把持续集成搭建起,实现了对Python服务端代码的单元测试.静态代码分析和接口测试的持 ... 
- CruiseControl.Net <buildpublisher>部署到远程机器报错的解决办法
		CruiseControl.Net ,使用<buildpublisher>将编译后的程序部署到远程机器时,使用以下配置 <buildpublisher> <sourceD ... 
- GitLab CI持续集成配置方案
		目录 1. 持续集成介绍 1.1 概念 1.2 持续集成的好处 2. GitLab持续集成(CI) 2.1 简介 2.2 GitLab简单原理图 2.3 GitLab持续集成所需环境 2.4 需要了解 ... 
- GitLab CI持续集成配置方案(补)
		上篇文章介绍了GitLab CI的持续集成配置方法,本篇文章将主要介绍NUnit的持续集成和遇到的一些坑 1.NUnit单元测试持续集成 下载NUnit.3.4.1.msi,https://githu ... 
- 【文章存档】如何通过 GitLab 进行持续部署
		好久没写博客了,这几天存档一下新文章. 链接 https://docs.azure.cn/zh-cn/articles/azure-operations-guide/app-service-web/a ... 
随机推荐
- 腾讯IEG--2020春招实习
			笔试 正常批就五道编程题,可以跳出使用本地IDE,题目很好理解,基本都能写出来,但是要过全部用例不容易.具体题目和题解可以看看这位大佬的牛客帖子,我的就不献丑了,有两题都只过了40%,我当时是用C#做 ... 
- 云服务器终端命令显示-bash-4.2#怎么解决
			原因:删除了root/.bashrc 和 root/.bash_profile两个文件的丢失 解决办法: -bash-4.2# cp /etc/skel/.bashrc /root/ -bash-4. ... 
- 《UNIX环境高级编程》(APUE) 笔记第四章 - 文件和目录
			4 - 文件和目录 1. 函数 stat.fstat.fstatat 和 lstat #inlcude <sys/stat.h> int stat(const char *restrict ... 
- SecureCRT连接阿里云ECS服务器,经常掉线的解决方案
			1 使用SecureCRT远程连接后,Options > Session Options > Terminal(终端) > 勾选 “Send protocol NO-OP” 
- jQuery学习笔记(1)
			什么是jQuery? jQuery是一个js库 jQuery的版本? jQuery1.x jQuery2.x(不支持IE6,7,8) jQuery作用? 简化js编写 将页面与js分离 常见的js库? ... 
- SpringCloud项目配置加载顺序
			bootstrap.yml:位于jar包外的优先级最高 application.yml: 配置中心的文件 > JVM参数配置> 本地active指定文件 > 本地default文件, ... 
- 【板子】数论基础(持续更新ing...)
			#include<cstdio> #include<iostream> #include<cstring> #include<cmath> #inclu ... 
- 结合实际需求,在webapi内利用WebSocket建立单向的消息推送平台,让A页面和服务端建立WebSocket连接,让其他页面可以及时给A页面推送消息
			1.需求示意图 2.需求描述 原本是为了给做unity3d客户端开发的同事提供不定时的消息推送,比如商城购买道具后服务端将道具信息推送给客户端. 本篇文章简化理解,用“相关部门开展活动,向全市人民征集 ... 
- if-else和三目运算符 ? : 的对比
			今天的地铁思考让我想起一个之前学C语言的时候一直没有验证的事情:既生瑜何生亮? 平时写代码的时候,似乎并没有太多的关注我应该选用什么条件判断语句,感觉判断条件或者两条支路语句复杂就本能地if-else ... 
- CTFHub_技能树_SQL注入Ⅰ
			SQL注入 布尔盲注 查看页面: 尝试输入测试信息: 提示为布尔注入,构造相应payload: ?id=1 and ascii(substr((select database()),1,1))> ... 
