.NET 微服务——CI/CD(3):镜像自动分发

  • A+
所属分类:.NET技术
摘要

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

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

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

然后下载这个插件:

Publish Over SSH

.NET 微服务——CI/CD(3):镜像自动分发

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

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

.NET 微服务——CI/CD(3):镜像自动分发

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

.NET 微服务——CI/CD(3):镜像自动分发

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

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

.NET 微服务——CI/CD(3):镜像自动分发

选中刚才新增的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

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

.NET 微服务——CI/CD(3):镜像自动分发

镜像自动上传,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查看容器:

.NET 微服务——CI/CD(3):镜像自动分发

访问一下:

.NET 微服务——CI/CD(3):镜像自动分发

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

.NET 微服务——CI/CD(3):镜像自动分发

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

.NET 微服务——CI/CD(3):镜像自动分发

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

自动部署Get~

小结

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