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. 【XSY2484】mex

    Description 给你一个无限长的数组,初始的时候都为0,有3种操作: 操作1是把给定区间[l,r] 设为1, 操作2是把给定区间[l,r] 设为0, 操作3把给定区间[l,r] 0,1反转. ...

  2. SpringBoot系列:Spring Boot定时任务Spring Schedule

    Spring Schedule是Spring提供的定时任务框架,相较于Quartz,Schedule更加简单易用,在中小型应用中,对于大部分需求,Schedule都可以胜任. 一.Spring Sch ...

  3. android 7.0 pm install 失败问题

    这两天,把app内置成系统文件或者系统签名取得系统权限,发现使用pm install path在低版本上可行,在高版本就安装失败 抛出 NullPointException,查看了一下源码,发现对包名 ...

  4. dp的林林总总(持续更新,dp骚气解法等等)

    写在前面: 本人dp较弱,所以总结了一些坑点,转化思路以供复习使用,勿喷,甚至一些不是dp的题(贪心等等)也会放在这. 每个点后面会有我自己的题解,如果没有链接,向下找第一个链接,可能会有多题. 1. ...

  5. Docker实战总结

    >>> 目录 <<< Docker简介 Docker优势 Docker基本概念 Docker安装使用 Docker常用命令 Docker镜像构建 Docker本地仓 ...

  6. 手写jwt验证,实现java和node无缝切换

    前言 前端时间和我朋友写了一个简易用户管理后台,功能其实很简单,涉及到的技术栈有:vue+elementUI,java+spring MVC以及node+egg,数据库用的mysql,简单方便. 一开 ...

  7. C语言程序设计100例之(4):水仙花数

    例4    水仙花数 题目描述 一个三位整数(100-999),若各位数的立方和等于该数自身,则称其为“水仙花数”(如:153=13+53+33),找出所有的这种数. 输入格式 没有输入 输出格式 若 ...

  8. Python类属性与实例属性理解

    按理讲,类属性改变,类的实例对象这个属性也应该被改变,但是在python中实际却不是这样 class test(): name = 111 a = test() b = test() a.name = ...

  9. ios jquery css('left')无法读取属性解决的方法

    ios jquery css('left')无法读取属性解决的方法 <pre>$(this).position().left因为display:none状态下是读取不了 $(this).o ...

  10. Linux 解决ntfs文件系统问题,支持外设(U盘等设备)的即插即拔

    # rpm -q fuse //查看这个软件有没有安装,一般安装系统都会装(最小安装例外) fuse-2.9.2-10.el7.x86_64 # yum -y install gcc # wget h ...