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即可.
构建项目
- 新建一个Freestyle Project, 名字随便起, 然后确定进入配置页.
- 在Source Code Management选择git, 并且在Repository URL填入如下地址:
https://gitee.com/jerryqi/JenkinsTest.git
和上次不一样的一点是, 上次是在本地构建, 然后上传编译后的代码到服务器运行, 而这次是直接把源代码上传到服务器交给Docker来构建, 实际上这里绕了一个圈, 因为我的Jenkins在本地, 所以是本地下载了Gitee的代码然后上传到服务器, 实际上, 如果把Jenkins安装到服务器就可以在服务器直接拉取Gitee代码然后执行Docker脚本构建.
- 在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的更多相关文章
- jenkins publish .net core application to linux server
最近学习Docker与Jenkins, 网上大部分都是关于Jenkins+Git+Docker进行持续远程部署, 我一直在考虑为什么Jenkins和Docker要绑定一块使用, 因为我想单独使用Jen ...
- 【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 ...
- ASP.NET Core 实战:Linux 小白的 .NET Core 部署之路
一.前言 最近一段时间自己主要的学习计划还是按照毕业后设定的计划,自己一步步的搭建一个前后端分离的 ASP.NET Core 项目,目前也还在继续学习 Vue 中,虽然中间断了很长时间,好歹还是坚持 ...
- Windows系统下使用Jenkins 自动发布 .NET core到Linux平台下Docker
准备工作(安装过程可以百度,已安装的可以跳过) a) 安装Jenkins,安装包下载地址:http://mirrors.tuna.tsinghua.edu.cn/jenkins/windows ...
- 用VSCode开发一个基于asp.net core 2.0/sql server linux(docker)/ng5/bs4的项目(1)
最近使用vscode比较多. 学习了一下如何在mac上使用vscode开发asp.netcore项目. 这里是我写的关于vscode的一篇文章: https://www.cnblogs.com/cgz ...
- .NET Core部署到linux(CentOS)最全解决方案,入魔篇(使用Docker+Jenkins实现持续集成、自动化部署)
通过前面三篇: .NET Core部署到linux(CentOS)最全解决方案,常规篇 .NET Core部署到linux(CentOS)最全解决方案,进阶篇(Supervisor+Nginx) .N ...
- .NET Core部署到linux(CentOS)最全解决方案,高阶篇(Docker+Nginx 或 Jexus)
在前两篇: .NET Core部署到linux(CentOS)最全解决方案,常规篇 .NET Core部署到linux(CentOS)最全解决方案,进阶篇(Supervisor+Nginx) 我们对. ...
- ASP.NET Core MVC 在linux上的创建及发布
前言 ASP.NET core转眼都发布半月多了,社区最近也是非常活跃,虽然最近从事python工作,但也一直对.NET念念不忘,看过了园区大神们搭建的Asp.net core项目之后,自己也是跃跃欲 ...
- ASP.NET Core 发布至Linux生产环境 Ubuntu 系统
ASP.NET Core 发布至Linux生产环境 Ubuntu 系统,之前跟大家讲解了 dotnet publish 发布,而没有将整个系统串起来. 今天就跟大家综合的讲一下ASP.NET Core ...
随机推荐
- (29)打鸡儿教你Vue.js
web阅读器开发 epub格式的解析原理 Vue.js+epub.js实现一个简单的阅读器 实现阅读器的基础功能 字号选择,背景颜色 有上一页,下一页的功能 设置字号,切换主题,进度按钮 电子书目录 ...
- 《挑战30天C++入门极限》新手入门:C/C++中枚举类型(enum)
新手入门:C/C++中枚举类型(enum) 如果一个变量你需要几种可能存在的值,那么就可以被定义成为枚举类型.之所以叫枚举就是说将变量或者叫对象可能存在的情况也可以说是可能的值一一例举出来. ...
- ORA-01578: ORACLE 数据块损坏 (文件号 13, 块号 2415081) ORA-01110: 数据文件XXXXXX
1.使用DBV检查数据文件,在cmd执行:dbv file='E:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF' blocksize=8192:然后等待检测结 ...
- org.apache.ibatis.cache.CacheException: Error serializing object
异常: 十二月 26, 2017 3:38:05 下午 org.apache.jasper.servlet.TldScanner scanJars 信息: At least one JAR was s ...
- Pytest权威教程27-Bash自动补全设置
目录 Bash自动补全设置 返回: Pytest权威教程 Bash自动补全设置 在Linux/Mac bash shell环境下,可以使用argcomplete对pytest命令进行自动补全.首先要安 ...
- svn服务备份与还原
1.dump备份方式: svnadmin dump /data/svn/xxxx > /data/beifen/`date +/%Y%m%d`.bak xxxx:项目名称(项目库) 将xxxx这 ...
- kafka集群搭建(图文并用)
将安装包上传服务器并解压 scp kafka_2.11-1.0.0.tgz username@{ip}:~/. mkdir /usr/local/kafka mv kafka_2.11-1.0.0.t ...
- java输出程序运行时间
做了一个MapReduce的小练习,想测试一下程序运行时间: 代码: long start = System.currentTimeMillis(); /*运行的程序主体*/ long end = S ...
- legend3---21、查问题或者查插件的时候请搜索对关键词
legend3---21.查问题或者查插件的时候请搜索对关键词 一.总结 一句话总结: 比如要查移动端的js图片裁剪插件,直接搜就“移动端的js图片裁剪插件” 千万记得问题和找资料都搜索对关键词(搜索 ...
- Laravel中的Storage::disk
Laravel中的Storage::disk 一.总结 一句话总结: Storage的disk的路径和file的路径都是一回事,都是config/filesystems.php配置文件中disks 比 ...