一、简介

微服务开发中自动化、持续化工程十分重要,在成熟的CI/CD环境中项目团队可以灵活分配,大大提供团队效率。如果还不了解什么是CI/CD,可以先查看相关文章,这里主要介绍环境的搭建,相关原理就不过多搬书了。

二、开始搭建

准备

目前主流的ci/cd环境都是基于容器化管理的,所以想要搭建这一环境必须熟练docker操作。版本控制选择git,构建工具选择Jenkins,所以开始前需要先掌握这些技术。

Step1:安装docker

Ubuntu 18.04 docker安装

docker安装方式有多种,存储库安装方式如下:

更新存储库:

sudo apt-get update

卸载旧版本docker:

sudo apt-get remove docker docker-engine docker.io

安装docker:

sudo apt install docker.io

启动docker、开机自启:

sudo systemctl start docker
sudo systemctl enable docker

检查版本:

docker --version

Step2:选择版本控制器

代码托管最好选择git,git仓库公司应该都有搭建,如果没有也可以选择GitHub、gitLab、gogs等git工具。

step3:Jenkins安装

存储库方式安装Jenkins

更新存储库、安装Java:

sudo apt updatesudo
apt install openjdk-8-jdk

导入Jenkins存储库的GPG密钥:

wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -

将Jenkins存储库添加到系统中:

sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'

更新存储库、安装Jenkins:

sudo apt updatesudo
apt install jenkins

检查Jenkins状态:

systemctl status jenkins

安装成功则输出如下:

● jenkins.service - LSB: Start Jenkins at boot time
Loaded: loaded (/etc/init.d/jenkins; generated)
Active: active (exited) since Wed -- :: PDT; 2min 16s ago
Docs: man:systemd-sysv-generator()
Tasks: (limit: )
CGroup: /system.slice/jenkins.service

记得开放8080端口

进入Jenkins:http://服务器IP:8080

获取初始密码:

sudo cat /var/lib/jenkins/secrets/initialAdminPassword

登录成功:

选择左边推荐插件安装:

设置管理员密码:

配置完成:

以上步骤都成功的话就可以开始创建自动化工程了。

Step4:创建Jenkins任务

进入Jenkins主页,选择新建任务:

输入任务名,选择自由风格:

确定后进入任务配置,源码管理选择git,tfs也可以但是不建议

触发器根据需要选择,我是通过手动发布所以并未选择触发器

构建环境选择删除工作空间

最后是关键一步,也是最容易出错的一步,执行命令:

#!/bin/sh
cd /var/lib/jenkins/workspace/auth-server/applications/AuthServer.Host/publish
docker container prune << EOF
y
EOF
docker container ls -a | grep "auth-server"
if [ $? -eq ];then
docker container stop auth-server
docker container rm auth-server
fi
docker image prune << EOF
y
EOF
docker build -t auth-server .
docker run -d -p : --name=auth-server auth-server

完成后应用并保存。

shell命令分析:

熟悉Linux命令的话应该可以大致看懂上面的shell命令,命令执行步骤如下:

1. 进入工程的工作空间

2. 判断是否存在“auth-server”容器,存在则删除容器及镜像

3. 构建docker镜像

4. 启动docker容器

这里的构建步骤与标准CI/CD有差异,标准CI/CD是拉取代码后在服务器上构建(build)代码并打包docker镜像。上述过程是在本地构建并发布至publish目录中,然后提交publish文件,Jenkins拉取编译文件进行docker发布。

为什么要本地构建:

在本地构建代码并提交要比提交代码后服务器构建多出一步,这一步并不是多此一举,下面分析下本地构建的原因:

1. 环境:由于国内网络原因,服务器构建代码时会出现很多拉取nuget、npm包超时现象,而Jenkins发布会有时间限制,发布超时会默认失败。如果调整Jenkins发布超时时间则没有意义,发布时间超过一小时还不如手动打包docker呢。

2. 节省资源: 构建代码十分消耗系统资源,在服务较多时一次代码提交需要同时发布数个有关联的服务,这时服务器很可能会死机导致开发环境大量服务超时,十分影响前后端开发人员工作进度。

3. 快速:在高频率的产品迭代中,微服务的发布也会十分频繁,采用本地构建Jenkins发布的方式会大大缩短发布时间,甚至一个服务的发布只需1分钟。

4. 排错:标准的CI/CD发布模式中,开发人员提交的代码很有可能有异常,这时服务就会发布失败,如果其他服务依赖于此服务则会导致其他服务出现接口异常现象,耦合较大的话会直接崩溃。发现异常后,开发人员需要重新拉取代码查看异常,而异常往往是由其他开发人员提交代码不完整导致。等到代码异常解决,重新发布可能一个小时就过去了。。。通过本地构建再发布就会完美避开这些周折。

Jenkins发布演示:

选择一个微服务:

选择立即构建:

左下会输入发布日志,上面输出代表发布成功。

三、总结

如果以上安装配置都成功的话,那么恭喜你,微服务开发必备的CI/CD环境已经搭建完成,没有成功的话也没关系,多次尝试一定会成功的,我也是几天的折腾才搭好的(服务器都重装了好几次)。后续会介绍更多在abp vNext微服务中进行实际业务开发,同时也会介绍vue的相关开发技巧,感兴趣的话可以持续关注。

Linux搭建.net core CI/CD环境的更多相关文章

  1. 庐山真面目之十一微服务架构手把手教你搭建基于Jenkins的企业级CI/CD环境

    庐山真面目之十一微服务架构手把手教你搭建基于Jenkins的企业级CI/CD环境 一.介绍 说起微服务架构来,有一个环节是少不了的,那就是CI/CD持续集成的环境.当然,搭建CI/CD环境的工具很多, ...

  2. 如何搭建安全的 CI/CD 管道?

    Eolink 前端负责人黎芷君进行了<工程化- CI / CD>的主题演讲,围绕 CI/CD 管道安全的实践,分享自己在搭建 CI/CD 管道过程中所总结的重要经验,与开发者深入讨论 &q ...

  3. 基于Gogs+Drone搭建的私有CI/CD平台

    请移步 基于Gogs+Drone搭建的私有CI/CD平台

  4. Gitea 与 Drone 集成实践:完全基于 Docker 搭建的轻量级 CI/CD 系统

    Drone 是一个使用 Go 语言编写的自助式的持续集成平台,和 Gitea 一样可以完全基于容器部署,轻松扩展流水线规模.开发者只需要将持续集成过程通过简单的 YAML 语法写入 Gitea 仓库目 ...

  5. Jenkins 搭建 .NET Core 持续集成环境

    关于c#的.Net FrameWork 的集成环境以及MsBuild的配置可以看     jenkins搭建.NET FrameWork持续集成环境 这篇文章     关于.NET Core 这个项目 ...

  6. Linux搭建lamp(Apache+PHP+Mysql环境)centos7.2版详细教程

    我们更多的网站服务器是选择了Linux系统,这里建议你选择centos,这也是阿里云ecs推荐的系统,在服务器上比较推荐centos,特别对于新手,首选CentOS,并不是centos比Debian和 ...

  7. CentOS7安装搭建.Net Core 2.0环境-详细步骤

    一.构建.Net core 2的应用程web发布 因为是用来测试centos上的core 环境,先直接用vs17自带的core实例. 二.部署CentOS7的core环境 1.连接并启动之前安装的虚拟 ...

  8. CentOS下搭建.NET Core项目运行环境

    系统版本:CentOS 7.3 运行环境:.NET Core 数据库:MySQL 进程守护:Supervisor .NET Core环境 安装CentOS中.NET Core依赖库 yum insta ...

  9. Linux搭建nginx+php/php-fpm+mysql环境

    百度内部php框架odp有单独的nginx+php/php-fpm环境,但为了更好的实践,自己搭建一套单独的. 1.首先安装nginx 两种方式: 1)yum源安装(使用root权限)yum inst ...

随机推荐

  1. 【手记】解决Graphics.DrawImage带ImageAttributes在XP报内存不足的问题

    异常信息: System.OutOfMemoryException: 内存不足. 在 System.Drawing.Graphics.CheckErrorStatus(Int32 status) 在 ...

  2. ORACLE-JDK非收费版本下载链接

    这个链接下可以下载oracleJDK的所有版本 https://www.oracle.com/technetwork/java/javase/archive-139210.html 其中jdk192之 ...

  3. poj1426(暴力dfs)

    题目链接:https://vjudge.net/problem/POJ-1426 题意:给出n(1<=n<=200),求出全部由01组成的能整除n的正整数. 思路:此题在unsigned ...

  4. 如何克服社交恐惧症?zz

    zhang Bavol 清华大学核能与新能源技术研究院——核科学与技术/电子爱好者     你说的这个恐惧症我也有一点点,不过现在我是只对那种不是很熟悉的七姑八婆之类的亲戚才会有这种憋屈感觉,对朋友和 ...

  5. [转帖]订购微软Windows 7延长支持服务的报价曝光 第三年要价两百美金

    订购微软Windows 7延长支持服务的报价曝光 第三年要价两百美金 cnbeta 年2月份的新闻 https://www.cnbeta.com/articles/tech/815885.htm 微软 ...

  6. 【转帖】samba的配置文件smb.conf详细说明

    samba的配置文件smb.conf详细说明 https://blog.csdn.net/cqboy1991/article/details/9791033 找时间自己写一个blog 说明一下搭建过程 ...

  7. React—组件生命周期详解

    React—组件生命周期详解 转自 明明的博客  http://blog.csdn.net/slandove/article/details/50748473 (非原创) 版权声明:转载请注明出处,欢 ...

  8. 为什么fastjson字段为null时不输出空字符串?

    为什么fastjson字段为null时不输出空字符串? Map < String , Object > jsonMap = new HashMap< String , Object& ...

  9. 更新neo4j节点信息

    将多个属性的内容更新到节点上 def update_by_id(id,graph,**kwargs): """ 更新节点的属性 根据节点的ID来更新节点的属性,如果存在该 ...

  10. SQLite进阶-15.触发器

    目录 触发器(Trigger) 触发器(Trigger)的要点: 触发器应用 查看触发器 删除触发器 触发器(Trigger) 触发器(Trigger)是数据库的回调函数,它会在指定的数据库事件发生时 ...