用Docker运行Jenkins自动化构建.NET Core项目
目标
当代码提交到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里面都做了什么事情:
- 这个Docker镜像基于jenkins
- 设置当前用户为root,因为后面安装需要使用root
- 设置当前工作目录为dotnet
- 下载dotnet SDK包,保存为dotnet.tar.gz。这里要注意下载正确版本的SDK,可前往微软官方网站获取下载链接:https://dotnet.microsoft.com/download
- 解压dotnet SDK到当前目录,即
/dotnet目录 - 删除dotnet SDK包
- 把dotnet目录和dotnet tools目录添加到环境变量PATH,这样就可以使用
dotnet命令了 - 设置DOTNET_ROOT变量
- 更新源
- 安装一些必需的,常用的工具包,其中
icu-devtools是运行dotnet需要的 - 修改jenkins用户到root附加组
- 设置当前用户为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 run -p : -p : --name jenkins jenkins:dotnet
运行命令以后会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:在文件复制完成后将会在远程服务器上执行该命令
到这里整个自动构建环境就搭配完成了。
源文地址:https://www.zkea.net/codesnippet/detail/docker-jenkins-dotnet-core.html
用Docker运行Jenkins自动化构建.NET Core项目的更多相关文章
- K8S+Jenkins自动化构建微服务项目(后续)
因为之前写过基于K8S部署jenkins master/slave平台,在这个的基础上构建微服务到K8S集群中 Jenkins-slave构建微服务项目到K8S集群 1.微服务项目上传到git仓库 这 ...
- Docker 之 Jenkins自动化部署
Docker 之 Jenkins自动化部署 Jenkins部署 jenkis 绑定gitlab shell脚本自动化构建Docker镜像 提升maven构建速度 jenkins 无法通过shell脚本 ...
- Jenkins自动化构建python nose测试
[本文出自天外归云的博客园] 简介 通过Jenkins自动化构建python nose测试分两步: 1. 创建节点(节点就是执行自动化测试的机器): 2. 创建任务并绑定节点(用指定的机器来跑我们创建 ...
- Jenkins自动化构建系列:01敏捷开发、自动化构建与持续集成
<SVN与TortoiseSVN实战系列>已写完,今天新开一个<Jenkins自动化构建系列>,上周听了Bob Jiang老师的Agile1001公开课,一直想写个总结,这篇关 ...
- docker安装jenkins自动化部署
Docker之Jenkins自动化部署 1.拉取jenkins镜像images(类比:java中的类) docker pull jenkinsci/jenkins:lts 或 docker pull ...
- docker 运行jenkins及vue项目与springboot项目(三.jenkins的使用及自动打包vue项目)
docker 运行jenkins及vue项目与springboot项目: 一.安装docker 二.docker运行jenkins为自动打包运行做准备 三.jenkins的使用及自动打包vue项目 四 ...
- docker 运行jenkins及vue项目与springboot项目(五.jenkins打包springboot服务且在docker中运行)
docker 运行jenkins及vue项目与springboot项目: 一.安装docker 二.docker运行jenkins为自动打包运行做准备 三.jenkins的使用及自动打包vue项目 四 ...
- docker 运行jenkins及vue项目与springboot项目(一.安装docker)
docker 运行jenkins及vue项目与springboot项目: 一.安装docker 二.docker运行jenkins为自动打包运行做准备 三.jenkins的使用及自动打包vue项目 四 ...
- docker 运行jenkins及vue项目与springboot项目(二.docker运行jenkins为自动打包运行做准备)
docker 运行jenkins及vue项目与springboot项目: 一.安装docker 二.docker运行jenkins为自动打包运行做准备 三.jenkins的使用及自动打包vue项目 四 ...
随机推荐
- IM即时通信软件设计
参考资料: 架构篇:https://yq.aliyun.com/articles/698301 模型篇:https://yq.aliyun.com/articles/701593 实现篇:https: ...
- 【STM32H7教程】第34章 STM32H7的定时器应用之TIM1-TIM17的PWM实现
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第34章 STM32H7的定时器应用之TIM1-T ...
- python网络编程:UDP方式传输数据
UDP --- 用户数据报协议(User Datagram Protocol),是一个无连接的简单的面向数据报的运输层协议. UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能 ...
- Spring Boot 2.2.2.RELEASE 版本中文参考文档【3.1】
使用Spring Boot 本节将详细介绍如何使用Spring Boot.它涵盖了诸如构建系统,自动配置以及如何运行应用程序之类的主题.我们还将介绍一些Spring Boot最佳实践.尽管Spring ...
- C lang:Pointer and multidimensional array
Xx_Introduction Double indrection:Address of Address;Pointer of Pointer Ax_Code #include<stdio.h& ...
- 数据库学习笔记day04
--row_number()over(partition by xxx order by xxx)分组排序函数 特点:组内连续且唯一select ename,sal,deptno,row_number ...
- RunLoop 和 autoreleasepool
RunLoop 和 autoreleasepool RunLoop和线程的一一对应的,对应的方式是以key-value的方式保存在一个全局字典中 主线程的RunLoop会在初始化全局字典时创建 子线程 ...
- C++中的try throw catch 异常处理
今天在开发过程中调用一个库函数结果库函数有throw操作,当前代码没有对throw进行捕获操作,导致进程在main 函数中捕获到异常导致进程crash.所以借此记录下c++关于try,throw,ca ...
- PWA 学习笔记(三)
基础技术简介 Promise: 1.ES6 引入的一种异步编程的解决方案,通过 Promise 对象来提供统一的异步状态管理方法 2.一般在使用 Promise 对象的时候,首先需要对其进行实例化 3 ...
- MySQL数据库~~~~~存储引擎
1. InnoDB InnoDB引擎特点: 1.支持事务:支持4个事务隔离界别,支持多版本读. 2.行级锁定(更新时一般是锁定当前行):通过索引实现,全表扫描仍然会是表锁,注意间隙锁的影响. 3.读写 ...