CICD持续集成部署系列9-Jenkins部署.NetCore微服务

向量数据库大模型容器

picture.image

目录

picture.image

CICD持续集成部署系列1- gitlab安装和使用

CICD持续集成部署系列2-使用 harbor 搭建 Docker 私有仓库

CICD持续集成部署系列3-Jenkins基础概念

CICD持续集成部署系列4-Jenkins安装和常用插件

CICD持续集成部署系列5-Jenkins与Git打通

CICD持续集成部署系列6-NetCore项目编译发布构建镜像的方法说明

CICD持续集成部署系列7- Jenkins项目构建-Pipeline流水线项目构建

CICD持续集成部署系列8-Jenkins远程发送Shell命令-拉取镜像和发布应用(看相邻篇文章)

picture.image

正文

picture.image

picture.image

实验的机器全部为CentOS 7.9版本。

192.168.157.102 --代码托管 gitlab

192.168.157.103 持续集成 Jenkins JDK Git

192.168.157.104 harbor 镜像存储registry

192.168.157.105 应用服务器 docker

一、准备NetCore开发项目

实验是使用.Net5开发一个Demo,使用VS2019自动生成Dockerfile,然后上传到gitlab上。

picture.image

picture.image

二、Jenkins创建流水线任务

1、创建新Item

picture.image

2、添加参数

picture.image

我一共添加了3个参数,大家可以根据实际工作需要创建参数。这些参数名称可以在写流水线脚本的时候作为参数使用。

picture.image

3、编写Pipeline流水线脚本

脚本内容如下:

  
  
//code的git地址  
def git_url="http://192.168.157.102:82/muxue_group/web_demo.git"  
  
//定义项目名称  
def project_name="web_demo"  
  
//web目录的名称  
def web_dictionary_name="WebDemo"  
  
//定义harbor地址  
def harbor_url="192.168.157.104:85"  
  
  
//Harbor的项目名称  
def harbor_project_name = "saas_api"  
  
//harbor的账号密码的一个凭证  
def haror_auth="2928eee9-51cf-4f9f-b0df-afbc90a8a7ec"  
  
  
  
node {  
   
 stage('pull code') {  
            //第一步:从gitlab拉取源码  
 echo 'pull code'  
 checkout([$class: 'GitSCM', branches: [[name: '*/${branch}']], extensions: [], userRemoteConfigs: [[credentialsId: '9538c62c-2ea6-463f-acf9-f95adc64870b', url: "${git_url}"]]])  
   
 }  
 stage('build project') {  
   
 // 第二步:调用VS2019自动生成的Dockerfile,编译发布和构建镜像;  
 //定义镜像名称  
 def imageName="${project_name}:${tag}"  
 def tagImageName="${harbor_url}/${harbor_project_name}/${imageName}"  
  
 echo "当前分支${branch}"  
 sh "pwd"  
  
 //移动dockerfile文件到当前目录  
 sh "mv ${web_dictionary_name}/Dockerfile ."  
   
 //构建镜像-包括编译代码  
 sh "docker build -t ${imageName} ."  
   
 // 第三步:给镜像打标签,然后上传到Harbor镜像仓库;  
 //镜像打标签  
 sh "docker tag ${imageName} ${tagImageName}"  
   
  
 //对应的是harbor的账号和密码  
 withCredentials([usernamePassword(credentialsId: "${haror_auth}", passwordVariable: 'password', usernameVariable: 'username')]) {  
   
 echo "本地镜像上传到harbor"  
  
 //登录harbor  
 sh "docker login -u ${username} -p ${password} ${harbor_url}"  
 //上传镜像到harbor  
 sh "docker push ${tagImageName}"  
  
 echo "本地镜像上传到harbor-ok"  
 //删除本地镜像   
 sh "docker rmi -f ${imageName}"  
  
 sh "docker rmi -f ${tagImageName}"  
 echo "删除本地镜像成功"  
  
 }  
  
   
  
 echo "以下为远程调用进行项目部署"  
  
 //=====第四步 以下为远程调用进行项目部署========  
 echo "传参:$harbor_url $harbor_project_name $project_name $tag $port"  
  
 sshPublisher(publishers: [sshPublisherDesc(configName: 'master_server105', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "/opt/jenkins_shell/deploy.sh $harbor_url $harbor_project_name $project_name $tag $port", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])  
  
 echo "远程调用进行项目部署完成"  
 }  
          
   
   
}  

分析脚本:

(1)一共有4大步骤,如下

第一步:从gitlab拉取源码;

第二步:调用VS2019自动生成的Dockerfile,编译发布和构建镜像;

第三步:给镜像打标签,然后上传到Harbor镜像仓库;

第四步:远程调用.sh脚本进行项目部署;

(2)脚本相对来说很简单,其中有3处是使用 流水线语法片段生成器生成的。用到了很多bash脚本命令。

三、远程服务器创建.sh脚本

目录/opt/jenkins_shell/下创建一个deploy.sh脚本,内容为:

  
#! /bin/sh  
#接收外部参数  
  
#harbor地址  
harbor_url=$1  
#harbor里的项目名称  
harbor_project_name=$2  
#代码的项目名称  
project_name=$3  
#打的标签的名称  
tag=$4  
#对外暴露的端口  
port=$5  
  
imageName=$harbor_url/$harbor_project_name/$project_name:$tag  
containerName="${harbor_project_name}__${project_name}__${tag}_c"  
echo "镜像名${imageName}"  
echo "容器名名${containerName}"  
#查询容器是否存在,存在则删除  
containerId=`docker ps -a | grep -w ${project_name}:${tag} | awk '{print $1}'`  
if [ "$containerId" != "" ] ; then  
 #停掉容器  
 docker stop $containerId  
  
 #删除容器  
 docker rm $containerId  
   
 echo "成功删除容器"  
fi  
  
#查询镜像是否存在,存在则删除  
imageId=`docker images | grep -w $project_name | awk '{print $3}'`  
  
if [ "$imageId" != "" ] ; then  
   
 #删除镜像  
 docker rmi -f $imageId  
   
 echo "成功删除镜像"  
fi  
  
# 登录Harbor  
docker login -u admin -p Harbor12345 $harbor_url  
  
# 下载镜像  
docker pull $imageName  
  
# 启动容器  
docker run -d -p $port:80 --name ${containerName} $imageName --restart=always  
  
echo "容器启动成功"  

分析脚本:

(1)首先是接收5个外部参数;

(2)查看本机是否有旧的相同的镜像和容器,有则删除;

(3)登录Harbor,拉取镜像;

(4)运行容器。

该脚本还可以根据实际项目需要继续优化。

四、Jenkins执行流水线

picture.image

等待执行,首次执行会比较慢。

picture.image

picture.image

回顾

picture.image

1、整个步骤其实设计了很多知识点以及安装部署等。

2、需要掌握的知识点大致罗列一下:dockerfile写法、docker命令、dotnet命令、Harbor、sh脚本、Linux的基础知识、Jenkins的插件玩法、Pipeline流水线的操作、Pipeline流水线脚本编写等。

3、我在此之前写了8个章节,简单的介绍了相关软件的安装和使用方法。大家可以先看之前8篇文章,再看本章节。

4、Jenkins+Docker+.NetCore 这个搭配的方案,其实还有很多优化的地方,其中一个明显的不足就是 Jenkins调用远程.sh脚本,其控制权相对转移了,对远程.sh脚本的执行过程明显是个黑盒子,这个我们以后使用K8s来实现,应该会好一些。

5、Jenkins的学习可以看下B站上《黑马程序员》的系列教程,讲的非常的好,网址如下:

https://www.bilibili.com/video/BV1kJ411p7mV?p=1

也可以在本公众号回复关键词 “jenkins”,下载该Jenkins所有的视频教程和对应的文档。

6、该系列教程尚未结束,以后继续更新。


2021沐雪.NetCore版本SaaS多租户商城系统源码 小程序商城源码

picture.image

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
KubeZoo: 轻量级 Kubernetes 多租户方案探索与实践
伴随云原生技术的发展,多个租户共享 Kubernetes 集群资源的业务需求应运而生,社区现有方案各有侧重,但是在海量小租户的场景下仍然存在改进空间。本次分享对现有多租户方案进行了总结和对比,然后提出一种基于协议转换的轻量级 Kubernetes 网关服务:KubeZoo,该方案能够显著降低多租户控制面带来的资源和运维成本,同时提供安全可靠的租户隔离性。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论