上一个Demo进行了单独的Jenkins远程部署, 本Demo将使用流行的Jenkins+Git+Docker进行持续部署.

准备Linux服务器

和上一篇Demo一样, 在Azure创建一台CentOS7服务器, 开放22端口供SSH使用, 并且开放了5000和5001端口.

安装DotNet Core

基于微软官方文档, SSH到服务器使用如下命令安装:

sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
sudo yum install dotnet-sdk-3.0

安装Docker

这一步是比之前多出来的, 因为这次我们要基于Docker进行持续部署, 根据官方文件:

# 卸载旧版本, 因为我是一台新的服务器, 这一步可以不做
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 安装需要用到的包
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
# 设置docker安装仓库地址
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
# 安装Docker社区版引擎
sudo yum install docker-ce docker-ce-cli containerd.io

配置Jenkins

有了上一篇Demo的基础, 这一次, 我们轻车熟路, 去配置添加一个Server即可.

构建项目

  1. 新建一个Freestyle Project, 名字随便起, 然后确定进入配置页.
  2. 在Source Code Management选择git, 并且在Repository URL填入如下地址:
https://gitee.com/jerryqi/JenkinsTest.git

和上次不一样的一点是, 上次是在本地构建, 然后上传编译后的代码到服务器运行, 而这次是直接把源代码上传到服务器交给Docker来构建, 实际上这里绕了一个圈, 因为我的Jenkins在本地, 所以是本地下载了Gitee的代码然后上传到服务器, 实际上, 如果把Jenkins安装到服务器就可以在服务器直接拉取Gitee代码然后执行Docker脚本构建.

  1. 在Build Environment进行如下操作:

    • 勾选Delete workspace before build starts
    • 勾选Send files or execute commands over SSH after the build runs, 填写信息如下:
Key Value
Name 默认选择了你之前配置的Server
Source files **
Exec command docker build -t jenkinstest .
docker run -d -p 80:5000 --name jenkinstestapp jenkinstest

因为在服务器上构建, 因此这里不写build选项卡, 当然也可以在本地构建, 那么相应的把Dockerfile改一改就好了.

在服务器上的docker构建可以参考我的另外一篇文章: 使用Docker-Compose编排发布.Net Core+Redis应用两个镜像到Docker

编写Dockerfile

因为这里在服务器上实现Docker来构建项目, 我们在项目根目录添加Dockerfile内容如下:

# 第一部分是编译并发布项目
# 以微软.Net Core SDK作为基础镜像, 并且以build作为别名
FROM mcr.microsoft.com/dotnet/core/sdk:3.0 AS build
# 切换build镜像工作目录到/app
WORKDIR /app
# 拷贝sln和csproj项目文件
COPY *.sln .
COPY JenkinsTest/*.csproj ./JenkinsTest/
# Restore项目用到的包
RUN dotnet restore
# 拷贝项目文件到镜像里面相应到目录
COPY JenkinsTest/. ./JenkinsTest/
# 切换build镜像工作目录到/app/AliPay
WORKDIR /app/JenkinsTest
# 以Release模式发布应用到out文件夹
RUN dotnet publish -c Release -o out
# 第二部分是启动项目
# 以微软.Net Core运行环境作为基础镜像, 并且以runtime作为别名
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime
# 切换runtime镜像工作目录到/app
WORKDIR /app
# 把build镜像里面编译出来的文件拷贝到runtime镜像
COPY --from=build /app/JenkinsTest/out ./
# 暴漏端口
EXPOSE 5000
# 启动应用
ENTRYPOINT ["dotnet", "JenkinsTest.dll"]

修正

这里跑第一遍的时候提示如下错误:

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

通过如下命令查看Docker daemon状态:

sudo service docker status
# ● docker.service - Docker Application Container Engine
# Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
# Active: inactive (dead)
# Docs: https://docs.docker.com

发现他的状态是inactive, 通过如下命令重启Docker:

sudo service docker restart

再次检查Docker daemon发现它变成了active. 但是再次构建是依然报上述错误.

这个时候我直接在服务器上运行docker images, 发现如下错误:

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/images/json: dial unix /var/run/docker.sock: connect: permission denied

这个很明显是没有权限的问题, 这里有两种解决方法:

  • 第一种当然是sudo, 简单暴力.
  • 还有第二种方法就给他添加权限, 我这里使用第二种:
sudo groupadd docker     #添加docker用户组
sudo gpasswd -a $USER docker #将登陆用户加入到docker用户组中
newgrp docker #更新用户组
docker imges #测试docker命令, OK

最后就是, 一定要勾选Abort the build if it's stuck, 然后把超时时间改长一点, 因为第一次要拉取镜像, 默认的三分钟是不够用的.

然后Build now, 因为我把docker的5000端口映射到了服务器的80端口, 所以直接访问服务器IP即可访问成功, 大功告成!大功告成!大功告成!

jenkins publish .net core application to linux server in docker的更多相关文章

  1. jenkins publish .net core application to linux server

    最近学习Docker与Jenkins, 网上大部分都是关于Jenkins+Git+Docker进行持续远程部署, 我一直在考虑为什么Jenkins和Docker要绑定一块使用, 因为我想单独使用Jen ...

  2. 【asp.net core】Publish to a Linux-Ubuntu 14.04 Server Production Environment

    Submary 又升级了,目录结构有变化了 . project.json and Visual Studio 2015 with .NET Core On March 7, 2017, the .NE ...

  3. ASP.NET Core 实战:Linux 小白的 .NET Core 部署之路

    一.前言  最近一段时间自己主要的学习计划还是按照毕业后设定的计划,自己一步步的搭建一个前后端分离的 ASP.NET Core 项目,目前也还在继续学习 Vue 中,虽然中间断了很长时间,好歹还是坚持 ...

  4. Windows系统下使用Jenkins 自动发布 .NET core到Linux平台下Docker

    准备工作(安装过程可以百度,已安装的可以跳过) a)     安装Jenkins,安装包下载地址:http://mirrors.tuna.tsinghua.edu.cn/jenkins/windows ...

  5. 用VSCode开发一个基于asp.net core 2.0/sql server linux(docker)/ng5/bs4的项目(1)

    最近使用vscode比较多. 学习了一下如何在mac上使用vscode开发asp.netcore项目. 这里是我写的关于vscode的一篇文章: https://www.cnblogs.com/cgz ...

  6. .NET Core部署到linux(CentOS)最全解决方案,入魔篇(使用Docker+Jenkins实现持续集成、自动化部署)

    通过前面三篇: .NET Core部署到linux(CentOS)最全解决方案,常规篇 .NET Core部署到linux(CentOS)最全解决方案,进阶篇(Supervisor+Nginx) .N ...

  7. .NET Core部署到linux(CentOS)最全解决方案,高阶篇(Docker+Nginx 或 Jexus)

    在前两篇: .NET Core部署到linux(CentOS)最全解决方案,常规篇 .NET Core部署到linux(CentOS)最全解决方案,进阶篇(Supervisor+Nginx) 我们对. ...

  8. ASP.NET Core MVC 在linux上的创建及发布

    前言 ASP.NET core转眼都发布半月多了,社区最近也是非常活跃,虽然最近从事python工作,但也一直对.NET念念不忘,看过了园区大神们搭建的Asp.net core项目之后,自己也是跃跃欲 ...

  9. ASP.NET Core 发布至Linux生产环境 Ubuntu 系统

    ASP.NET Core 发布至Linux生产环境 Ubuntu 系统,之前跟大家讲解了 dotnet publish 发布,而没有将整个系统串起来. 今天就跟大家综合的讲一下ASP.NET Core ...

随机推荐

  1. Atcoder Grand Contest 026 (AGC026) F - Manju Game 博弈,动态规划

    原文链接www.cnblogs.com/zhouzhendong/AGC026F.html 前言 太久没有发博客了,前来水一发. 题解 不妨设先手是 A,后手是 B.定义 \(i\) 为奇数时,\(a ...

  2. SVN优于CVS之处

    1.原子提交.一次提交不管是单个还是多个文件,都是作为一个整体提交的.在这当中发生的意外例如传输中断,不会引起数据库的不完整和数据损坏. 2.重命名.复制.删除文件等动作都保存在版本历史记录当中. 3 ...

  3. [luogu 3773][CTSC 2017]吉夫特

     传送门  Solution 输入一个长度为n的数列,求有多少个长度大等于2的不上升子序列满足: \[\prod_{i=2}^{k} C(a_{b_{i-1}},a_{b_i}) mod\ 2 > ...

  4. MySQL之级联删除、级联更新、级联置空

    1. 准备测试表 # 专业表major ))engine=innodb default charset=utf8; # 学生表mstudent ), major int)engine=innodb d ...

  5. 前端 MV*框架的意义

    早期前端都是比较简单,基本以页面为工作单元,内容以浏览型为主,也偶尔有简单的表单操作,基本不太需要框架. 随着 AJAX 的出现,Web2.0的兴起,人们可以在页面上可以做比较复杂的事情了,然后前端框 ...

  6. GPS 经纬度

      经纬度地图: http://www.gpsspg.com/maps.htm http://www.gzhatu.com/dingwei.html 经纬度格式转化 http://www.gzhatu ...

  7. java MVEL2/Spring EL表达式、直接调用、反射性能实测

    import java.io.Serializable; import java.lang.reflect.Field; import java.util.HashMap; import java.u ...

  8. GIS地理工具案例教程——批量去除多边形的重叠部分

    GIS地理工具案例教程--批量去除多边形的重叠部分 商务合作,科技咨询,版权转让:向日葵,135-4855__4328,xiexiaokui#qq.com 问题:几乎所有的手工生产的数据,都存在多边形 ...

  9. h2的时间类型和函数

    H2时间类型: (时间)TIME: 格式为 hh:mm:ss.对应到Java类型:java.sql.Time. (日期)DATE: 格式为 yyyy-MM-dd.对应到Java类型: java.sql ...

  10. Python3基础 函数 多值参数 元组与字典形式(键值对分别指出)

             Python : 3.7.3          OS : Ubuntu 18.04.2 LTS         IDE : pycharm-community-2019.1.3    ...