Linux搭建.net core CI/CD环境
一、简介
微服务开发中自动化、持续化工程十分重要,在成熟的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环境的更多相关文章
- 庐山真面目之十一微服务架构手把手教你搭建基于Jenkins的企业级CI/CD环境
庐山真面目之十一微服务架构手把手教你搭建基于Jenkins的企业级CI/CD环境 一.介绍 说起微服务架构来,有一个环节是少不了的,那就是CI/CD持续集成的环境.当然,搭建CI/CD环境的工具很多, ...
- 如何搭建安全的 CI/CD 管道?
Eolink 前端负责人黎芷君进行了<工程化- CI / CD>的主题演讲,围绕 CI/CD 管道安全的实践,分享自己在搭建 CI/CD 管道过程中所总结的重要经验,与开发者深入讨论 &q ...
- 基于Gogs+Drone搭建的私有CI/CD平台
请移步 基于Gogs+Drone搭建的私有CI/CD平台
- Gitea 与 Drone 集成实践:完全基于 Docker 搭建的轻量级 CI/CD 系统
Drone 是一个使用 Go 语言编写的自助式的持续集成平台,和 Gitea 一样可以完全基于容器部署,轻松扩展流水线规模.开发者只需要将持续集成过程通过简单的 YAML 语法写入 Gitea 仓库目 ...
- Jenkins 搭建 .NET Core 持续集成环境
关于c#的.Net FrameWork 的集成环境以及MsBuild的配置可以看 jenkins搭建.NET FrameWork持续集成环境 这篇文章 关于.NET Core 这个项目 ...
- Linux搭建lamp(Apache+PHP+Mysql环境)centos7.2版详细教程
我们更多的网站服务器是选择了Linux系统,这里建议你选择centos,这也是阿里云ecs推荐的系统,在服务器上比较推荐centos,特别对于新手,首选CentOS,并不是centos比Debian和 ...
- CentOS7安装搭建.Net Core 2.0环境-详细步骤
一.构建.Net core 2的应用程web发布 因为是用来测试centos上的core 环境,先直接用vs17自带的core实例. 二.部署CentOS7的core环境 1.连接并启动之前安装的虚拟 ...
- CentOS下搭建.NET Core项目运行环境
系统版本:CentOS 7.3 运行环境:.NET Core 数据库:MySQL 进程守护:Supervisor .NET Core环境 安装CentOS中.NET Core依赖库 yum insta ...
- Linux搭建nginx+php/php-fpm+mysql环境
百度内部php框架odp有单独的nginx+php/php-fpm环境,但为了更好的实践,自己搭建一套单独的. 1.首先安装nginx 两种方式: 1)yum源安装(使用root权限)yum inst ...
随机推荐
- 慎用rm -rf
首先,搞个回收站在~下 .bashrc或者.bash_profile加入 mkdir -p ~/.trash alias rm=trash alias r=trash alias rl='ls ~/. ...
- 【Unsolved】线性时间选择算法的复杂度证明
线性时间选择算法中,最坏情况仍然可以保持O(n). 原因是通过对中位数的中位数的寻找,保证每次分组后,任意一组包含元素的数量不会大于某个值. 普通的Partition最坏情况下,每次只能排除一个元素, ...
- c语言ARP应用
对于windows环境,winsock不能用来发ARP请求: 发表于: 2002-04-23 11:45:12 arp是请求硬件地址的.winsock层次太高啦... 用winsock中的sendto ...
- Linux下配置APUE的编译 报错之后如何处理
APUE即Unix环境高级编程,本书中几乎所有的程序都包含一个apue.h的头文件,那如何配置这个apue.h呢? 官方地址:http://www.apuebook.com/apue3e.html 1 ...
- Linux上面mount 域控的目录 超时 然后提示 error的解决办法
mount error(112): Host is down 故障解决 https://blog.csdn.net/lepton126/article/details/89447713 之前查到过 这 ...
- H3C路由器登录策略专题讲解
password-control login-attempt login-times [ exceed { lock | lock-time time | unlock } ] undo passwo ...
- brew update慢,brew install慢如何解决?
主要是资源访问太慢造成的,替换默认源镜像就行. brew使用国内镜像源 这里用中科大的,另外还有清华的可用 1 2 3 4 5 6 7 8 9 10 # 步骤一 cd "$(brew ...
- 将一个整数数组先按照因子数量排序,再按照数字大小排序,输出第k个数
同小米OJ比赛题:现在有 n 个数,需要用因子个数的多少进行排序,因子个数多的排在后面,因子个数少的排在前面,如果因子个数相同那么就比较这个数的大小,数大的放在后面,数小的放在前面.现在让你说出排序之 ...
- Django-filter报错:__init__() got an unexpected keyword argument 'name'
原因是 自从 django-filter2.0之后 将Filter的name字段 更名为 field_name 所以需要这样写: class GoodsFilter(filters.FilterSet ...
- Synchronized&Lock&AQS详解
加锁目的:由于线程执行的过程是不可控的,所以需要采用同步机制来协同对对象可变状态的访问. 加锁方式:java锁分为两种--显示锁和隐示锁,本质区别在于显示锁需要的是程序员自己手动的进行加锁与解锁如Re ...