IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> CICD持续集成部署系列9-Jenkins部署.NetCore微服务 -> 正文阅读

[系统运维]CICD持续集成部署系列9-Jenkins部署.NetCore微服务

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命令-拉取镜像和发布应用(看相邻篇文章)

正文

图片

实验的机器全部为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上。

图片

图片


?

二、Jenkins创建流水线任务

1、创建新Item

图片

2、添加参数

图片

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

图片

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执行流水线

图片

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

图片

回顾

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

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

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-01-04 13:49:25  更:2022-01-04 13:51:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 6:40:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码