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

转自:ZKEASOFTzkea.net/codesnippet

目标

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

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

前置条件

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

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

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

Dockerfile

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

FROM jenkins/jenkins:ltsUSER rootWORKDIR /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.gzENV PATH="${PATH}:/dotnet:/var/jenkins_home/.dotnet/tools"ENV DOTNET_ROOT="/dotnet"RUN apt update -yRUN apt install icu-devtools vim zip unzip -yRUN usermod -a -G root jenkinsUSER 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 build -t jenkins:dotnet

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

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

运行Jenkins实例

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

docker --name 

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

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

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

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

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

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

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

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

添加项目

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

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

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

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

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

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

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

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

docker exec -it jenkins bash

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

dotnet tool install -g ZKEACMS.Publisher

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

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

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

添加GitHub Webhook

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

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

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

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

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

部署到服务器

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

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

选择Configure System:

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

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

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

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

  • 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技能

好文章,我在看❤️

git log 获取构建时间_Docker 运行 Jenkins 自动化构建 .NET Core 项目相关推荐

  1. 最新Jenkins自动化构建使用 (Unity2020+Jenkins+云效)

    团队开发项目时,经常要频繁地推拉.打包项目,如果能让机器自动去做这些重复的工作,将节省大量时间. Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件 ...

  2. gitlab ci 自动化部署_前端gitLab加jenkins自动化构建和部署,以及服务器常用的linux命令行操作,免密登录...

    常用的linux命令行操作 将项目部署到服务器后,需要查看文件是否已经部署成功,已经对文件进行增删改查操作,就需要用到命令行操作,常用操作如下: ll 罗列出当前文件或目录的详细信息,含有时间.读写权 ...

  3. Android项目jenkins自动化构建之360加固(一)

    Android项目jenkins自动化构建之360加固(一) 最近Jenkins接手一个项目,项目自动化构建都是在jenkins上做的,包括打包构建--360加固--apk签名--邮件发送apk 总共 ...

  4. jmeter添加html,Jmeter 报告可视化 —— 配置生成测试报告仪表板,Jmeter + Jenkins 自动化构建生成 HTML 报告...

    目录 一.jmeter报告仪表板相关信息 二.文件修改说明 三.jmeter.properties文件配置 四.user.properties文件配置 五.新建jtl报告目录 六.复制jmeter.p ...

  5. 【二十三】win 10 :Jmeter 报告可视化 —— 配置生成测试报告仪表板,Jmeter + Jenkins 自动化构建生成 HTML 报告

    目录 一.jmeter报告仪表板相关信息 二.文件修改说明 三.jmeter.properties文件配置 四.user.properties文件配置 五.新建jtl报告目录 六.复制jmeter.p ...

  6. 基于Jenkins自动化部署spring boot项目

    1. 使用Jenkins来实现微服务架构下的自动化部署! 在微服务架构中,随着项目拆分越来越细,导致服务越来越多,服务的打包部署就会成为一个相当麻烦的事情.在我之前工作的公司都是本地打包好,上传到服务 ...

  7. Docker中安装Jenkins实时发布.net core 项目(二)

    Docker中安装Jenkins实时发布.net core 项目 防坑点 升级docker jenkins运行 运行命令 jenkins拉取git并构建项目 其他 查看发布文件 防坑点 升级docke ...

  8. Docker中安装Jenkins实时发布.net core 项目(一)

    Docker中安装Jenkins实时发布.net core 项目 安装docker 懒人篇 手动安装 dockerfile安装jenkins 常规安装jenkins jenkins的安装 搜索jenk ...

  9. Jenkins自动化部署前端Vue项目

    Jenkins自动化部署前端Vue项目 前言 安装NodeJs 下载NodeJs 安装NodeJs npm配置 Jenkins配置NodeJs 安装NodeJs插件 配置NodeJs 新建及配置任务 ...

最新文章

  1. java 取字段_java – 获取字段的名称
  2. 如何显示服务器上excel,如何在HTML中使用OWC正确显示、加载服务器端的excel文件呢?...
  3. ref 与 out 参数的区别
  4. php解析api xml并输出到html页面,怎样操作JS读取xml内容并输出到div内
  5. 赶紧3分钟学完15分钟的内容我要出去玩(8)
  6. leetcode1466. 重新规划路线(dfs)
  7. PrestaShop物流跟踪模块
  8. 公众号的秘密,知道一个biz就够了
  9. Percona XtraBackup 数据恢复工具安装 ubuntu 16.04
  10. OpenShift 4 - 运行Spark和Zeppelin大数据应用
  11. 用谷歌浏览器来模拟手机浏览器
  12. Python爬虫实战02:分析Ajax请求并抓取今日头条街拍
  13. 因开源协议“大打出手”,AWS 宣布创建 Elasticsearch、Kibana 分支
  14. nyoj--32--组合数
  15. Java反射异常处理之InvocationTargetException
  16. 交换机cad图例_网络交换机cad图
  17. 基本知识 100052
  18. 【WIN】超简单的Excel密码破解
  19. PiXYZStudio:Revit 模型轻量化
  20. @kubernetes(k8s)label标签的使用及service代理模式

热门文章

  1. VS2019 windows桌面应用_多邻国英语测试推出桌面应用程序,确保考试环境安全可靠...
  2. mysql触发器对同一张表做操作_MySql 触发器对同表操作
  3. phpcms调用栏目描述_phpcms v9栏目列表调用每一篇文章内容方法
  4. bootloader搞定,1.67秒!
  5. oracle根据分区移动,Oracle 12c 在线移动分区和部分分区read only
  6. pymysql连接mysql_python使用MYSQL数据库
  7. c语言 结构数组读取,有关文件读写到结构体数组问题;
  8. visual studio输入法打不了中文_我为什么不用Mac自带输入法
  9. using namespace cv_闪耀暖暖万圣节非凡魔女南瓜套公开 消耗钻石获取 大喵无CV
  10. Java如何解决mysql读写延迟_java中延迟任务的处理方式