本地Docker Jenkins构建dotnet core web应用到Linux服务器 Docker上
1、准备工作
环境
- 本地:
Windows
、Docker
- 代码仓库:
Git
- 服务器:
Linux
、Docker
前提准备
创建个有
dockerfile
文件的dotnet core 3 web
项目
新建一个dotnet 3.0的web项目,在项目文件夹添加Dockerfile文件,内容如下:
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
COPY . .
ENTRYPOINT ["dotnet", "WebApplication.dll"]
```
2. 准备git仓库,将项目的代码上传上去
3. 构建有dotnet core 3.0 环境
的jenkins
```powershell
FROM jenkins/jenkins:lts
切换root用户安装东西
USER root
Show distro information!
RUN uname -a && cat /etc/*release
RUN apt-get update
RUN apt-get install -y curl libunwind8 gettext apt-transport-https
RUN curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
RUN mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg
RUN sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-debian-stretch-prod stretch main" > /etc/apt/sources.list.d/dotnetdev.list'
RUN apt-get update
RUN apt-get install -y dotnet-sdk-3.1
切换回来jenkins用户
USER jenkins
```
因为jenkins里面是没有dotnetcore环境的,所以需要本地创建个支持dotnetcore环境的。
找个地方新建文件夹,创建dockerfile文件,内容如上。
4. build镜像并运行容器
```powershell
docker build . -t jenkins_dotnet
```
> 这里等待时间会比较长~
```powershell
运行刚刚构建好的容器
docker run -d --name jenkins -p 8080:8080 jenkins_dotnet
```
打开jenkins,安装推荐插件
打开 localhost:8080 ,可以看到
docker exec -it jenkins bash
dotnet --version
cat /var/jenkins_home/secrets/initialAdminPassword
```
<img style="width:500px;" src="https://img2018.cnblogs.com/blog/1624324/201912/1624324-20191208124555303-170629763.png" />
把密码复制出来登录,点击`左边按钮`安装推荐插件
<img style="width:500px;" src="https://img2018.cnblogs.com/blog/1624324/201912/1624324-20191208203620027-1679218834.png" />
> 这里时间也会比较长,如果有部分安装失败了,等剩余的安装完后点击重试即可,如果服务器上还没有docker,现在可以去装下,装了的也可以连上服务器,去执行`docker pull mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim`拉取下dotnet core 3.1的镜像,等会创建镜像的时候就会快一点啦
插件安装完后,会有一些创建管理员和地址配置,搞一下吧。
<img style="width:500px;" src="https://img2018.cnblogs.com/blog/1624324/201912/1624324-20191208150033306-489017996.png" />
> 如果有插件安装失败,点过重试安装插件的,现在需要`docker restart jenkins`重启下应用,然后重新打开[localhost:8080](http://localhost:8080)使用创建的管理员登录。
2、搞好了,开始干活
哦,还有些需要安装的插件 =.=||
需要安装的插件:
- SCP publisher
- Publish Over SSH
- Environment Injector
进入 系统管理>插件管理->可选插件->输入插件名称->勾选需要插件->点击安装
安装完后,设置下这些插件,进入系统管理->系统配置,
SCP publisher
设置
Ctrl + F 搜下SCP
找到SCP repository hosts
-SCP sites
设置位置,点新增
HostName: 服务器IP地址
Port:端口,默认22、
Root Repository Path:文件存放目录
User Name:登录用户名
Password/Passphrase:密码
Publish Over SSH
设置
Ctrl + F 搜下SCP
找到SCP repository hosts
-SSH Server
设置位置,点新增
再点高级
,勾选上Use password authentication, or use a different key
Name:名称
Hostname:服务器IP地址
Username:登录用户名
Remote Directory:远程目录
Passphrase / Password:密码
Port:连接端口(默认22)
配置完后别忘记点保存。
创建构建任务第一种:自由风格的软件项目
点击新建任务
, 选择构建一个自由风格的软件项目
源码管理设置
选择Git,在Repository URL
填入Git仓库地址
触发构建器
可以配置一些定时构建等,我这里只是测试所以没有选择触发器。
构建环境
- 勾选
Delete workspace before build starts
- 勾选Inject environment variables to the build process,存放构建是需要用到的环境变量
- 勾选
构建- 添加执行shell步骤
增加构建步骤-执行shell,脚本如下:
切换目录
cd ./WebApplication
还原nuget包
dotnet restore
编译
dotnet build
删除之前发布文件
cd ./bin
rm -rf web-publish
rm -f web-publish.tar
cd ..
发布
dotnet publish -o ./bin/web-publish
删除配置文件
cd ./bin/web-publish
cp ../../Dockerfile .
rm -rf config
cd ..
压缩
tar -cvf web-publish.tar web-publish
```
构建后步骤
上传文件到服务器
增加构建后操作步骤
-选择Publish artifacts to SCP Repository
,填入需要上传的压缩文件
这里文件目录的基础目录是workspace,如果不知道具体的地址,可以先不创建构建后步骤保存下,然后点击立即构建,等待成功后,点击工作空间看下文件路径是怎样的,比如我的是这样的:
得到压缩文件目录是WebApplication/bin/web-publish.tar
添加 服务器上要执行的shll命令 步骤
增加构建后操作步骤
- 选择Send build artifacts over SSH
这里要新增两个Transfers Set,在第一个
Transfers
的Exec command
输入创建镜像脚本:
工作目录
WORK_DIR="/root/publish/WebApplication";
cd ${WORK_DIR}
删除原有发布文件夹
rm -rf web-publish;
解压
tar -xvf web-publish.tar;
删除文件压缩包
rm -f web-publish.tar;
切换生成目录
cd web-publish/
备份镜像
停止容器
docker stop ${DOCKER_CONTAINER_NAME};
删除容器
docker rm ${DOCKER_CONTAINER_NAME};
删除镜像
docker rmi $(docker images | grep ${DOCKER_IMAGE_NAME});
创建镜像
docker build -t ${DOCKER_IMAGE_NAME} ./;
```
在第二个`Transfers`的`Exec command`,输入运行容器命令:
```powershell
运行容器
docker run -d -p 8001:80 --name ${DOCKER_CONTAINER_NAME} ${DOCKER_IMAGE_NAME}
```
![](https://img2018.cnblogs.com/blog/1624324/201912/1624324-20191208202346480-2044067851.png)
> 到这里所有的设置都已经搞好啦,`别忘记点击保存`,点击`立即构建` 测试一下吧~
创建构建任务第二种:流水线[pipeline]
TODO:评论有位哥推荐流水线 可视化会好一点,马上动手尝试下~
首先创建任务,选择流水线:
与自由风格的一样也有触发器。
然后就没看到有其他设置有点懵
本地Docker Jenkins构建dotnet core web应用到Linux服务器 Docker上的更多相关文章
- 2017-03-05 CentOS中配置守护服务(Supervisor)监听dotnet core web程序的运行
我们继续解决上篇博客的问题,我这个人有个毛病,不喜欢遗留什么问题,也不喜欢问题说不明白,具体要怎么解决一定要详尽,因为经常自己遇到问题的时候,去翻别人的博客,就会遇到这样的问题,很苦恼,又说废话了. ...
- 2017-03-05 CentOS中结合Nginx部署dotnet core Web应用程序
Visual Studio Live 倒计时2天,当然这是美国倒计时两天,中国应该是在3月8日的凌晨,正值"3.8妇女节".提前祝广大的女性同志节日快乐,当然还有奋斗在一线的程序媛 ...
- Docker 发布 Abp net core web 服务
Docker 发布 Abp net core web 服务 准备工作:Abp 项目,这个是模板下载地址 https://aspnetboilerplate.com/Templates (本例使用的是S ...
- [C#]使用 C# 代码实现拓扑排序 dotNet Core WEB程序使用 Nginx反向代理 C#里面获得应用程序的当前路径 关于Nginx设置端口号,在Asp.net 获取不到的,解决办法 .Net程序员 初学Ubuntu ,配置Nignix 夜深了,写了个JQuery的省市区三级级联效果
[C#]使用 C# 代码实现拓扑排序 目录 0.参考资料 1.介绍 2.原理 3.实现 4.深度优先搜索实现 回到顶部 0.参考资料 尊重他人的劳动成果,贴上参考的资料地址,本文仅作学习记录之用. ...
- 2017-03-04 dotnet core网站发布到Linux系统中
今天开始学习dotnet core的开发,距离Visual Stuio 2017正式版的发布,也就是VS20周岁的生日还有三天,在我的电脑上安装的是VS2017 Enterprise RC版, 在VS ...
- 一个简单的QQ隐藏图生成算法 通过jQuery和C#分别实现对.NET Core Web Api的访问以及文件上传
一个简单的QQ隐藏图生成算法 隐藏图不是什么新鲜的东西,具体表现在大部分社交软件中,预览图看到的是一张图,而点开后看到的又是另一张图.虽然很早就看到过这类图片,但是一直没有仔细研究过它的原理,今天 ...
- ASP.NET Core 网站发布到Linux服务器(转)
出处;ASP.NET Core 网站发布到Linux服务器 长期以来,使用.NET开发的应用只能运行在Windows平台上面,而目前国内蓬勃发展的互联网公司由于成本的考虑,大量使用免费的Linux平台 ...
- NET Core站点部署到Linux服务器
.NET跨平台之旅:将QPS 100左右的ASP.NET Core站点部署到Linux服务器上 今天下午我们将生产环境中一个单台服务器 QPS(每秒请求数)在100左右的 ASP.NET Core 站 ...
- .Net Core Linux centos7行—jenkins linux 构建.net core web app
1.安装jdk.jenkins 是一个java web程序.所以必然需要jdk. yum install java 或者 yum install java-1.8.0-openjdk 2.下载jenk ...
随机推荐
- [考试反思]0924csp-s模拟测试51:破碎
总参赛人数:15 有点菜. 不知道是撞了什么大运没有滚出A层. 但是一回到A层就暴露出了一个大问题:码速. 不是调试速度,,就是纯粹码的速度... 边讲考试状态边说吧... 上来肝T1.一看,是个换根 ...
- 「刷题」可怜与STS
又是一道假期望,我们发现一共有$ C_{2n}^m $种情况. 而$ \frac{(2n)!}{m!(2n-m)!}=C_{2n}^m $ 其实结果就是各个情况总伤害. 1.10分算法,爆搜10分. ...
- P4568 [JLOI2011]飞行路线(分层图)
机房dalao推荐写的...(标签分层图) 经过前几题的分层图的洗礼,我深刻地体会到了分层图的优点和好处(主要是不想打dp....) 先说题吧.... 很明确,模型是最短路,但是,怎么跑k个,是个问题 ...
- Android Drawable 简析
Drawable 是开发中经常用到的一个概念,我们经常用它去设置 View 的背景,背景可以一个颜色值,也可以是一张资源图片,还可以是一个自定义的 Drawable等等.这篇文章就简单说下 Drawa ...
- 最新JetBrainsPyCharm自动部署Python(Django,tornado等)项目至远程服务器
每次开发Python项目时,对于所有Python开发人员来说,最枯燥的不是修改代码,而是实时将自己的代码上传至远程服务器,进行测试或者部署,本人最初开发也是这样,通过使用Xshell 5,WinSCP ...
- python_day2(列表,元组,字典,字符串)
1.bytes数据类型 msg = '我爱北京天安门' print(msg.encode(encoding="utf-8")) print(msg.encode(encoding= ...
- jquery 数字滚动方法
jquery 数字滚动方法用的是countUp.js这个插件 target = 目标元素的 ID:startVal = 开始值:endVal = 结束值:decimals = 小数位数,默认值是0:d ...
- Geotools求shapefile路网中任意两点之间最短路径的距离
前言:之前在博问求助过这个问题.经过几天的思考,算是解决了(但仍有不足),另一方面对Geotools不是很熟,有些描述可能不正确,希望大家批评指正. 问题:作为一个新手,我并没有发现Geotools中 ...
- SpringBoot Web篇(二)
摘要 继上一篇 SpringBoot Web篇(一) 文件上传 当我们服务器需要接收用户上传的文件时,就需要使用MultipartFile作为参数接收文件.如下: @PostMapping(" ...
- ajax传出数组到后台
var vote = new Array(); $("input[name='option_name']").each(function(i){ if($(th ...