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

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

SSH免密登陆

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

要让Gitlab Runner部署到远程机器,远程机器必须信任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文件
  1. 主控方:
  2. scp /home/gitlab-runner/.ssh/id_rsa.pub
  3. 受控方:
  4. 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变量
  1. build_image:Front-end:
  2. stage: build_image
  3. script:
  4. - docker build -t $DOCKER_REGISTRY_HOST/eap/eap-front-end:$CI_COMMIT_REF_NAME .
  5. - docker login $DOCKER_REGISTRY_HOST -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD
  6. - docker push $DOCKER_REGISTRY_HOST/eap/eap-front-end:$CI_COMMIT_REF_NAME
  7. tags:
  8. - my-tag
  9. only:
  10. - tags
  11. deploy:alpha:
  12. stage: deploy
  13. variables:
  14. deploy_path: "/home/eap/website"
  15. script:
  16. - 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"
  17. tags:
  18. - my-tag
  19. only:
  20. - tags

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

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

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

如何利用Gitlab-ci持续部署到远程机器?的更多相关文章

  1. Git Hooks、GitLab CI持续集成以及使用Jenkins实现自动化任务

    Git Hooks.GitLab CI持续集成以及使用Jenkins实现自动化任务 前言 在一个共享项目(或者说多人协同开发的项目)的开发过程中,为有效确保团队成员编码风格的统一,确保部署方式的统一, ...

  2. 使用GitLab CI + Capistrano部署CakePHP应用程序

    使用GitLab CI + Capistrano部署CakePHP应用程序 摘要:本文描述了如使用GitLab CI + Capistrano部署CakePHP应用程序. 目录 1. 问题2. 解决方 ...

  3. Gitlab CI 自动部署 asp.net core web api 到Docker容器

    为什么要写这个? 在一个系统长大的过程中会经历不断重构升级来满足商业的需求,而一个严谨的商业系统需要高效.稳定.可扩展,有时候还不得不考虑成本的问题.我希望能找到比较完整的开源解决方案来解决持续集成. ...

  4. Ubuntu Docker 安装和配置 GitLab CI 持续集成

    相关文章: Ubuntu Docker 简单安装 GitLab 劈荆斩棘:Gitlab 部署 CI 持续集成 目的:在 Ubuntu 服务器上,使用 Docker 安装和配置 GitLab Runne ...

  5. Gitlab CI 持续集成的完整实践

    Gitlab CI 持续集成的完整实践 本着公司团队初创,又在空档期想搞点事情,搭建了私有Gitlab的契机,顺便把持续集成搭建起,实现了对Python服务端代码的单元测试.静态代码分析和接口测试的持 ...

  6. CruiseControl.Net <buildpublisher>部署到远程机器报错的解决办法

    CruiseControl.Net ,使用<buildpublisher>将编译后的程序部署到远程机器时,使用以下配置 <buildpublisher> <sourceD ...

  7. GitLab CI持续集成配置方案

    目录 1. 持续集成介绍 1.1 概念 1.2 持续集成的好处 2. GitLab持续集成(CI) 2.1 简介 2.2 GitLab简单原理图 2.3 GitLab持续集成所需环境 2.4 需要了解 ...

  8. GitLab CI持续集成配置方案(补)

    上篇文章介绍了GitLab CI的持续集成配置方法,本篇文章将主要介绍NUnit的持续集成和遇到的一些坑 1.NUnit单元测试持续集成 下载NUnit.3.4.1.msi,https://githu ...

  9. 【文章存档】如何通过 GitLab 进行持续部署

    好久没写博客了,这几天存档一下新文章. 链接 https://docs.azure.cn/zh-cn/articles/azure-operations-guide/app-service-web/a ...

随机推荐

  1. MySQL一招入门

    连接mysql数据库命令:mysql -u root -p 创建mysql数据库:create databaase xx库; 创建mysql表: create table db_xx表( id int ...

  2. LQR要点

    新的“A”变成着了这样:Ac = A - KB 基于对象:状态空间形式的系统 能量函数J:也称之为目标函数 Q:半正定矩阵,对角阵(允许对角元素出现0) R:正定矩阵,QR其实就是权重 下面这段话可能 ...

  3. 洛谷P3694 邦邦的大合唱站队【状压dp】

    状压dp 应用思想,找准状态,多考虑状态和\(f\)答案数组的维数(这个题主要就是找出来状态如何转移) 题目背景 \(BanG Dream!\)里的所有偶像乐队要一起大合唱,不过在排队上出了一些问题. ...

  4. .Net Core api 中获取应用程序物理路径wwwroot

    如果要得到传统的ASP.Net应用程序中的相对路径或虚拟路径对应的服务器物理路径,只需要使用使用Server.MapPath()方法来取得Asp.Net根目录的物理路径,如下所示: // Classi ...

  5. redis入门指南(二)—— 数据操作相关命令

    写在前面 以下绝大部分内容取材于<redis入门指南>,部分结合个人知识,实践后得出. 只记录重要,明确,属于新知的相关内容,杜绝冗余和重复. 字符串 1.字符串类型是redis中最常见的 ...

  6. 二.3.token认证,jwt认证,前端框架

    一.token: 铺垫: 之前用的是通过最基本的用户名密码登录我的运维平台http://127.0.0.1:8000/---这种用的是form表单,但是这种对于前后端分离的不适合.前后端分离,应该通过 ...

  7. Spring设置启动时执行方法

    @PostConstruct方法 在实现类和方法上加注解,类上加bean注解,方法上加@PostConstruct注解. @PostConstruct//启动执行public void refresh ...

  8. Xenon's Attack on the Gangs,题解

    题目: 题意: 有一个n个节点的树,边权为0-n-2,定义mex(a,b)表示除了ab路径上的自然数以外的最小的自然数,求如何分配边权使得所有的mex(a,b)之和最大. 分析: 看似有点乱,我们先不 ...

  9. 无题 II 二分图最大匹配

    题目描述 这是一个简单的游戏,在一个n*n的矩阵中,找n个数使得这n个数都在不同的行和列里并且要求这n个数中的最大值和最小值的差值最小. Input 输入一个整数T表示T组数据. 对于每组数据第一行输 ...

  10. 微信解密encryptedDataStr获取用户信息

    A:<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">& ...