阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

基于Jenkins快速搭建持续集成环境

464次阅读
没有评论

共计 3841 个字符,预计需要花费 10 分钟才能阅读完成。

什么是持续集成

随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题。尤其是近些年来,敏捷(Agile)在软件工程领域越来越红火,如何能再不断变化的需求中快速适应和保证软件的质量也显得尤其的重要。

持续集成正是针对这一类问题的一种软件开发实践。它倡导团队开发成员必须经常集成他们的工作,甚至每天都可能发生多次集成。而每次的集成都是通过自动化的构建来验证,包括自动编译、发布和测试,从而尽快地发现集成错误,让团队能够更快的开发内聚的软件。

持续集成的核心价值在于:

  1. 持续集成中的任何一个环节都是自动完成的,无需太多的人工干预,有利于减少重复过程以节省时间、费用和工作量;
  2. 持续集成保障了每个时间点上团队成员提交的代码是能成功集成的。换言之,任何时间点都能第一时间发现软件的集成问题,使任意时间发布可部署的软件成为了可能;
  3. 持续集成还能利于软件本身的发展趋势,这点在需求不明确或是频繁性变更的情景中尤其重要,持续集成的质量能帮助团队进行有效决策,同时建立团队对开发产品的信心。
持续集成的原则

业界普遍认同的持续集成的原则包括:

1)需要版本控制软件保障团队成员提交的代码不会导致集成失败。常用的版本控制软件有 IBM Rational ClearCase、CVS、Subversion 等;

2)开发人员必须及时向版本控制库中提交代码,也必须经常性地从版本控制库中更新代码到本地;

3)需要有专门的集成服务器来执行集成构建。根据项目的具体实际,集成构建可以被软件的修改来直接触发,也可以定时启动,如每半个小时构建一次;

4)必须保证构建的成功。如果构建失败,修复构建过程中的错误是优先级最高的工作。一旦修复,需要手动启动一次构建。

持续集成系统的组成

由此可见,一个完整的构建系统必须包括:

  1. 一个自动构建过程,包括自动编译、分发、部署和测试等。
  2. 一个代码存储库,即需要版本控制软件来保障代码的可维护性,同时作为构建过程的素材库。
  3. 一个持续集成服务器。

Jenkins 是由 Sun 的前员工开发的,它的根基是 Java,但也可以用在非 Java 的项目里,比如 PHP、Ruby on Rails、.NET。在.NET 项目里,你除了 Jenkins 之外还要熟悉另一样工具:MSBuild。Visual Studio 用 MSBuild 构建.NET 项目。MSBuild 所需的仅仅是一个脚本,在脚本中指定要执行的 target。项目中的.csproj 和.vbproj 文件都是 MSBuild 脚本。下面的几篇文章介绍如何使用 Jenkins 快速搭建持续集成服务器。

首先要学会使用 MSBuild 构建脚本

附网址: http://www.linuxidc.com/Linux/2016-06/132287.htm

目标: 学会用 MSBuild 编译程序, 主要用于 asp.net 或者 asp.net mvc.

最终, 我写的脚本如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 
<ItemGroup>
    <BuildArtifactsDir Include="UI\bin\" />
    <SolutionFile Include="HelloCI.sln" />
</ItemGroup>
 
<PropertyGroup>
    <Configuration Condition="'$(Configuration)' == ''">Release</Configuration>
    <BuildPlatform Condition="'$(BuildPlatform)' == ''">Any CPU</BuildPlatform>
</PropertyGroup>
 
 
<Target Name="Init" DependsOnTargets="Clean">
    <MakeDir Directories="@(BuildArtifactsDir)" />
</Target>
 
<Target Name="Clean">
    <RemoveDir Directories="@(BuildArtifactsDir)" />
</Target>
 
<Target Name="Compile" DependsOnTargets="Init">
 <MSBuild Projects="@(SolutionFile)" Targets="Rebuild"
          Properties="OutDir=%(BuildArtifactsDir.FullPath);Configuration=$(Configuration);Platform=$(BuildPlatform)" />
</Target>
 
</Project>
 
 
<!--msbuild HelloCI.msbuild /t:Compile /p:VisualStudioVersion=12.0 -->

脚本的最后一行注释, 是构建的命令./p:VisualStudioVersion=12.0是指明版本, 如果不指明会报错, 找不到某文件.

Jenkins+tortoisesvn+MSBuild 做到持续集成

附 Jenkins 的使用: http://www.linuxidc.com/Linux/2016-06/132287p2.htm

先大概阅读上面的网址对应的文章.注意: 我用的版本控制器是 tortoisesvn; 此外,post-commit 的钩子我也会说明.

1. 安装 Jenkins(稳定版本即可), 装好后 进入左侧 系统管理, 点击 管理插件, 安装 MSBuild 插件.

2. 使用 Jenkins 新建一个自由风格的软件项目. 配置如下:

基于 Jenkins 快速搭建持续集成环境

 

主要是配置 svn 的地址和账号密码; 构建触发器不用选, 后面会用钩子.

然后是构建, 配置如下:

基于 Jenkins 快速搭建持续集成环境

HelloCI.msbuild 是构建脚本的文件名. 其次, 参数是一定要填的.

其他的不用理, 直接保存.

项目列表, 如下图:

基于 Jenkins 快速搭建持续集成环境

 

此时, 用 svn 上传一个项目(不包含 bin), 项目根目录要有 HelloCI.msbuild 这个文件.

上传完成后, 点击 上图中的 立即构建 . 用 IIS 等软件看网站是否可以访问.

如果成功, 下一步就是如何触发构建. 毕竟, 每提交一次, 就去服务器立即构建一次, 是重复动作. 要用触发构建 ’ 封装 ’.

用 tortoisesvn 的 post-commit 钩子触发构建

首先, 要明白一点. 在 Jenkins 的项目列表里, 除了点击 立即构建 . 还可以通过访问

http://localhost:8080/job/JOBNAME/build?delay=0sec(JOBNAME 需要替换成真实的 job 名称),让 Jenkins 启动构建。(请自己测试, 通过后, 继续看下边的.)

tortoisesvn 的钩子设置如下:

基于 Jenkins 快速搭建持续集成环境

 

HelloCIHook.exe 是什么呢? 你应该可以想到了, 就是一个小程序, 执行它会访问能触发构建的 url.

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
class Program
{
     
    static void Main(string[] args)
    {
        const string url = "http://localhost:8080/job/HelloCI/build?delay=0sec";
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
        req.Method = "GET";
        req.KeepAlive = false;
        req.GetResponse();
    }
}

到这儿就结束了.

总结下流程, 用 svn 提交代码后, 钩子触发 HelloCIHook.exe 这个程序, 该程序访问了一个 url, 进而触发了 Jenkins 的构建 (执行的 MSBuild 构建脚本).Jenkins 以最新的代码库进行了构建, 生成了 bin(也可以是其他) 目录下的文件. 网站成功更新.

局域网内利用 GitLab+Jenkins 自动生成 GitBook 并发布(Nginx)  http://www.linuxidc.com/Linux/2016-05/131136.htm

Linux+Git+Maven+Jenkins+Neuxs 自动化编译环境搭建 http://www.linuxidc.com/Linux/2016-02/128652.htm

CentOS6 安装 Jenkins  http://www.linuxidc.com/Linux/2016-05/131365.htm

使用 Jenkins 配置 Git+Maven 的自动化构建 http://www.linuxidc.com/Linux/2016-02/128641.htm

Jenkins+Maven+Git 搭建持续集成和自动化部署的配置手记 http://www.linuxidc.com/Linux/2015-06/118606.htm

Jenkins 的分布式构建及部署——节点  http://www.linuxidc.com/Linux/2015-05/116903.htm

Jenkins 的详细介绍:请点这里
Jenkins 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-06/132288.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计3841字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19350
评论数
4
阅读量
7961251
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS-5:飞牛NAS中的Docker功能介绍

星哥带你玩飞牛NAS-5:飞牛NAS中的Docker功能介绍

星哥带你玩飞牛 NAS-5:飞牛 NAS 中的 Docker 功能介绍 大家好,我是星哥,今天给大家带来如何在...
自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个 AI 智能体 — 跟创业大佬对话 前言 智能体(Agent)已经成为创业者和技术人绕...
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...
国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号 AI 知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率 大家好,我是星哥,...
每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年 0.99 刀,拿下你的第一个顶级域名,详细注册使用 前言 作为长期折腾云服务、域名建站的老玩家,星哥一直...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...
星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

  星哥带你玩飞牛 NAS-16:不再错过公众号更新,飞牛 NAS 搭建 RSS 对于经常关注多个微...
仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

还在忍受动辄数百兆的“全家桶”监控软件?后台偷占资源、界面杂乱冗余,想查个 CPU 温度都要层层点选? 今天给...
星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛 NAS 硬件 03:五盘位 +N5105+ 双网口的成品 NAS 值得入手吗 前言 大家好,我...
Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集 在云原生体系中,Prometheus 已成为最主流的监控与报警...