jenkins shell控制台卡死_Docker 运行 Jenkins 自动化构建 .NET Core 项目

(给DotNet加星标,提升.Net技能)

转自:ZKEASOFT zkea.net/codesnippet

目标

当代码提交到GitHub后,自动生成构建项目并部署到服务器。

接下来介绍一下如何在容器中运行Jenkins,并自动化构建GitHub上的项目,使用自动化构建来解放你的双手。

前置条件

一台已经安装了Docker的Ubuntu服务器,有公网IP并可通过IP或者域名访问。因为GitHub无法访问本地服务器,所以不能触发构建,只能手动触发构建。

这里我们选择使用基于.Net Core开发的纸壳CMS作为演示例子,一步一步搭建自动构建。

当然,一样可以不使用Docker在Windows、Linux上安装Jenkins来达到同样的目的。

Dockerfile

首先创建一个Dockerfile文件,文件名就是Dockerfile,然后输入以下内容:

FROM jenkins/jenkins:lts
USER root
WORKDIR /dotnet

RUN wget -O dotnet.tar.gz https://download.visualstudio.microsoft.com/download/pr/72ce4d40-9063-4a2e-a962-0bf2574f75d1/5463bb92cff4f9c76935838d1efbc757/dotnet-sdk-3.0.100-preview6-012264-linux-x64.tar.gz

RUN tar zxf dotnet.tar.gz -C ./
RUN rm -rf dotnet.tar.gz
ENV PATH="${PATH}:/dotnet:/var/jenkins_home/.dotnet/tools"
ENV DOTNET_ROOT="/dotnet"
RUN apt update -y
RUN apt install icu-devtools vim zip unzip -y
RUN usermod -a -G root jenkins
USER jenkins

简单说明一下这个Dockerfile里面都做了什么事情:

  1. 这个Docker镜像基于jenkins

  2. 设置当前用户为root,因为后面安装需要使用root

  3. 设置当前工作目录为dotnet

  4. 下载dotnet SDK包,保存为dotnet.tar.gz。这里要注意下载正确版本的SDK,可前往微软官方网站获取下载链接:https://dotnet.microsoft.com/download

  5. 解压dotnet SDK到当前目录,即/dotnet目录

  6. 删除dotnet SDK包

  7. 把dotnet目录和dotnet tools目录添加到环境变量PATH,这样就可以使用dotnet命令了

  8. 设置DOTNET_ROOT变量

  9. 更新源

  10. 安装一些必需的,常用的工具包,其中icu-devtools是运行dotnet需要的

  11. 修改jenkins用户到root附加组

  12. 设置当前用户为jenkins

到这里,Dockerfile就定义完成了。当你的项目升级到更新版本的.Net Core时,只需要进入容器下载对应的.Net Core SDK就可以了。

生成Docker镜像

接下来使用以下命令来生成Docker镜像,镜像名为jenkins,Tag是dotnet:

docker 

生成这个镜像要花数分钟的时间,请耐心等待:

bc0fd8cc8a3c7bbb995c94b24a59ac87.png

生成完成以后,可以使用docker images命令查看所有镜像

0ad1a9560ab2c8a7001bbe7e12f9771e.png

运行Jenkins实例

使用docker run命令来运行一个jenkins实例,注意映射端口,右边的8080,50000是Jenkin的默认端口,左边的是Docker宿主机的端口,可以按情况修改:

docker --name 

运行命令以后会jenkins会自动初始化,当控制台上出现Jenkins is fully up and running的时候就初始化完成了,同时可以看到上面有一个admin的初始化密码,把它复制下来,在第一次使用Jenkins的时候要使用到这个密码。

e33363ebcb9b0a25d16d0dc59c4020a1.png

打开浏览器,在地址栏中输入服务器的IP地址和端口号访问jenkins:

9b4218f1fb6503a85590eb69efe40897.png

然后将刚才复制下来的密码,粘贴到密码输入框中,然后点击继续:

ba536b076fe556e3a88b2ab61ce61cf2.png

然后点击选择安装插件,因为除了默认推荐的插件,我们还需要安装一些其它插件:

219829e2a0cc502eee087ff212738703.png

除了推荐的插件外,我们还需要安装GitHub的插件,Publish Over SSH插件,这个插件可以将你发布好的程序通过SSH复制到你的服务器上

5b1259ae0a194c1234b2d08a9af219c7.png

244151c761198aefedb09d0bef549965.png

然后点击安装,等待安装完成:

81316b255f74d2c04512b0ac510ea8ab.png

插件安装完成以后,输入初始化用户名和密码等信息后,就可以开始使用Jenkins了:

3bf62f1104cdb20833b1c18b61b5b695.png

接下来的使用默认信息一直点下一步就可以了。

添加项目

点击添加新作业,创建一个项目:

5603d8658337dc9671707c81c7f86c1c.png

输入名称,选择Freestyle project,然后点击ok创建:

7fa78923ddad8e14c5dc0ff09d1f6dab.png

勾选GitHub project,然后输入项目地址:

3d0e3cd2af201c8dd87abf48c2655e25.png

在源码管理里面选择git,然后输入git地址:

6fb6cbd859477acd92670d5714fe36d9.png

有了源代码之后,就可以添加生成操作了。在生成这里添加一个执行shell的步骤,我们将在这里使用dotnet的publish命令来发布项目

e2c57ee2c03bf55a70f49d9ec7ea8983.png

然后就可以在这里输入dotnet publish命令了:

80d42c0dc2418f7267cbc6db798e620d.png

因为我们这里演示使用的是纸壳CMS,有点不一样,需要使用官方的发布工具,所以要输入以下命令:

e516611a399b7d9707aeee1aa195b7f6.png

由于ZKEACMS.Publisher没有在容器中安装,所以发布会报错,这里我们还需要进入窗口安装一下发布工具,首先进入容器:

exec -it jenkins bash

然后使用以下命令来安装发布工具: 

dotnet 

点击保存。到这里,添加项目,并且发布项目就完成了,点击立即生成来尝试生成一下:

12bb2904851b3cdb58340f26f781eaad.png

Build History里面可以看到所有的构建历史记录,点击进度条,可以查看当前生成任务的控制台输出:

 59dd6f817f9f751c4bef5b29994edcaa.png

到这里,生成、发布已经可以了,但是提交代码后不会自动触发,我们需要在GitHub上添加一个Webhook,来自动触发生成、发布。

添加GitHub Webhook

首先,开启项目的GitHub触发事件,点击配置项目:

d49affc51eacb9776d47e2e7f32cb30d.png

然后勾选生成事件中的GitHub hook trigger

1ecdd7776ba63c13ef0e22f2458b1c53.png

接下来要在GitHub上设置项目的Webhook,点击项目设置下的Webhooks来添加

31c0f3240719a24aeba303bb6e1e25cb.png

注意jenkins的github插件设定的默认的GitHub的Webhook地址是{IP}:端口/github-webhook/,所以在Payload URL输入以下URL即可,如果有域名可以使用域名:

cd394520b702207ee9995f2eb4754b0e.png

在添加完后,GitHub会先尝试一送一个请求,这时候就可以到Jenkins看一下是否会生成了。如果没有生成,可以通过查看log来了解原因:

0bbe85ae6103d6fd5017e4e2bde1a180.png

部署到服务器

现在自动触发构建已经设置好了,就剩下最后一步,将发布好的程序推送到服务器。

首先,要在Jenkins里面配置服务器的相关信息,点击Manage Jenkins:

7764b4074eaecacbfc3fde839dd20eef.png

选择Configure System:

348c2f3306ece88175b4e86074227900.png

然后输入服务器的相关信息,Jenkins将会使用这些信息来远程连接你的服务器:

e13bfacb46ac7f00c072c2ab68979eb7.png

注意:devops目录须要在目录服务器上存在。

添加完服务器后,再次编辑项目,添加一个生成步骤,该步骤就是发送文件:

92a513e299be0a5db4811186e7eaaab2.png

输入要复制的文件目录,和在复制完成之后要执行的命令,文件复制完成以后,我们重新启动一下程序的服务:

5d573a289f2120be2cb1e5d44b362eef.png

  • Source files:要复制的文件

  • Remove prefix:如果不输入,目标服务器的devops目录(在配置SSH服务器的时候指定的目录)下会创建和Sourece files一样的目录结构

  • Remote directory:目标服务器下devops目录下的子目录

  • Exec command:在文件复制完成后将会在远程服务器上执行该命令

到这里整个自动构建环境就搭配完成了。

推荐阅读   点击标题可跳转 ASP.NET Core 3.x 授权中的概念 一文带你了解C# DLR 的世界 浏览器中的.NET Core Blazor WebAssembly

看完本文有收获?请转发分享给更多人

关注「DotNet」加星标,提升.Net技能 

25d7e5afdc4b4728b6e4921f6c27f4f1.png

好文章,我在看❤️

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值