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

 

0、目录


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

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

 

此文阅读目录:node

一、闲聊linux

二、部署流程介绍git

三、部署Harbor仓库github

四、jenkins-slave镜像搭建web

五、部署jenkinsdocker

六、jenkins+gitlab挂钩shell

七、k8s部署asp.net core项目apache

 

1、闲聊


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

若是如下内容有不足的地方,请指出,我会第一时间更正。谢谢你们。

2、部署流程介绍


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

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

 

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

 

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

ps:因为个人电脑配置有限,运行太多的虚拟机会致使内存空间不够用,所以就弄了三台,已是极限了。

若是你们对于k8s怎么部署,请看我以前的文章有介绍。前提是要安装好docker环境、gitlab等

IP 角色
192.168.161.151 master一、Harbor、Jenkins
192.168.161.152 node1
192.168.161.153 node二、Gitlab

 

3、部署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部署完成。

 

4、jenkins-slave镜像搭建


 

操做服务器:node1

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

 

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

Dockerfile:构建jenkins-slave镜像

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

slave.jar: 启动脚本


 

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

二、配置java的基础环境。

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

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

 

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

执行命令:

构建完成后把镜像推送到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 镜像已推送完毕。

 

 

5、部署jenkins


 

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

一、须要准备文件有

jenkins-service-account.yml :jenkins的服务帐号建立

jenkins.yml : 建立容器和service 服务得。进行能够访问。

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

registry-pull-secret.yaml:主要是用来部署时能够直接登陆harbor仓库来拉取镜像(在部署jenkins须要用到)

 

二、开始吧。

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

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

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

 

三、切换到master 服务器上

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

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

生成方式为:能够在有登陆的harbor 的node服务器上面执行如下命令生成认证信息
命令: cat ~/.docker/config.json |base64 -w0 便可生成信息

 

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

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

 

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

 

 

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

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

 

而后选择 “”插件来安装“”,若是须要特别的插件直接选择,不然直接安装便可。

 

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

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

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

 

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

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

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

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

 

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

 

此处若是发现测试不经过,请如今k8s中安装一下kube-dns.yaml,文件在群中k8s集群部署文件下面:直至在k8s中执行便可。

命令:kubectl create -f kube-dns.yaml

 

 

 八、添加凭证

在这里我添加了两个凭证,一个是ssh,和k8s的凭证。这个可自行添加一下便可。这里要注意一下:凭证生成后,进入凭证里面会有一个自动生成的ID,此ID须要在asp.net core项目中的Jenkinsfile里面配置。

root中的密钥时私钥,而且在服务器上须要把公钥配置到gitlab上。

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

 

 

 

6、jenkins+gitlab挂钩


 

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

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

 

 

 

 二、配置gitlab

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

 

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

 

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

 

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

 

 

 成功啦。

 

 

 

7、终于到了咱们asp.net core项目啦


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

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

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

 

注:Jenkinsfile里面这两个地方须要配置为大家在Jenkins里面建立的两个受权的ID,ID内容能够进入到凭证里面看。切记,必定要改。

 

 

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

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

 


 

 到目前为止 咱们就能够开始上传代码到gitlab上,而后自动触发构建啦。

 

上传后再这边会出现构建进行,咱们能够查看 控制台输出

 

 

 

 

输出、以及构建成功

在master上面查看

发现已经运行个人项目啦,用浏览器访问如下。

 

 查看一下外部发布的端口

 

 

 

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


 

 

github:fork me

asp.net Core 交流群:787464275 欢迎加群交流
若是您认为这篇文章还不错或者有所收获,您能够点击右下角的【推荐】按钮精神支持,由于这种支持是我继续写做,分享的最大动力!

做者:LouieGuo
声明:原创博客请在转载时保留原文连接或者在文章开头加上本人博客地址,如发现错误,欢迎批评指正。凡是转载于本人的文章,不能设置打赏功能,若有特殊需求请与本人联系!

微信公众号:欢迎关注                                                 QQ技术交流群: 欢迎加群