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编排或者其他的知识点,等待视频的时候再说吧。

使用Jenkins来发布和代理.NetCore项目相关推荐

  1. 升级jenkins 导致jenkins启动失败_升级Jenkins:发布和代理 VUE 项目

    (海上生明月,_ _ _ _ _) 书接上回,在之前的几篇文章中,我们主要通过几篇文章来讲解了如何通过一个镜像,快速的创建Jenkins容器实例,然后搭建我们的持续集成和持续部署的平台,相关的文章呢如 ...

  2. Docker中安装Jenkins实时发布.net core 项目(二)

    Docker中安装Jenkins实时发布.net core 项目 防坑点 升级docker jenkins运行 运行命令 jenkins拉取git并构建项目 其他 查看发布文件 防坑点 升级docke ...

  3. Docker中安装Jenkins实时发布.net core 项目(一)

    Docker中安装Jenkins实时发布.net core 项目 安装docker 懒人篇 手动安装 dockerfile安装jenkins 常规安装jenkins jenkins的安装 搜索jenk ...

  4. my.ini修改后服务无法启动_教你发布vue+.netCore项目到服务器

    最近一直在做项目,发布部署的事情都是同事或者老大做的,无奈什么事都要自己尝试经历后才能记住,所以发布的事情轮到我了,由于是第一次发布部署项目到一个新的服务器环境,难免会遇到各种各样的问题,总结下来,希 ...

  5. 2 snippets vue 修改配置_教你发布vue+.netCore项目到服务器

    最近一直在做项目,发布部署的事情都是同事或者老大做的,无奈什么事都要自己尝试经历后才能记住,所以发布的事情轮到我了,由于是第一次发布部署项目到一个新的服务器环境,难免会遇到各种各样的问题,总结下来,希 ...

  6. 6.Jenkins-代码更新Jenkins自动发布项目

    代码更新Jenkins自动发布项目 目的:实现开发一提交,jenkins就自动发布,无需人工干预 1.找到对应的项目,然后找到构建触发器 勾选 Build when a change is pushe ...

  7. Jenkins定时发布项目

    Jenkins定时发布项目 1. 配置触发器 2. 设置构建环境 3. Jekins调用脚本输出回显问题 3.1测试脚本 3.2 回显情况测试 3.3 输出到指定位置 1. 配置触发器 字段 说明 范 ...

  8. Jenkins+Gitlab+Nginx+Maven编译Java项目自动发布与基于tag版本回退(重复构建问题已解决)

    实现流程: 手动部署Java项目至后端Web集群 1.搭建Nginx+Tomcat集群架构. 2.开发提交Java源代码至Gitlab仓库. 3.手动获取Java源代码,然后使用Maven进行编译. ...

  9. Linux下Jenkins与GitHub自动构建NetCore与部署

    今天我们来谈谈NetCore在Linux底下的持续集成与部署.NetCore我就不多介绍了,持续集成用的是Jenkins,源代码管理器用的是GitHub.我们就跟着博文往下走吧. 1.Linux环境 ...

最新文章

  1. 软件测试培训分享:做软件测试工作如何清楚的描述一个bug
  2. android自定义tab下划线变大,Android开发之设置TabLayout下方下划线的宽度
  3. 编程之法:面试和算法心得
  4. golang 返回值报错 cannot use nil as type string in return argument
  5. 提高C程序效率的10种方法
  6. Java并发ReadWriteLock接口
  7. python下载后是黑的_python下载文件记录黑名单的实现代码
  8. C++之undefined reference to “ssl::first::first()“
  9. jzoj4229-学习神技【逆元,费马小定理】
  10. opencv 直方图均等化
  11. 剑指offer面试题[60]-将二叉树打印成多行
  12. Word2003中Visio2003图打印错误的解决方法
  13. ASUS AURA无法启动问题
  14. 如何从产品和技术角度上做一个好产品----软件公司如何开源节流(二)
  15. dubbo之failed to connect to server /xx.xx.xx.xx:20880 client-side timeout问题解决
  16. c语言编辑二维数组转置,求C语言程序:编写一个函数,使给定的一个二维数组(3*3)转置。感激不尽...
  17. 打开html自动播放音乐,如何使背景音乐在打开网页时就自动播放
  18. Kali中MSF利用永恒之蓝(复现、演示)
  19. 新浪微博开放平台开发总结
  20. php notice undefined variable,PHP错误提示,Notice: Undefined variable

热门文章

  1. 石子归并 51Nod - 1021
  2. 解决java.lang.NoClassDefFoundError: org/aopalliance/intercept/MethodInterceptor问题
  3. js实现排序去重计算字符次数
  4. tcp/ip ---数据封装过程
  5. ZGY的Excel特征提取器初期版本完成
  6. Mac OS使用技巧十八:Safari碉堡功能之一制作Widget
  7. keep-alive使用_如何使用Google Keep进行无忧笔记
  8. Redis 通配符批量删除key
  9. 016-Spring Boot JDBC
  10. Linux Tomcat8 启动堆内存溢出