使用Jenkins来发布和代理.NetCore项目

Back to

Study!

注:书接上文,上回《【CI/CD系列】使用Docker安装Jenkins》咱们说到了使用Docker镜像的方式,来建立Jenkins服务,用来持续集成和持续发布项目,但是上一篇文章有两个问题:

01

创建的容器不能操作和使用宿主机的docker,导致我们无法在Jenkins服务中去使用docker命令去构建asp.netcore项目镜像。

02

文章只是重点讲解了下如何构建和配置Jenkins服务应用,那接下来如何发布项目和代理项目,没有具体说明。

所以今天就重点说一下这两点,其实也是很简单的,昨天的基本内容已经三分之二了,今天就是简单的补充说明一下。

PS最终的镜像,我已经推送到dockerHub上了,可以自行pull下来,然后按照下文的命令执行下即可。

当然相关的视频版我会接下来的两周,配合着我的六个项目迁移的时候进一步讲解,现在我已经在生产环境构建好了,域名就是:

http://jenkins.neters.club

下一步就是把项目迁移了,这样就能省很多时间,甚至就不需要登录服务器操作了。

1、生成新容器

同时支持 SDK 和 Docker 的容器实例

还是昨天的镜像文件,只不过这次启动容器实例的命令不一样了,用这个:

docker run -u root --rm -d -p 3001:8080 --name jenkins2 \
-v /usr/bin/docker:/usr/bin/docker \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /home/dockerVolumes2/jenkins_home:/var/jenkins_home \
laozhangisphi/dnt-docker-jenkins

第一行表示启动一个容器名为Jenkins2的对外开放3001端口实例。

第二行表示将宿主机上面的docker命令行工具挂载到容器中,使jenkins用户能够执行docker命令。

第三行表示将宿主机上的docker.sock挂载到容器中的相应位置,使得容器中的dockercli能跟宿主机的docker通信。

第四行表示挂载我们创建的配置文件存放目录到指定的文件夹。

启动好了以后,就可以浏览器里正常的访问{ip}:3001端口了,接下来就是和上篇文章里说的一样,无脑配置一波就行了。

配置的过程中,如果插件有安装失败的,不用担心,只要能继续我往下走,就没事,因为后台管理里,我们可以继续安装的:

这个时候我们可以进入到容器里,执行命令,可以看到该有的命令都有了:

如果仅仅是查看Jenkins密码,不用进入也可以,直接一句话即可

docker exec jenkins2 cat /var/jenkins_home/secrets/initialAdminPassword


是不是很方便。


2、构建项目

创建一个Jenkins工程,使用CLI构建netcore应用

01、首先还是需要一个实例项目

在上篇文章中,我们创建了一个空的webapi项目,现在要创建Docker项目了,肯定就需要一个Dockerfile文件了:

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["HelloWorldPrj/HelloWorldPrj.csproj", "HelloWorldPrj/"]
RUN dotnet restore "HelloWorldPrj/HelloWorldPrj.csproj"
COPY . .
WORKDIR "/src/HelloWorldPrj"
RUN dotnet build "HelloWorldPrj.csproj" -c Release -o /app/buildFROM build AS publish
RUN dotnet publish "HelloWorldPrj.csproj" -c Release -o /app/publishFROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "HelloWorldPrj.dll"]

这个每个人肯定都能看懂,因为是vs官方给我们创建的,只不过要注意一点,注意路径问题,要放到项目根目录,也就是和vs同级目录。

02、配置Jenkins工作任务

基本的和上篇文章一样,还是一个自由风格的模式,配置Git地址,和构建命令。

之所以注释了,是因为第一次构建,宿主机里不存在容器和镜像,以后每次修改代码,都是删掉容器和镜像,重新生成。

但是,上边用的Dockerfile是vs官方给我们默认创建的,如果是国内的服务器,构建的时候会特别慢,那我们就用第二种方案,先发布再构建镜像,而不是在构建镜像的过程中发布,这样的话构建镜像的时候,可以使用国内的一些源镜像。

首先配置镜像文件Dockersfile,注意这个是在最终的publish文件夹里,所以我就右键属性,始终复制了:

FROM swr.cn-south-1.myhuaweicloud.com/mcr/aspnet:3.1-alpine
WORKDIR /app
COPY . . 
EXPOSE 80
ENTRYPOINT ["dotnet", "HelloWorldPrj.dll"]

然后编辑我们的Jenkins的构建shell命令:

dotnet restore
dotnet build 
cd HelloWorldPrj 
dotnet publish 
echo "Successfully!!!! ^ please see the file ."
cd bin/Debug/netcoreapp3.1/publish/#docker stop helloworldcontainer
#docker rm helloworldcontainer
#docker rmi hello-world-docjek
docker build -t hello-world-docjek .
docker run --name helloworldcontainer -p 5055:80 -d hello-world-docjek

03、点击构建,查看结果

可以看到我们在Jenkins中,构建了一个hello-world-docjek的项目镜像,然后生成了一个容器实例。

因为我们的Docker是宿主机的,可以在宿主机查看全部容器:

而且用Jenkins是直接将端口映射到公网的,直接访问{ip}:5055,就可以看到效果了,比如我们刚刚测试的我的http://neters.club:5055/weatherforecast:


04、Nginx做域名匹配和反向代理

剩下的就是很简单了,简单的在nginx里配置下就行了,将端口映射到域名下,然后配置下跨域的反向代理,整体的开发流程就是这么简单。

以后我们每次修改代码,就可以直接在Jenkins里构建一下,然后就能快速的部署了,是不是很方便。

当然,最后还有发邮件推送消息,编辑触发器,视图管理,docker-compose编排或者其他的知识点,等待视频的时候再说吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/308056.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库课设(足球联赛管理系统)

一:前言 如果有关注博主的粉丝,可能会发现贴心杰又缺更好几天了,但是我是宠粉杰啊,怎么可能会忘了我的宝贝粉丝呢,只不过是临近期末,各种大作业课设如期而至,这几天我在写数据库课设&#xff0…

.NET Core实用技巧(一)如何将EF Core生成的SQL语句显示在控制台中

前言笔者最近在开发和维护一个.NET Core 项目,其中使用几个非常有意思的.NET Core 相关的扩展,在此总结整理一下。EF Core 性能调优如果你的项目中使用了 EF Core, 且正在处于性能调优阶段,那么了解 EF Core 生成的 SQL 语句是非常关键的。那…

695.岛屿的最大面积(026)BFS

二:思路 1.这里的遍历数据方式为BFS广度遍历 2.当我们遇到一个‘1’的时候,我们就遍历他的左右上下(邻接点),如果是1那就入队,直到队列 为空为止。 3.我们记录每个岛屿的面积是采用 我们设置初始值为1,当每遇到一个邻…

『软件工程8』软件项目进度安排与跟踪,一招学会计算关键路径

项目进度安排与跟踪一、项目进度安排的定义及原则1、进度安排的定义2、进度安排的基本原则二、通信开销1、通信开销的定义2、通信路径计算3、案例分析三、工作量分配1、40-20-40规则2、工作量分配图例3、工作量分布推荐四、项目进度安排方法1、关键路径方法(CPM,Critical Path …

await,async 我要把它翻个底朝天,这回你总该明白了吧

一:背景1. 讲故事await,async 这玩意的知识点已经被人说的烂的不能再烂了,看似没什么好说的,但我发现有不少文章还是从理论上讲述了这两个语法糖的用法,懂得还是懂,不懂的看似懂了过几天又不懂了&#xff0…

栈在前端中的应用,顺便再了解下深拷贝和浅拷贝!

详解栈在前端中的应用一、栈是什么二、栈的应用场景三、前端与栈:深拷贝与浅拷贝1、JS数据类型(1)js数据类型的分类(2)js数据类型的定义和存储方式(3)js数据类型的判断方式2、深究浅拷贝和深拷贝…

计网课设 模拟实验拓扑

一:前言 幸福的是考完两科了,抽出时间赶紧赶赶课设,两周遇到了好多事,开心的,烦心的,一堆堆的压过来,但庆幸自己迷失不太久,又能继续学习了 二:实验概览 1:实验拓扑图 2:实验要求…

快醒醒,C# 9 中又来了一堆关键词 init,record,with

一:背景1. 讲故事.NET5 终于在 2020-08-25 也就是前天发布了第八个预览版,这么多的预览版搞得我都麻木了,接踵而来的就是更多的新特性加入到了 C# 9 中,既然还想呆在这条船上,得继续硬着头皮学习哈,这一篇跟…

7-1 字母统计图 (10 分)(思路+详解)

一&#xff1a;题目 摆放在面前的是一小段英文文章。 afeng希望你能帮他统计一下每个小写字母出现的次数。 最后再以柱状图的形式(参照输出样例)输出出来。 输入格式: 输入第一行为一个正整数N(N<100)&#xff0c;表示文章的行数。 随后为N行文本。 输出格式: 由若干行组…

了解js基础知识中的作用域和闭包以及闭包的一些应用场景,浅析函数柯里化

js基础知识中的作用域和闭包一、作用域1、作用域、自由变量简介&#xff08;1&#xff09;作用域定义&#xff08;2&#xff09;作用域实例演示&#xff08;3&#xff09;自由变量定义&#xff08;4&#xff09;自由变量实例演示2、作用域链简介&#xff08;1&#xff09;作用域…

张朝阳一天只睡4小时?不知道,反正我每天都睡足7小时

这是头哥侃码的第213篇原创周末&#xff0c;一个很久没联系过的朋友突然在微信上发给我一个链接。我打开一看&#xff0c;原来是搜狐老板张朝阳近日发表的一个有关睡眠的神论&#xff0c;大致是说他每天只睡四小时&#xff0c;白天状态还特别好&#xff0c;每天员工到公司的时候…

Istio 1.7——进击的追风少年

2020 年 8 月 21 日&#xff0c;Istio 发布了 1.7 版本。除了介绍新版本的主要更新内容外&#xff0c;本文会重点分析 Istio 团队在产品更新策略上的激进态度和举措。是稳扎稳打做好向后兼容&#xff0c;带给用户所承诺的易用性&#xff1b;还是快刀斩乱麻&#xff0c;做进击的…

7-2 港口审查 (15 分)

一:题目 afeng是一个港口的海关工作人员&#xff0c;每天都有许多船只到达港口&#xff0c;船上通常有很多来自不同国家的乘客。 afeng对这些到达港口的船只非常感兴趣&#xff0c;他按照时间记录下了到达港口的每一艘船只情况&#xff1b;对于第i艘到达的船&#xff0c;他记…

【BCVP更新】StackExchange.Redis 的异步开发方式

有哪些习惯坚持LESS IS MORE,SIMPLER IS BETTER THAN MORE你一定会有很大的收获各种小问题&#xff1f;如果你之前用过Redis的话&#xff0c;肯定会使用过StackExchange.Redis&#xff0c;我之前很久就用过&#xff0c;在.netfw的时候&#xff0c;当时并发还比较小&#xff0c;…

map容器实现一对多

一&#xff1a;需求描述 我们希望一个数字或则其他字符串可以对应 一串数&#xff0c; #include<iostream> #include<map> #include<vector> using namespace std; int main(){map<int,vector<int> > m;map<int,vector<int> >:: i…

解决异步问题,教你如何写出优雅的promise和async/await,告别callback回调地狱!

解决异步问题——promise、async/await一、单线程和异步1、单线程是什么2、为什么需要异步3、使用异步的场景二、promise1、promise的三种状态2、三种状态的表现和变化&#xff08;1&#xff09;状态的变化&#xff08;2&#xff09;状态的表现3、then和catch对状态的影响&…

使用 Visual Studio 2019 批量添加代码文件头

应用场景介绍在我们使用一些开源项目时&#xff0c;基本上都会在每个源代码文件的头部看到一段版权声明。一个项目或解决方案中源代码文件的个数少则几十&#xff0c;多则几千甚至更多&#xff0c;那么怎么才能给这么多文件方便地批量添加或者修改一致的文件头呢&#xff1f;在…

7-3 模板题 (10 分)(思路+详解)

一:题目 二&#xff1a;思路 1.读题读不懂&#xff0c;那就分析给出的示例&#xff0c;本题意思就是给出一串数&#xff0c;然后找出找出该元素之后&#xff0c;第一个大于 该元素的下标&#xff08;这一串数的下标是从一开始的&#xff09;如果找不到比起大的&#xff0c;那就…

提升对前端的认知,不得不了解Web API的DOM和BOM

了解Web API的DOM和BOM引言正文一、DOM操作1、DOM的本质2、DOM节点操作&#xff08;1&#xff09;property形式&#xff08;2&#xff09;attribute形式3、DOM结构操作&#xff08;1&#xff09;新增/插入节点&#xff08;2&#xff09;获取子元素列表&#xff0c;获取父元素&a…

Dapr微服务应用开发系列1:环境配置

题记&#xff1a;上篇Dapr系列文章简要介绍了Dapr&#xff0c;这篇来谈一下开发和运行环境配置本机开发环境配置安装Docker为了方便进行Dapr开发&#xff0c;最好&#xff08;其实不一定必须&#xff09;首先在本机&#xff08;开发机器&#xff09;上安装Docker。安装方式可以…