1、准备工作

环境

  • 本地: WindowsDocker
  • 代码仓库:Git
  • 服务器:LinuxDocker

前提准备

  1. 创建个有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

```

  1. 打开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

进入 系统管理>插件管理->可选插件->输入插件名称->勾选需要插件->点击安装

安装完后,设置下这些插件,进入系统管理->系统配置,

  1. SCP publisher设置

    Ctrl + F 搜下 SCP找到SCP repository hosts-SCP sites设置位置,点新增

    HostName: 服务器IP地址

    Port:端口,默认22、

    Root Repository Path:文件存放目录

    User Name:登录用户名

    Password/Passphrase:密码

  2. 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)

配置完后别忘记点保存。

创建构建任务第一种:自由风格的软件项目

点击新建任务, 选择构建一个自由风格的软件项目

  1. 源码管理设置

    选择Git,在Repository URL填入Git仓库地址

  2. 触发构建器

    可以配置一些定时构建等,我这里只是测试所以没有选择触发器。

  3. 构建环境

    1. 勾选Delete workspace before build starts
    2. 勾选Inject environment variables to the build process,存放构建是需要用到的环境变量

  4. 构建- 添加执行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

```

  1. 构建后步骤

    1. 上传文件到服务器

      增加构建后操作步骤-选择Publish artifacts to SCP Repository ,填入需要上传的压缩文件



      这里文件目录的基础目录是workspace,如果不知道具体的地址,可以先不创建构建后步骤保存下,然后点击立即构建,等待成功后,点击工作空间看下文件路径是怎样的,比如我的是这样的:



      得到压缩文件目录是WebApplication/bin/web-publish.tar

    2. 添加 服务器上要执行的shll命令 步骤

    增加构建后操作步骤- 选择 Send build artifacts over SSH

    这里要新增两个Transfers Set,在第一个TransfersExec 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上的更多相关文章

  1. 2017-03-05 CentOS中配置守护服务(Supervisor)监听dotnet core web程序的运行

    我们继续解决上篇博客的问题,我这个人有个毛病,不喜欢遗留什么问题,也不喜欢问题说不明白,具体要怎么解决一定要详尽,因为经常自己遇到问题的时候,去翻别人的博客,就会遇到这样的问题,很苦恼,又说废话了. ...

  2. 2017-03-05 CentOS中结合Nginx部署dotnet core Web应用程序

    Visual Studio Live 倒计时2天,当然这是美国倒计时两天,中国应该是在3月8日的凌晨,正值"3.8妇女节".提前祝广大的女性同志节日快乐,当然还有奋斗在一线的程序媛 ...

  3. Docker 发布 Abp net core web 服务

    Docker 发布 Abp net core web 服务 准备工作:Abp 项目,这个是模板下载地址 https://aspnetboilerplate.com/Templates (本例使用的是S ...

  4. [C#]使用 C# 代码实现拓扑排序 dotNet Core WEB程序使用 Nginx反向代理 C#里面获得应用程序的当前路径 关于Nginx设置端口号,在Asp.net 获取不到的,解决办法 .Net程序员 初学Ubuntu ,配置Nignix 夜深了,写了个JQuery的省市区三级级联效果

    [C#]使用 C# 代码实现拓扑排序   目录 0.参考资料 1.介绍 2.原理 3.实现 4.深度优先搜索实现 回到顶部 0.参考资料 尊重他人的劳动成果,贴上参考的资料地址,本文仅作学习记录之用. ...

  5. 2017-03-04 dotnet core网站发布到Linux系统中

    今天开始学习dotnet core的开发,距离Visual Stuio 2017正式版的发布,也就是VS20周岁的生日还有三天,在我的电脑上安装的是VS2017 Enterprise RC版, 在VS ...

  6. 一个简单的QQ隐藏图生成算法 通过jQuery和C#分别实现对.NET Core Web Api的访问以及文件上传

    一个简单的QQ隐藏图生成算法   隐藏图不是什么新鲜的东西,具体表现在大部分社交软件中,预览图看到的是一张图,而点开后看到的又是另一张图.虽然很早就看到过这类图片,但是一直没有仔细研究过它的原理,今天 ...

  7. ASP.NET Core 网站发布到Linux服务器(转)

    出处;ASP.NET Core 网站发布到Linux服务器 长期以来,使用.NET开发的应用只能运行在Windows平台上面,而目前国内蓬勃发展的互联网公司由于成本的考虑,大量使用免费的Linux平台 ...

  8. NET Core站点部署到Linux服务器

    .NET跨平台之旅:将QPS 100左右的ASP.NET Core站点部署到Linux服务器上 今天下午我们将生产环境中一个单台服务器 QPS(每秒请求数)在100左右的 ASP.NET Core 站 ...

  9. .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 ...

随机推荐

  1. [考试反思]1107csp-s模拟测试104: 速度

    20分钟能做什么? 不粘排行榜,没意义,第一机房集体重启,我侥幸找回了两个文件才有分. 实际得分应该是70+100+60,第二机房rank1...放在第一机房就不知道了 T1:中间值 比较喜欢题解的第 ...

  2. NOIP模拟 38

    liu_runda的题! 错过辽QAQ T1虽然没用题解的损益法,但是用高精%还能过.. 没想到敲完就过编译了,还以为要调一天呢 高精度的阴影没了- T2的思路很巧妙 首先一个区间最多有一种颜色占一半 ...

  3. net core WebApi——April.Util更新之权限

    目录 前言 权限 中间层 小结 前言 在之前已经提到过,公用类库Util已经开源,目的一是为了简化开发的工作量,毕竟有些常规的功能类库重复率还是挺高的,二是为了一起探讨学习软件开发,用的人越多问题也就 ...

  4. Java自动化测试框架-10 - TestNG之测试结果篇

    1.-测试结果 1.1-成功,失败和断言 测试被认为是成功的,如果它不引发任何异常完成,还是它扔的预期异常(请参阅文档expectedExceptions属性上找到的@Test注释). 您的测试方法通 ...

  5. csps模拟测试57

    T1 天空龙 大神题,考察多方面知识,例如:快读 附上考试代码,以供后人学习 应某迪要求,我决定多写一点. 正如文化课有知识性失分和非知识性失分一样,OI也同样存在. 但非知识性失分往往比知识性失分更 ...

  6. ie浏览器兼容性的入门解决方案

    IE浏览器的兼容性素来是令人头疼的问题,大名鼎鼎的FUCK-IE不是浪得虚名的. 这里使用的解决方案是HACK,具体原理就是针对不同的浏览器写不同的HTML.CSS样式,从而使各种浏览器达到一致的渲染 ...

  7. mongodb定时删除数据(索引删除)

    一 简介:本文介绍创建自动删除数据的TTL索引 二 目的 定时删除数据三 创建方法   db.collection.createIndex(keys, options)   options:   ex ...

  8. 012.Kubernetes二进制部署worker节点Flannel

    一 部署flannel 1.1 安装flannel kubernetes 要求集群内各节点(包括 master 节点)能通过 Pod 网段互联互通.flannel 使用 vxlan 技术为各节点创建一 ...

  9. element 动态合并表格

    前言 element 官方的例子太简单了,不满足实际的需求 数据肯定是动态的,合并的行数,列数都是动态的,该如何知道每一行的合并数呢 需求 动态合并表格,数据来源于数据库 正文 一开始,我的数据源是单 ...

  10. Spring Boot2 系列教程(二十四)Spring Boot 整合 Jpa

    Spring Boot 中的数据持久化方案前面给大伙介绍了两种了,一个是 JdbcTemplate,还有一个 MyBatis,JdbcTemplate 配置简单,使用也简单,但是功能也非常有限,MyB ...