jenkins publish .net core application to linux server in docker

上一个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即可访问成功, 大功告成!大功告成!大功告成!

原文地址:https://www.cnblogs.com/jerryqi/p/11785604.html

时间: 2024-08-29 13:50:00

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

jenkins publish .net core application to linux server

最近学习Docker与Jenkins, 网上大部分都是关于Jenkins+Git+Docker进行持续远程部署, 我一直在考虑为什么Jenkins和Docker要绑定一块使用, 因为我想单独使用Jenkins进行本地构建然后远程部署, 那么这就开始行动. 准备Linux服务器 我在Azure创建了一台CentOS7服务器, 开放22端口供SSH使用, 并且开放了5000和5001端口. 安装DotNet Core 基于微软官方文档, SSH到服务器使用如下命令安装: sudo rpm -Uvh

【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 .NET Core and ASP.NET Core documentation was updated for the release of Visual Studio 2017. The previous version of the documentation used Visual Studio

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

 一.前言  最近一段时间自己主要的学习计划还是按照毕业后设定的计划,自己一步步的搭建一个前后端分离的 ASP.NET Core 项目,目前也还在继续学习 Vue 中,虽然中间断了很长时间,好歹还是坚持下来了,嗯,看了看时间,原本决定的半年完成肯定是完不成了.这两周重新拾起来学习 Vue,文章也在慢慢的更新中,这一篇文章主要是想提前试试水将 ASP.NET Core 部署到 Linux Server 上,原本的打算是把毕业设计就部署到 Linux 上,最终也未能成行,究其原因,还是自己太懒太拖了

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

前言 ASP.NET core转眼都发布半月多了,社区最近也是非常活跃,虽然最近从事python工作,但也一直对.NET念念不忘,看过了园区大神们搭建的Asp.net core项目之后,自己也是跃跃欲试,准备搞一下ASP.NET Core mvc的创建和部署,于是便有了这篇文章,希望能够帮助到你. 环境准备 这是我的开发环境,使用的nginx是nginx 1.6.3 直接yum install,然后需要安装dotnet环境,可以参照官网教程https://www.microsoft.com/ne

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

ASP.NET Core 发布至Linux生产环境 Ubuntu 系统,之前跟大家讲解了 dotnet publish 发布,而没有将整个系统串起来. 今天就跟大家综合的讲一下ASP.NET Core发布至Linux生产环境. 开发及发布环境:WIN10 x64  生产Linux环境:Ubuntu 14.04 发布的示例代码: https://github.com/linezero/NETCoreBBS 代码下载下来,首先请注释 Program.cs 中 .UseUrls("http://*:8

Core 发布至Linux

ASP.NET Core 发布至Linux生产环境 Ubuntu 系统 ASP.NET Core 发布至Linux生产环境 Ubuntu 系统,之前跟大家讲解了 dotnet publish 发布,而没有将整个系统串起来. 今天就跟大家综合的讲一下ASP.NET Core发布至Linux生产环境. 开发及发布环境:WIN10 x64  生产Linux环境:Ubuntu 14.04 发布的示例代码: https://github.com/linezero/NETCoreBBS 代码下载下来,首先请

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

NET Core MVC 在linux上的创建及发布 前言 ASP.NET core转眼都发布半月多了,社区最近也是非常活跃,虽然最近从事python工作,但也一直对.NET念念不忘,看过了园区大神们搭建的Asp.net core项目之后,自己也是跃跃欲试,准备搞一下ASP.NET Core mvc的创建和部署,于是便有了这篇文章,希望能够帮助到你. 环境准备 这是我的开发环境,使用的nginx是nginx 1.6.3 直接yum install,然后需要安装dotnet环境,可以参照官网教程h

What Do WebLogic, WebSphere, JBoss, Jenkins, OpenNMS, and Your Application Have in Common?

What? The most underrated, underhyped vulnerability of 2015 has recently come to my attention, and I'm about to bring it to yours. No one gave it a fancy name, there were no press releases, nobody called Mandiant to come put out the fires. In fact, e

ORACLE Install (10g r2) FOR Red Hat Enterprise Linux Server release 5.5 (64 bit) (转)

OS Info----------# cat /etc/redhat-releaseRed Hat Enterprise Linux Server release 5.5 (Tikanga)# cat /etc/issue.netRed Hat Enterprise Linux Server release 5.5 (Tikanga)Kernel r on an m# uname -rm2.6.18-194.el5 x86_64# echo $MACHTYPEx86_64-redhat-linu