Docker+Subversion+Jenkins在windows server部署.net core

之前在本机测试并成功完成Docker+Subversion+Jenkins部署 .net core(教程见https://www.jianshu.com/p/63b79dad2a10),然而服务器是阿里云虚拟出来的windows server 2019系统,并不能开启Hyper-V,提示处理器没有所需的虚拟化功能。因而再次开始踩坑。

1.安装docker

由于不支持hyper-v,服务器不能安装Docker Desktop,只能安装Docker Engine。可以访问 docker hub查看说明。
打开powershell,运行如下命令:

Install-Module DockerMsftProvider -Force
Install-Package Docker -ProviderName DockerMsftProvider -Force

而后重启服务器,就可以尝试运行hello-world container查看docker是否安装成功了。

PS> docker container run hello-world:nanoserver

Unable to find image 'hello-world:nanoserver' locally
nanoserver: Pulling from library/hello-world
bce2fbc256ea: Pull complete
3ac17e2e6106: Pull complete
8cac44e17f16: Pull complete
5e160e4d8db3: Pull complete
Digest: sha256:25eac12ba40f7591969085ab3fb9772e8a4307553c14ea72d0e6f98b2c8ced9d
Status: Downloaded newer image for hello-world:nanoserver

Hello from Docker!
This message shows that your installation appears to be working correctly.

注意,该版本的docker只能运行windows container,并不能运行linux container。

2.在docker中执行 .net core程序

这部分大部分与上一篇文章一致,dockerfile内有部分不同,我可以放心大胆的复制粘贴啦。
在项目的 根目录 创建Dockerfile文件,没有任何后缀名,写入如下:

#拉取镜像不同了
FROM mcr.microsoft.com/dotnet/core/aspnet:2.1-nanoserver-1903 AS base
#使用管理员权限,不然build的时候会有Access Denied的错误
USER Administrator
WORKDIR /app
EXPOSE 80

#拉取镜像不同了
FROM mcr.microsoft.com/dotnet/core/sdk:2.1-nanoserver-1903 AS build
#使用管理员权限,不然build的时候会有Access Denied的错误
USER Administrator
WORKDIR /src
#注意文件路径
COPY ["SmartForest.Api/SmartForest.Api.csproj", "SmartForest.Api/"]
COPY ["nuget.config", ""]
RUN dotnet restore "SmartForest.Api/SmartForest.Api.csproj"
COPY . .
#注意文件路径
WORKDIR "/src/SmartForest.Api"
RUN dotnet build "SmartForest.Api.csproj" -c Release -o /app/build

##
FROM build AS publish
RUN dotnet publish "SmartForest.Api.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "SmartForest.Api.dll"]

或者有个简单的办法,使用vs重新创建项目,选择启用docker支持,注意.net core版本和项目名称和已有的应该一致,如下图所示:

image

项目创建好之后就会自带Dockerfile文件,添加USER Administrator,拷贝至对应目录 即可。
在控制台进入当前目录,执行命令docker build -t {tag} .,其中 {tag} 是该镜像的标签,可根据需求填写或省略,例如api. 代表当前目录,不可以省略。
运行成功后输入命令docker images可以查看全部镜像,会新增两个镜像:

REPOSITORY                             TAG                 IMAGE ID            CREATED             SIZE
api                                    latest              abcc825dfaaa        53 seconds ago      406MB
<none>                                 <none>              a9b1ff0f01f7        55 seconds ago      2.7GB

其中上面为发布的镜像,下面的为编译的镜像,可以使用docker image prune -f删除中间镜像。

3.安装Jenkins

因为该版本docker不能运行linux container,而关于windows container的资料又很少,而且可能又有其他的坑要踩,我选择直接把Jenkins安装到服务器上。
官网地址:http://Jenkins-ci.org/
windows稳定版下载地址:http://mirror.serverion.com/jenkins/windows-stable/
下载解压完成后,直接点击安装,直接默认下一步即可。完成后浏览器会自动打开localhost:8080,出现如下界面:

Jenkins等待界面

等待片刻后,自动跳转:
Jenkins解锁

使用记事本打开上述路径文件即可查看密码。
这里有个小插曲,因为服务器上8080和8081端口已经被GeoServer占用,所以上面界面打不开,可以修改安装目录下的jenkins.xml文件,将其修改为8082端口。

  <arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%\jenkins.war" --httpPort=8082 --webroot="%BASE%\war"</arguments>

等待片刻后安装推荐组件即可,然后继续等待zzZZ
安装完成后创建管理员账户和配置实例后就可以继续了。

4.创建Jenkins任务

点击左上角创建任务,出现如下界面,选择自由风格软件项目,填入名称,确定。

image

输入项目描述,选择源码管理,我这里使用的是公司的svn。
image

第一次添加项目时需要添加授权方式,点击右边添加之后下拉选择即可。
image

下一步设置构建触发器,这个是用来设置什么时间或者动作触发构建行为,有定时构建、轮询SCM、远程触发构建。
这里选择轮询SCM构建,即为Jenkins在定期轮询代码管理器,看是否有版本更新,如果有则立即开始构建项目。日程表填写H/2 * * * *,代表每2分钟轮询一次,注意*之间有空格(这是crontab语法,教程可以查看https://www.cnblogs.com/yoyoketang/p/11167181.html)。
image

继续设置构建环境,选择在开始构建前删除工作空间,设置构造超时时间,如果超时即为认定构建失败。

设置构建步骤,选择执行windows批处理命令,如下所示。
image

贴入执行windows批处理命令
image

::docker 镜像/容器名字名字 这里都命名为这个
set SERVER_NAME=wuzhouapi
::获取容器id
for /F "delims=" %%i in ('docker ps -aqf "name=%SERVER_NAME%"') do ( set CID=%%i)
::获取镜像id
for /F "delims=" %%i in ('docker images -q "%SERVER_NAME%"') do ( set IID=%%i)

if not defined CID goto build
echo "停止容器docker stop  %CID%"
docker stop  %CID%
echo "删除容器 docker rm %CID%"
docker rm %CID%

if not defined IID goto build
echo "删除镜像 docker rmi -f %SERVER_NAME%"
docker rmi -f %SERVER_NAME%

:build
echo "构建镜像 docker build -t "%SERVER_NAME%"  ."
docker build -t="%SERVER_NAME%" .

echo "docker run创建容器... docker run -d --restart=always  --name=%SERVER_NAME% -p 8086:80   %SERVER_NAME%"
docker run -d --restart=always --name=%SERVER_NAME% -p 8086:80   %SERVER_NAME%
echo "删除中间镜像 docker image prune -f"
docker image prune -f
echo "%SERVER_NAME%容器创建完成"

点击保存,完毕。
可以在左侧点击立即构建如下图,或修改代码上传触发构建过程。


image

等待构建完成,如果出现红色圆圈代表构建失败,出现蓝色代表成功。


image

如果失败可以在控制台输出查看失败原因,排除错误后重新再来。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,036评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,046评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,411评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,622评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,661评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,521评论 1 304
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,288评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,200评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,644评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,837评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,953评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,673评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,281评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,889评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,011评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,119评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,901评论 2 355