如何通过Jenkins完成镜像分发?基本做法是:打包镜像→上传镜像到仓库→脚本分发。镜像仓库也有很多,比如docker hub、Harbor等,今天这一篇讲一下基于阿里云镜像仓库的操作。

首先,准备一个阿里云镜像仓库,个人版是免费的。

然后下载这个插件:

Publish Over SSH

这个插件主要用来远程登录服务器并执行脚本。

插件安装完毕后,系统设置会多出这一项,戳图里这个按钮:

然后,把服务器的ip、账户、密码填进去:

配置好以后,最好点测试按钮试一下,如果没问题会输出“Success”

接下来找到之前的工作流,新增构建步骤:

选中刚才新增的server,编写脚本进行上传:

echo "==========登录仓库=========="
docker login --username=阿里云账户 --password=阿里云仓库密码 registry.cn-shenzhen.aliyuncs.com echo "==========上传镜像=========="
docker tag mydotnet6 registry.cn-shenzhen.aliyuncs.com/命名空间/仓库名:latest
docker push registry.cn-shenzhen.aliyuncs.com/命名空间/仓库名:latest echo "==========清理镜像=========="
docker rmi -f mydotnet6
docker rmi registry.cn-shenzhen.aliyuncs.com/命名空间/仓库名:latest

手动构建一下,去看阿里云仓库:

镜像自动上传,Get~

接下来要从仓库拉取镜像并运行,该怎么做呢?想必聪明的你已经知道了——没错,还是同样的流程:添加SSH Server→添加构建步骤→编写Shell。添加并选择新的SSH Server,执行这些shell:

echo "==========停止进程=========="
docker kill -s KILL mydotnet6 echo "==========删除容器=========="
docker rm mydotnet6 echo "==========删除镜像=========="
docker rmi -f registry.cn-shenzhen.aliyuncs.com/命名空间/仓库名:latest echo "==========登录仓库=========="
docker login --username=阿里云账户 --password=阿里云仓库密码 registry.cn-shenzhen.aliyuncs.com echo "==========拉取新镜像=========="
docker pull registry.cn-shenzhen.aliyuncs.com/命名空间/仓库名:latest echo "==========开始运行=========="
docker run -itd -p 5000:80 --restart always --name=mydotnet6 registry.cn-shenzhen.aliyuncs.com/命名空间/仓库名:latest

然后再次手动触发构建,去server02查看容器:

访问一下:

访问正常。手动构建没问题,那么自动构建呢?打开项目新增一个NB方法:

Git提交,等待一段时间后直接刷新swagger:

只需要Git上传代码就能完成这些,爽不?

自动部署Get~

小结

看完这三篇文章,你应该可以成功搭建CICD环境了,然后你会发现它并不难。不过如果你想在生产环境应用它,可能会有些坑。当然,我已经踩过了,而且有些坑还给我的公司造成了损失。既然说到这里,当然不会看着同学们踩坑,所以我还会写个防踩坑指南,下一篇见。

.NET 微服务——CI/CD(3):镜像自动分发的更多相关文章

  1. 分布式架构和微服务CI/CD的范本技术解读

    随笔分类 - 分布式架构--http://www.cnblogs.com/hujihon/category/858846.html (ZooKeeper.activemq.redis.kafka)的分 ...

  2. .NET 微服务——CI/CD(2):自动打包镜像

    准备工作 一.开启docker的tcp 我的服务器是linux,以端口2376为例,找到docker.service,在ExecStart下新增这段代码即可: -H tcp://0.0.0.0:237 ...

  3. .NET6 微服务——CI/CD(1):搭建Jenkins并实现自动构建

    CI/CD 它的意思是 持续集成/持续部署,这也不是新概念.那些八股文就不写了,说话的方式简单点:如果成功搭建CI/CD环境,当你需要迭代线上程序时,只需通过git提交代码就可以,其他什么都不用做.是 ...

  4. 唱吧DevOps的落地,微服务CI/CD的范本技术解读----最大的难点并不是实际业务代码的编写,而是服务的监控和调试以及容器的编排

    1.业务架构:从单体式到微服务 K歌亭是唱吧的一条新业务线,旨在提供线下便捷的快餐式K歌方式,用户可以在一个电话亭大小的空间里完成K歌体验.K歌亭在客户端有VOD.微信和Web共三个交互入口,业务复杂 ...

  5. 唱吧DevOps的落地,微服务CI/CD的范本技术解读

    1.业务架构:从单体式到微服务 K歌亭是唱吧的一条新业务线,旨在提供线下便捷的快餐式K歌方式,用户可以在一个电话亭大小的空间里完成K歌体验.K歌亭在客户端有VOD.微信和Web共三个交互入口,业务复杂 ...

  6. .NET 微服务——CI/CD(4):避坑和一点经验

    如果你看过之前几篇文章,应该已经Jenkins成功搭建了CICD环境,但是进入正式环境会有一些坑,不注意中招的话很难受,这里总结一下,避免重复消耗精力. 后门漏洞 Jenkins有后门,这是个老问题了 ...

  7. 【下一代核心技术DevOps】:(五)微服务CI与Rancher持续集成

    1. 引言 DevOps的核心魅力是快速的持续集成交付,降低研发和实施运维之间的交互,使得传统的各种扯皮现象统统消失.最重要的是降低成本 保障产品交付可靠性. 使用Rancher作为持续集成的关键环节 ...

  8. 微服务架构 ------ Dockerfile定制镜像

    Docker容器不仅仅是运行原生的容器,而是把我们的具体的项目能够布置到容器上面去,这就是Docker定制镜像需要做的事情.  Docker容器 = new Docker镜像  镜像相当于类,容器相当 ...

  9. 【Devops】【docker】【CI/CD】Jenkins自动安装JDK需要提供Oracle的账号密码,否则报错:Unable ro auto-install JDK until the license is accepted

    Jenkins自动安装JDK需要提供Oracle的账号密码,否则报错:Unable ro auto-install JDK  until the  license is accepted 解决方法: ...

随机推荐

  1. zabbix之主动模式和proxy的主动模式

    #:找一台新主机配置上agent,注意版本要和server端保持一样 #:官网地址:https://www.zabbix.com/documentation/4.0/zh/manual/install ...

  2. clickhouse 输入输出格式

    TabSeparated.TabSeparatedRaw.TabSeparatedWithNames和TabSeparatedWithNamesAndTypes TabSeparated 默认格式,缩 ...

  3. 【Java基础】Java中如何获取一个类中泛型的实际类型

    泛型的术语 <>: 念做typeof List<E>: E称为类型参数变量 ArrayList<Integer>: Integer称为实际类型参数 ArrayLis ...

  4. C++STL标准库学习笔记(二)二分查找

    二.STL中的二分查找算法 1.binary_search 2.lower_bound 3.upper_bound 记得#include<algorithm>! 前言: 在这个笔记中,我把 ...

  5. Gitlab更改项目间的fork提交关系

    目录 一.前情提要 二.实际操作 一.前情提要 1.dzsw/cgd_xx项目,通过fork按钮在dzsw_dev组下面同步了一个项目 2.但是现在dzsw/cgd_xx项目因为没法提交合并请求,一点 ...

  6. Git remote 远程仓库链接管理

    SVN 使用单个集中仓库作为开发人员的通信枢纽,通过在开发人员的工作副本和中央仓库之间传递变更集来进行协作. 这与 Git 的分布式协作模型不同,后者为每个开发人员提供了自己的仓库副本,并具有自己的本 ...

  7. 返回记录中的指定内容Record.Field…(Power Query 之 M 语言)

    返回指定字段: = Record.Field( 记录, "字段名") = Record.FieldOrDefault( 记录, "字段名", 找不到时返回的值) ...

  8. LuoguP1898 缘分计算 题解

    Content 根据一个长度为 \(l\),只含大写字母的字符串算出它的"缘分值". 步骤如下: 给定一个数 \(st\). 将字符串里面的所有字母改成数字(如 A 改成 \(st ...

  9. Mysql 表名忽略大小写-连接字符集随笔记录

    1.参数说明: lower_case_table_names=0 表名存储为给定的大小和比较是区分大小写的 lower_case_table_names = 1 表名存储在磁盘是小写的,但是比较的时候 ...

  10. 使用.NET 6开发TodoList应用文章索引

    系列导航 使用.NET 6开发TodoList应用(1)--系列背景 使用.NET 6开发TodoList应用(2)--项目结构搭建 使用.NET 6开发TodoList应用(3)--引入第三方日志 ...