k8s+Jenkins+GitLab-自动化部署asp.net core项目

简介: 0、目录 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 此文阅读目录: 1、闲聊 2、部署流程介绍 3、部署Harbor仓库 4、jenkins-slave镜像搭建 5、部署jenkins 6、jenkins+gitlab挂钩 7、k8s部署asp.net core项目 一、闲聊 现在基本上是隔几天写一篇文章,还是不够勤奋,努力把自己打造成勤奋的人,把工作上面所用到的技术点分享给大家。

0、目录


整体架构目录:ASP.NET Core分布式项目实战-目录


k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录

此文阅读目录:

1、闲聊

2、部署流程介绍

3、部署Harbor仓库

4、jenkins-slave镜像搭建

5、部署jenkins

6、jenkins+gitlab挂钩

7、k8s部署asp.net core项目

一、闲聊


现在基本上是隔几天写一篇文章,还是不够勤奋,努力把自己打造成勤奋的人,把工作上面所用到的技术点分享给大家。为了研究k8s自动化部署aspnet core项目,足足花费了我一个礼拜的时间,过程是痛苦的,但结果是美好的。

如果以下内容有不足的地方,请指出,我会第一时间更正。谢谢大家。

二、部署流程介绍


1、先上一下手绘导图,大致的流程图如下:(不喜勿喷呀)

大致的部署流程是这样的:开发人员把做好的asp.net core项目代码通过git推送到gitlab,然后Jenkins通过 gitlab webhook (前提是配置好),自动从拉取gitlab上面拉取代码下来,然后进行build,编译、生成镜像、然后把镜像推送到Harbor仓库;然后在部署的时候通过k8s拉取Harbor上面的代码进行创建容器和服务,最终发布完成,然后可以用外网访问。(ps:看着我讲这么简单,但心里有许多小鹿在心里乱撞,没关系,下面将会好好的分享给大家)

当然啦,上面只是粗略的,请看下图才更加形象。

2、先介绍一下我的服务器IP和在各个服务器上面所安装的内容

ps:由于我的电脑配置有限,运行太多的虚拟机会导致内存空间不够用,因此就弄了三台,已经是极限了。

如果大家对于k8s怎么部署,请看我之前的文章有介绍。前提是要安装好docker环境、gitlab等

IP 角色
192.168.161.151 master1、Harbor、Jenkins
192.168.161.152 node1
192.168.161.153 node2、Gitlab

三、部署Harbor仓库


第一步:下载harbor二进制文件:https://github.com/goharbor/harbor/releases

第二步:安装 docker compose

命令:

sudo curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose

然后把下载的docker-compose 设置可执行权限

命令:chmod +x /usr/local/bin/docker-compose

第三步:此处应该设置自签证书的,即访问的时候是采用HTTPS进行访问的。此处略去,不影响我们接下去的部署。(后期会出一篇关于自签证书的文章,仅供参考)

第四步:将下载好的Harbor二进制包上传到服务器上面,然后解压出来

解压的命令为: tar xzvf 包名

第五步:进入解压出来的文件夹harbor中,有如下文件。

配置文件,vi harbor.cfg

把其中的hostname修改为:master1 的IP地址。

然后 修改harbor的登录密码:为了方便起见,我修改为123456,大家可自行修改

第六步:在当前文件夹中开启harbor

执行命令:

./prepare

./install.sh (运行此处的时候需要一定的时间,请等待吧)

第七步:启动成功,查看一下(完美的运行)

docker-compose ps

用浏览器查看一下(出现以下内容,代表成功,完美)

进入到里面后,我先在用户管理中创建了一个用户 louie 。大家自行创建,为了后期需要把一些依赖镜像先推送到harbor仓库中。然后在项目中创建项目,如下:

所创建的项目,并且,我在每个项目中都加入了我刚才所创建的用户,方便后期登录并推送镜像

此处介绍一下我的项目,coresdk 主要用来存放 asp.net core 所需要的sdk;ops主要是用来存放的jenkins镜像和jenkins-slave镜像;projectdemo 主要存放我的asp.netcore 项目的镜像,供k8s拉取。

至此,harbor部署完成。

四、jenkins-slave镜像搭建


操作服务器:node1

说明:jenkins-slave 主要是为了分担jenkins-master的压力。如下图所示:(在多任务运行的时候可以采用)

1、为了创建jenkins-slave镜像,我这边准备了三个文件

Dockerfile:构建jenkins-slave镜像

jenkins-slave:shell脚本(需要加入可执行权限 chmod +x jenkins-slave),在镜像构建时需要用到。

slave.jar: 启动脚本


Dockerfile 文件内容如下(如需源文件可加入QQ群获取),如下图所示:可以看到 jenkins-slave需要依赖java的一些环境。

2、配置java的基础环境。

配置 JDK和maven,把下载的二进制包放到如下目录(由于文件太大,可移步到群中下载)

apache-maven-3.5.3-bin.tar.gz解压到的地址为 /usr/local/maven里面。
jdk-8u45-linux-x64.tar.gz解压到的地址为 /usr/local/jdk里面。

3、准备好环境后,刚才构建镜像,如下:

执行命令:

构建完成后把镜像推送到Harbor仓库中。

在推送的过程中需要先登录到harbor仓库

执行命令: docker login 192.168.161.151

执行后发现及时输入账号和密码也无法登录,由于在node1中没有添加harbor仓库的IP地址导致无法登录,因此

执行命令: vi /etc/docker/daemon.json

把下图的红色圈的部分加入,然后重启一下docker。

执行 docker info ,看一下IP地址是否生效,发现已加入。好了,在试一下登录,发现登录成功,然后开始推送把。

当然harbor 上也给出了 镜像推送的语句

开始推送:docker push 192.168.161.151/ops/jenkins-slave

至此,jenkins-slave 镜像已推送完毕。

五、部署jenkins


部署jenkins时,我把jenkins的数据卷采用pv/pvc、nfs 进行挂载。

1、需要准备文件有

jenkins-service-account.yml :jenkins的服务账号创建

jenkins.yml : 创建容器和service 服务得。进行可以访问。

Dockerfile :主要用来生成 jenkins 镜像的。

registry-pull-secret.yaml:主要是用来部署时可以直接登录harbor仓库来拉取镜像(在部署jenkins需要用到)

2、开始吧。

切换到node1服务器,把之前准备好的Dockerfile文件构建一下

命令:docker build -t 192.168.161.151/ops/jenkins:lts-alpine .

然后推送到Harbor仓库中,命令:docker push 192.168.161.150/ops/jenkins:lts-alpine

3、切换到master 服务器上

构建 jenkins-service-account.yml 和jenkins.yml 文件以及registry-pull-secret.yaml

特别注意registry-pull-secret.yaml 中的namespace,需要早k8s中创建,以及 data里面的64位认证信息(需要登录harbor仓库后生成的信息黏贴在这里)

执行上上面的文件后,命令: kubectl create -f 文件名。

生成如下,发现jenkins已在运行,而且是运行在153节点上。那么开始用浏览器访问把

查看一下 service ,jenkins的外部访问端口为诶 30001.

4、输入访问地址:http://192.168.161.153:30001/

在第一次登陆的时候需要密码进行解锁jenkins,按照提示获取密码即可。

然后选择 “”插件来安装“”,如果需要特别的插件直接选择,否则直接安装即可。

5、要想把jenkins关联到k8s中需要安装几个插件

打开 “系统管理” =》“管理插件” 然后安装

Kubernetes Continuous Deploy、Kubernetes、Gitlab Hook 、GitLab、Build Authorization Token

6、安装完毕后就开始构建项目啦。

我新建一个项目,然后选择 流水线、然后点击确定。

7、创建完任务后先不进行配置,我们先要设置一下jenkins挂钩k8s的环境

点击 “系统管理”=》“系统设置”。一直往下滑动,点击“新增一个云”,选择k8s,如果这边没有出现k8s,则代表你的插件没有安装成功,请重新安装吧。

然后配置一下里面的内容,只要配置这两个地方就可以了。针对URL,我这边是采用kube-dns来做服务发现,不需要实际的ip地址进行输入。至此搞定。不过还得配置一下 “凭证”,即SSH密钥,方便可以从gitlab那边拉取代码,有玩过gitlab应该知道,拉取代码分为git和http。

8、添加凭证

在这里我添加了两个凭证,一个是ssh,和k8s的凭证。这个可自行添加一下即可。root中的密钥时私钥,并且在服务器上需要把公钥配置到gitlab上。

这下面是gitlab 上面配置ssh, ssh的私钥和公钥,直接在 node服务器上生成一下即可 ssh-keygen, 然后把里面的内容复制出来即可。

六、jenkins+gitlab挂钩


上面已经创建了一个任务。然后我们开始配置这个任务里面的内容并且与gitlab挂钩把

1、进入testproject里面配置。按照以下图配置完后即可。然后点击保存。这样就完成了任务配置,接下来就是要配置一下gitlab啦

2、配置gitlab

在gitlab中我创建了一个项目Testproject

然后进入到项目中,点击 “Settings”=》Integrations

把上面URL和Token复制到这边,然后点击保存即可。接下来就是测试一下这个配置是否可以用

将上面创建好的webhook 进行测试,gitlab会模拟代码推送事件,返回200就代表成功啦。

成功啦。

七、终于到了我们asp.net core项目啦


github地址:上面有完整的代码 https://github.com/LouieGuo/testproject,记得fork me哟。感谢感谢。

在这里我创建了一个asp.net core webapi 的项目,不做任何修改。然后在项目中加入了这几个部署文件。

deploy文件里面包含 Jenkinsfile 和deploy.yml(用来部署项目镜像的)

Dockerfile :中是用来构建项目镜像 的

dockerfile 内容,当然里面的sdk我已经打包好了,已经上传到我的harbor仓库中。


到目前为止 我们就可以开始上传代码到gitlab上,然后自动触发构建啦。

上传后再这边会出现构建进行,我们可以查看 控制台输出

输出、以及构建成功

在master上面查看

发现已经运行我的项目啦,用浏览器访问以下。

查看一下外部发布的端口

运行成功啦。这篇文章写了好久,可能中间有漏掉的步骤,欢迎大家留言,后期补充。


github:fork me

本文转自CSDN-k8s+Jenkins+GitLab-自动化部署asp.net core项目

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
2月前
|
开发框架 .NET 开发者
简化 ASP.NET Core 依赖注入(DI)注册-Scrutor
Scrutor 是一个简化 ASP.NET Core 应用程序中依赖注入(DI)注册过程的开源库,支持自动扫描和注册服务。通过简单的配置,开发者可以轻松地从指定程序集中筛选、注册服务,并设置其生命周期,同时支持服务装饰等高级功能。适用于大型项目,提高代码的可维护性和简洁性。仓库地址:<https://github.com/khellang/Scrutor>
60 5
|
2月前
|
开发框架 算法 中间件
ASP.NET Core 中的速率限制中间件
在ASP.NET Core中,速率限制中间件用于控制客户端请求速率,防止服务器过载并提高安全性。通过`AddRateLimiter`注册服务,并配置不同策略如固定窗口、滑动窗口、令牌桶和并发限制。这些策略可在全局、控制器或动作级别应用,支持自定义响应处理。使用中间件`UseRateLimiter`启用限流功能,并可通过属性禁用特定控制器或动作的限流。这有助于有效保护API免受滥用和过载。 欢迎关注我的公众号:Net分享 (239字符)
62 1
|
2月前
|
开发框架 缓存 .NET
GraphQL 与 ASP.NET Core 集成:从入门到精通
本文详细介绍了如何在ASP.NET Core中集成GraphQL,包括安装必要的NuGet包、创建GraphQL Schema、配置GraphQL服务等步骤。同时,文章还探讨了常见问题及其解决方法,如处理复杂查询、错误处理、性能优化和实现认证授权等,旨在帮助开发者构建灵活且高效的API。
57 3
|
3月前
|
jenkins Devops Java
DevOps实践:Jenkins在持续集成与持续部署中的价值
【10月更文挑战第27天】在快速发展的软件开发领域,DevOps实践日益重要。Jenkins作为一款流行的开源自动化服务器,在持续集成(CI)和持续部署(CD)中扮演关键角色。本文通过案例分析,探讨Jenkins在Java项目中的应用,展示其自动化构建、测试和部署的能力,提高开发效率和软件质量。
114 2
|
27天前
|
Java jenkins 持续交付
Jenkins集成Maven
通过以上步骤,可以在Jenkins中成功集成Maven,实现自动化构建和部署。通过定时构建、SCM轮询等方式,可以确保代码库中的最新变更能够及时构建和测试,提高开发效率和代码质量。这种集成方式在实际项目中具有广泛的应用前景,能够显著提升团队的协作效率。
43 8
|
6月前
|
jenkins 持续交付 开发者
自动化部署:使用Jenkins和Docker实现持续集成与交付
【8月更文挑战第31天】本文旨在为读者揭示如何通过Jenkins和Docker实现自动化部署,从而加速软件开发流程。我们将从基础概念讲起,逐步深入到实际操作,确保即使是初学者也能跟上步伐。文章将提供详细的步骤说明和代码示例,帮助读者理解并应用这些工具来优化他们的工作流程。
|
2月前
|
监控 jenkins Linux
从 Jenkins 持续集成出发:探究如何监控员工电脑屏幕
Jenkins 在企业信息化管理中用于自动化构建、测试和部署,提高开发效率。本文讨论了其重要性,并从技术角度探讨了屏幕监控的可能性,但明确反对非法监控,强调应合法合规地管理企业和尊重员工隐私。
94 12
|
3月前
|
运维 jenkins Java
Jenkins在持续集成与持续部署中的价值
Jenkins在持续集成与持续部署中的价值
|
3月前
|
jenkins Devops 测试技术
DevOps实践:Jenkins在持续集成与持续部署中的价值
【10月更文挑战第26天】随着DevOps理念的普及,Jenkins作为一款开源自动化服务器,在持续集成(CI)与持续部署(CD)中发挥重要作用。本文通过某中型互联网企业的实际案例,展示了Jenkins如何通过自动化构建、持续集成和持续部署,显著提升开发效率、代码质量和软件交付速度,帮助企业解决传统手工操作带来的低效和错误问题。
140 4
|
4月前
|
jenkins Shell 持续交付
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(二)
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(二)
125 0