Jenkins持续集成学习-Windows环境进行.Net开发1
Jenkins持续集成学习-Windows环境进行.Net开发
目录
Jenkins持续集成学习-Windows环境进行.Net开发1
Jenkins持续集成学习-Windows环境进行.Net开发2
Jenkins持续集成学习-Windows环境进行.Net开发3
Jenkins持续集成学习-Windows环境进行.Net开发4
Jenkins持续集成学习-搭建jenkins问题汇总
前言
本文探究在.net环境下的持续集成环境研究并使用。关于为什么使用Jenkins,可以参考一下jenkins持续集成原理
目标
学习jenkins的基本使用,完成以下2点任务。
- 搭建jenkins任务完成自动编译。
- 自动从nuget上获取需要的包。
使用Jenkins
安装
到Jenkins官网下载安装包,进行安装。安装完成后会自动打开一个页面。默认是网站是localhost:8080。若端口已被占用则需要修改成别的端口。
具体安装问题可以看这里浅谈.net jenkins svn下自动化集成环境安装 搭建 配置
主要是安装完后需要安装.net的环境的一些插件及svn(或git)等相关插件。
根据官网描述是需要安装java环境的
添加.net环境配置
安装完后如果要在.net环境使用,在MSBuild插件安装完的前提下。配置msbuild.exe的路径。这样jenkins就能通过msbuild来编译.net项目了。具体配置可以可以参考《为 Jenkins 配置 .NET 持续集成环境》
我本地的jenkins的全局配置配的MSBuild也为14.0
安装了不同版本的VS的MSBuild版本可能不一样。

部署
我们通过VS先新建一个控制台项目.net framework4.5的项目,项目名称叫做JenkinsTest。在Program.cs中简单的输出hello world
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
程序目录如下
│ JenkinsTest.sln
│
└─JenkinsTest
│ App.config
│ JenkinsTest.csproj
│ Program.cs
│
└─Properties
AssemblyInfo.cs
编译通过后将项目上传到SVN上,我在我本地建了SVN的服务,并增加了用户名和密码分别为test。

新建项目

创建一个名为test的自由风格软件项目。

我本地使用的是SVN,因此选择Subversion,输入SVN的路径。Local module directory为SVN获取代码的路径。.表示获取到jenkins的根目录下。

首次创建的时候需要创建SVN的登录凭据,在Credentials项点击Add添加一个新的凭据,类型就选择Username with password即可,id需要输入一个唯一凭据标识。

在Build Environment下勾选Add timestamps to the Console Output,这样可以显示时间戳。

在Build选择MSBuild的版本,这个版本在全局配置设置过,在这里就可以显示出来。MSBuild Build File输入需要编译的程序集文件名。在Command Line Arguments输入编译的参数,我们编译成Realse版本。完成后点击保存即可。具体MSBuild指令不做具体探究,有什么问题直接可以看官方文档
点击立即构建就会自动编译,完成就会显示一个结果


点击#1即可调转到该次编译的详细信息中,在左侧点击Console Output可以看到编译的过程日志。

构建过程分析
先从SVN获取代码
16:21:55 由用户 jake 启动
16:21:55 构建中 在工作空间 D:\Program Files (x86)\Jenkins\workspace\test 中
16:21:55 Updating https://jakepc/svn/JenkinsTest/trunk/JenkinsTest at revision '2019-01-18T16:21:55.792 +0800' --quiet
16:21:55 Using sole credentials test/****** (本地svn服务器) in realm ‘<https://jakepc:443> VisualSVN Server’
16:21:55 At revision 3
调用MSBuild命令进行编译,这里会查找我们全局配置的MSBuild.exe执行我们在创建时输入的
Command Line Arguments指令。16:21:56 Path To MSBuild.exe: C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe
16:21:56 Executing the command cmd.exe /C " "C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" /t:Build /p:Configuration=Release JenkinsTest.csproj " && exit %%ERRORLEVEL%% from D:\Program Files (x86)\Jenkins\workspace\test
16:21:56 [test] $ cmd.exe /C " "C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" /t:Build /p:Configuration=Release JenkinsTest.csproj " && exit %%ERRORLEVEL%%
编译完成,显示警告,错误和结果
...
16:21:57 _CopyAppConfigFile:
16:21:57 正在将文件从“App.config”复制到“bin\Release\JenkinsTest.exe.config”。
16:21:57 CopyFilesToOutputDirectory:
16:21:57 正在将文件从“obj\Release\JenkinsTest.exe”复制到“bin\Release\JenkinsTest.exe”。
16:21:57 JenkinsTest -> D:\Program Files (x86)\Jenkins\workspace\test\bin\Release\JenkinsTest.exe
16:21:57 正在将文件从“obj\Release\JenkinsTest.pdb”复制到“bin\Release\JenkinsTest.pdb”。
16:21:57 已完成生成项目“D:\Program Files (x86)\Jenkins\workspace\test\JenkinsTest.csproj”(Build 个目标)的操作。
16:21:57
16:21:57 已成功生成。
16:21:57 0 个警告
16:21:57 0 个错误
16:21:57
16:21:57 已用时间 00:00:01.22
16:21:59 Finished: SUCCESS
通过以上三步骤,实际和我们自己使用VS编译过程也是一样的。
增加依赖dll
上面我们创建了一个最简单的项目,并通过jenkins获取并编译成功了,下面我们增加项目复杂性,增加其他依赖项。
新建一个jenkins.Common的类库。我们把HelloWorld的字符串通过该类库获取到,然后主项目进行输出。
增加HelloWolrdHelper类获取字符串
public class HelloWolrdHelper
{
public static string GetString()
{
return "Hello World!";
}
}
修改原项目
static void Main(string[] args)
{
Console.WriteLine(HelloWolrdHelper.GetString());
Console.ReadKey();
}

然后提交代码到SVN后在jenkins再次构建,结构如下。
│ JenkinsTest.sln
│
├─Jenkins.Common
│ │ HelloWolrdHelper.cs
│ │ Jenkins.Common.csproj
│ │
│ └─Properties
│ AssemblyInfo.cs
│
└─JenkinsTest
│ App.config
│ JenkinsTest.csproj
│ Program.cs
│
└─Properties
AssemblyInfo.cs
构建一下,编译成功了,MSBuild会根据csproj文件内的依赖关系编译其他程序集。

生成启动时间为 2019/1/18 17:16:03。
17:16:03 项目“D:\Program Files (x86)\Jenkins\workspace\test\JenkinsTest\JenkinsTest.csproj”在节点 1 上(Build 个目标)。
17:16:03 PrepareForBuild:
17:16:03 正在创建目录“bin\Release\”。
17:16:03 正在创建目录“obj\Release\”。
17:16:03 项目“D:\Program Files (x86)\Jenkins\workspace\test\JenkinsTest\JenkinsTest.csproj”(1)正在节点 1 上生成“D:\Program Files (x86)\Jenkins\workspace\test\Jenkins.Common\Jenkins.Common.csproj”(2) (默认目标)。
17:16:03 PrepareForBuild:
17:16:03 正在创建目录“bin\Release\”。
17:16:03 正在创建目录“obj\Release\”。
17:16:03 GenerateTargetFrameworkMonikerAttribute:
17:16:03 正在跳过目标“GenerateTargetFrameworkMonikerAttribute”,因为所有输出文件相对于输入文件而言都是最新的。
增加Nuget依赖
新建一个Jenkins.Core项目,并生成Nuget包上传到Nuget服务器上。
关于Nuget如何打包可以看我之前的博客NuGet的使用、部署、搭建私有服务,这里不做讨论。
为了简单起见,创建一个和Jenkins.Common程序集一样的输出HelloWorld的方法,但是为了作为区分,分别略作修改。
Jenkins.Common的代码
public class HelloWolrdHelper
{
public static string GetString()
{
return "Hello World! Jenkins.Common";
}
}
Jenkins.Core的代码
public class HelloWolrdHelper
{
public static string GetString()
{
return "Hello World! Jenkins.Core";
}
}
程序结构如下
│ JenkinsTest.sln
│
├─.nuget
│ NuGet.Config
│ NuGet.exe
│ NuGet.targets
│
├─Jenkins.Common
│ │ HelloWolrdHelper.cs
│ │ Jenkins.Common.csproj
│ │
│ └─Properties
│ AssemblyInfo.cs
│
├─Jenkins.Core
│ │ HelloWorldHelper.cs
│ │ Jenkins.Core.csproj
│ │ Jenkins.Core.sln
│ │
│ └─Properties
│ AssemblyInfo.cs
│
└─JenkinsTest
│ App.config
│ JenkinsTest.csproj
│ packages.config
│ Program.cs
│
└─Properties
AssemblyInfo.cs
注意:Jenkins.Core我放到一个单独的项目中打包的。原本我是放到原项目一起。但是Nuget似乎有个bug,导致编译通不过。

因为控制台项目更新的时候会向JenkinsTest.csproj文件写入nuget包还原的指令
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
</Target>
而中解决方案的目录是在上一层目录
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>,最终编译的时候会校验pacakges是否存在已下载的包。通过路径$(SolutionDir)\packages\下查找,即..\\packages\。多了一个\导致存在包仍然报错查找不到,最终编译不过。
上传nuget包

然后从Nuget本地nuget服务器上获取。

Program的代码增加新的helloworld输出
class Program
{
static void Main(string[] args)
{
Console.WriteLine(HelloWolrdHelper.GetString());
Console.WriteLine(Jenkins.Core.HelloWolrdHelper.GetString());
Console.ReadKey();
}
}
重新编译项目后上传代码到SVN后再次到Jenkins上构建项目。

可以看到构建失败了,去看下具体失败原因。
正在将文件从“obj\Release\Jenkins.Common.pdb”复制到“bin\Release\Jenkins.Common.pdb”。
12:51:14 已完成生成项目“D:\Program Files (x86)\Jenkins\workspace\test\Jenkins.Common\Jenkins.Common.csproj”(默认目标)的操作。
12:51:14 ResolveAssemblyReferences:
12:51:14 主引用“Jenkins.Core, Version=0.2.0.0, Culture=neutral, processorArchitecture=MSIL”。
12:51:14 C:\Program Files (x86)\MSBuild\14.0\bin\Microsoft.Common.CurrentVersion.targets(1820,5): warning MSB3245: 未能解析此引用。未能找到程序集“Jenkins.Core, Version=0.2.0.0, Culture=neutral, processorArchitecture=MSIL”。请检查磁盘上是否存在该程序集。 如果您的代码需要此引用,则可能出现编译错误。 [D:\Program Files (x86)\Jenkins\workspace\test\JenkinsTest\JenkinsTest.csproj]
12:51:14 用于 SearchPath“{HintPathFromItem}”。
12:51:14 已考虑使用“..\packages\Jenkins.Core.0.2.0\lib\net45\Jenkins.Core.dll”,但它不存在。
12:51:14 用于 SearchPath“{TargetFrameworkDirectory}”。
12:51:14 已考虑使用“C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\Jenkins.Core.winmd”,但它不存在。
12:51:14 已考虑使用“C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\Jenkins.Core.dll”,但它不存在
...
12:51:14 Program.cs(15,22): error CS0234: The type or namespace name 'Core' does not exist in the namespace 'Jenkins' (are you missing an assembly reference?) [D:\Program Files (x86)\Jenkins\workspace\test\JenkinsTest\JenkinsTest.csproj]
12:51:14 已完成生成项目“D:\Program Files (x86)\Jenkins\workspace\test\JenkinsTest\JenkinsTest.csproj”(Build 个目标)的操作 - 失败。
12:51:15
12:51:15 生成失败。
12:51:15
12:51:15 “D:\Program Files (x86)\Jenkins\workspace\test\JenkinsTest\JenkinsTest.csproj”(Build 目标) (1) ->
12:51:15 (ResolveAssemblyReferences 目标) ->
12:51:15 C:\Program Files (x86)\MSBuild\14.0\bin\Microsoft.Common.CurrentVersion.targets(1820,5): warning MSB3245: 未能解析此引用。未能找到程序集“Jenkins.Core, Version=0.2.0.0, Culture=neutral, processorArchitecture=MSIL”。请检查磁盘上是否存在该程序集。 如果您的代码需要此引用,则可能出现编译错误。 [D:\Program Files (x86)\Jenkins\workspace\test\JenkinsTest\JenkinsTest.csproj]
12:51:15
12:51:15
12:51:15 “D:\Program Files (x86)\Jenkins\workspace\test\JenkinsTest\JenkinsTest.csproj”(Build 目标) (1) ->
12:51:15 (CoreCompile 目标) ->
12:51:15 Program.cs(15,22): error CS0234: The type or namespace name 'Core' does not exist in the namespace 'Jenkins' (are you missing an assembly reference?) [D:\Program Files (x86)\Jenkins\workspace\test\JenkinsTest\JenkinsTest.csproj]
12:51:15
12:51:15 1 个警告
12:51:15 1 个错误
12:51:15
12:51:15 已用时间 00:00:01.43
12:51:15 Build step 'Build a Visual Studio project or solution using MSBuild' marked build as failure
12:51:16 Finished: FAILURE
一开始会去..\packages\Jenkins.Core.0.2.0\lib\net45\Jenkins.Core.dll获取,但是因为没有包,后面就去遍历其他目录获取,最终都没有找到包导致编译失败。因此我们需要使用nuget,在MSBuild编译之前将包下载下来。
为了方便我将nuget一同上传到SVN上,SVN的程序目录如下
│ JenkinsTest.sln
│
├─.nuget
│ NuGet.Config
│ NuGet.exe
│ NuGet.targets
│
├─Jenkins.Common
│ │ HelloWolrdHelper.cs
│ │ Jenkins.Common.csproj
│ │
│ └─Properties
│ AssemblyInfo.cs
│
└─JenkinsTest
│ App.config
│ JenkinsTest.csproj
│ packages.config
│ Program.cs
└─Properties
AssemblyInfo.cs
由于Jenkins.Core可以理解为第三方依赖,不是和JenkinsTest放一起。
在Build配置中新增一项批处理命令,执行nuget包还原。如图拖动到编译之前。

根据我们目录结构调用".nuget/nuget.exe" restore JenkinsTest.sln命令使用nuget进行包还原。
由于.nuget目录带有.因此需要用双引号引起来执行。
再次编译仍然失败了。可以通过日志看到已经在编译前已经执行了脚本,但是没有从我们想要的地方获取包。
13:26:47 No changes for https://jakepc/svn/JenkinsTest/trunk/JenkinsTest since the previous build
13:26:47 [test] $ cmd /c call C:\WINDOWS\TEMP\jenkins8156278399083484284.bat
13:26:47
13:26:47 D:\Program Files (x86)\Jenkins\workspace\test>".nuget/nuget.exe" restore JenkinsTest.sln
13:26:47 MSBuild auto-detection: using msbuild version '15.9.21.664' from 'D:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\bin'.
13:26:48 Restoring NuGet package Jenkins.Core.0.2.0.
13:26:49 GET https://api.nuget.org/v3-flatcontainer/jenkins.core/0.2.0/jenkins.core.0.2.0.nupkg
13:26:49 NotFound https://api.nuget.org/v3-flatcontainer/jenkins.core/0.2.0/jenkins.core.0.2.0.nupkg 191ms
13:26:49 警告: Unable to find version '0.2.0' of package 'Jenkins.Core'.
13:26:49 C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\: Package 'Jenkins.Core.0.2.0' is not found on source 'C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\'.
13:26:49 https://api.nuget.org/v3/index.json: Package 'Jenkins.Core.0.2.0' is not found on source 'https://api.nuget.org/v3/index.json'.
13:26:49
13:26:49 警告: Unable to find version '0.2.0' of package 'Jenkins.Core'.
13:26:49 C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\: Package 'Jenkins.Core.0.2.0' is not found on source 'C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\'.
13:26:49 https://api.nuget.org/v3/index.json: Package 'Jenkins.Core.0.2.0' is not found on source 'https://api.nuget.org/v3/index.json'.
13:26:49
13:26:49
13:26:49 Errors in packages.config projects
13:26:49 Unable to find version '0.2.0' of package 'Jenkins.Core'.
13:26:49 C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\: Package 'Jenkins.Core.0.2.0' is not found on source 'C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\'.
13:26:49 https://api.nuget.org/v3/index.json: Package 'Jenkins.Core.0.2.0' is not found on source 'https://api.nuget.org/v3/index.json'.
13:26:49
13:26:49 NuGet Config files used:
13:26:49 D:\Program Files (x86)\Jenkins\workspace\test\.nuget\NuGet.Config
13:26:49 C:\WINDOWS\system32\config\systemprofile\AppData\Roaming\NuGet\NuGet.Config
13:26:49 C:\Program Files (x86)\NuGet\Config\Microsoft.VisualStudio.Offline.config
13:26:49
13:26:49 Feeds used:
13:26:49 https://api.nuget.org/v3/index.json
13:26:49 C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\
13:26:49
13:26:49 D:\Program Files (x86)\Jenkins\workspace\test>exit 1
13:26:49 Build step '执行 Windows 批处理命令' marked build as failure
13:26:50 Finished: FAILURE
指定nuget包下载源地址。
找到Nuget.exe的配置Nuget.Config,在configuration节点内增加packageSources节点。
<packageSources>
<add key="Jake Package source" value="http://127.0.0.1:10080/nuget" />
</packageSources>
再次编译,终于编译成功了,日志如下。
13:38:08 No changes for https://jakepc/svn/JenkinsTest/trunk/JenkinsTest since the previous build
13:38:08 [test] $ cmd /c call C:\WINDOWS\TEMP\jenkins5326599668058283263.bat
13:38:08
13:38:08 D:\Program Files (x86)\Jenkins\workspace\test>".nuget/nuget.exe" restore JenkinsTest.sln
13:38:08 MSBuild auto-detection: using msbuild version '15.9.21.664' from 'D:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\bin'.
13:38:09 Restoring NuGet package Jenkins.Core.0.2.0.
13:38:09 Adding package 'Jenkins.Core.0.2.0' to folder 'D:\Program Files (x86)\Jenkins\workspace\test\packages'
13:38:09 Added package 'Jenkins.Core.0.2.0' to folder 'D:\Program Files (x86)\Jenkins\workspace\test\packages'
13:38:09
13:38:09 NuGet Config files used:
13:38:09 D:\Program Files (x86)\Jenkins\workspace\test\.nuget\NuGet.Config
13:38:09 C:\WINDOWS\system32\config\systemprofile\AppData\Roaming\NuGet\NuGet.Config
13:38:09 C:\Program Files (x86)\NuGet\Config\Microsoft.VisualStudio.Offline.config
13:38:09
13:38:09 Feeds used:
13:38:09 C:\WINDOWS\system32\config\systemprofile\.nuget\packages\
13:38:09 http://127.0.0.1:10080/nuget
13:38:09 https://api.nuget.org/v3/index.json
13:38:09 C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\
13:38:09
13:38:09 Installed:
13:38:09 1 package(s) to packages.config projects
13:38:09
13:38:09 D:\Program Files (x86)\Jenkins\workspace\test>exit 0
13:38:09 Path To MSBuild.exe: C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe
13:38:09 Executing the command cmd.exe /C " "C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" /t:Build /p:Configuration=Release JenkinsTest/JenkinsTest.csproj " && exit %%ERRORLEVEL%% from D:\Program Files (x86)\Jenkins\workspace\test
13:38:09 [test] $ cmd.exe /C " "C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" /t:Build /p:Configuration=Release JenkinsTest/JenkinsTest.csproj " && exit %%ERRORLEVEL%%
结语
通过N次尝试,最终完成了.Net开发下Jenkins进行持续集成。总结起来如下:
- 安装Java环境,由于我本地已有java环境,因此该步骤跳过。
- 安装MSBuild,由于我本地已安装过VS,因此该步骤跳过。
- 下载Nuget,由于我本地已安装VS,同时已安装过Nuget,因此该步骤跳过。
- 安装Jenkins,并安装MSbuild插件。
- 修改Jenkins的MSBuild插件的配置。
- 新建一个工程,修改配置
- 选择源码管理,我本地是SVN,因此选择SVN(增加登录凭据)
- 增加windows批处理脚本用于Nuget下载库包。(在Nuget.Config中增加自己的包服务地址)
- 增加MSBuild编译VS的项目
通过以上步骤,基本就完成了自动编译的功能。但是光编译还是不够的,最终还要完成自动跑单元测试,下一篇博客再进行研究。
参考文档
- Jenkins部署.net自动化构建
- 为 Jenkins 配置 .NET 持续集成环境
- 浅谈.net jenkins svn下自动化集成环境安装 搭建 配置
- jenkins持续集成原理
- Jenkins结合.net平台工具之Nuget
- Make Jenkins aware of custom NuGet Package Source
微信扫一扫二维码关注订阅号杰哥技术分享
本文地址:https://www.cnblogs.com/Jack-Blog/p/10291612.html
作者博客:杰哥很忙
欢迎转载,请在明显位置给出出处及链接
Jenkins持续集成学习-Windows环境进行.Net开发1的更多相关文章
- Jenkins持续集成学习-Windows环境进行.Net开发2
目录 Jenkins持续集成学习-Windows环境进行.Net开发2 目录 前言 目标 使用 .Net Stardard 单元测试 流程 手动执行单元测试 自动执行单元测试 单元测试报告 上传Nug ...
- Jenkins持续集成学习-Windows环境进行.Net开发3
目录 Jenkins持续集成学习-Windows环境进行.Net开发3 目录 前言 目标 优化nuget包生成流程 自动触发构建 Jenkins定时轮询触发 SVN客户端钩子触发 SVN服务器钩子触发 ...
- Jenkins持续集成学习-Windows环境进行.Net开发4
目录 Jenkins持续集成学习-Windows环境进行.Net开发4 目录 前言 目标 Github持续集成 提交代码到Github 从Github更新代码 git上显示构建状态 自动触发构建 Gi ...
- Jenkins持续集成学习-搭建jenkins问题汇总
目录 Jenkins持续集成学习5-搭建jenkins问题汇总 目录 前言 问题列表 nuget还原包问题 编译问题 SVN更新问题 参考文档 Jenkins持续集成学习5-搭建jenkins问题汇总 ...
- Windows系统的Jenkins持续集成环境
Windows系统的Jenkins持续集成环境 如题:本文将介绍如何在Windows环境下运用Jenkins部署持续集成环境.之所以写本文,是因为在最近工作当中,学习使用Jenkins时,确实遇到了一 ...
- windows部署jenkins持续集成maven测试项目不能访问测试报告
买了一台阿里云的服务器用于练习maven test项目,系统版本wiondows server 2012,将jenkins war包部署在Tomcat服务器上,项目构建后,生成的报告在C:\Windo ...
- windows系统下构建Jenkins持续集成
环境准备 windows10+tomcat+python3.x(安装方法自行百度) 安装Jenkins 从https://jenkins.io/download/ 下载war包 将war包放到tomc ...
- Jenkins持续集成(上)-Windows下安装Jenkins
环境:Windows 2008 R2.Jenkins2.235.1: 概要 前面写过一篇文章,<自动发布-asp.net自动发布.IIS站点自动发布(集成SLB.配置管理.Jenkins)> ...
- Docker+Jenkins持续集成环境(4):使用etcd+confd实现容器服务注册与发现
前面我们已经通过jenkins+docker搭建了基本的持续集成环境,实现了服务的自动构建和部署,但是,我们遇到一个问题,jenkins构建出来的镜像部署后,需要通过ip:port去访问,有什么更好的 ...
随机推荐
- java多线程系列12 ConcurrentHashMap CopyOnWriteArrayList 简介
我们知道 ,hashmap 和 arraylist 是线程不安全的 在多线程环境下有数据安全问题, 当然 我们可以通过Collections的一些方法把他们变成线程安全的, Collections.s ...
- spring用注解配置,不用XML
//首先装载一个配置类AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MyCon ...
- 20175316盛茂淞 《java程序设计》第三周课堂测试错题总结
20175316盛茂淞 <java程序设计>第三周课堂测试错题总结 出现问题 错题总结 题目1 在Ubuntu中用自己的有位学号建一个文件,教材p87 Example4_15 1. 修改代 ...
- VS“新建网站”与“新建Asp.Net Web 应用程序”的区别
WebApplication(新建Asp.Net Web 应用程序)编程模型的优点:针对大型网站 1.编译速度网站编译速度快,使用了增量编译模式,仅仅只有文件被修改后,这部分才会被增量编译进去. 2. ...
- 2019.02.11 bzoj4767: 两双手(组合数学+容斥dp)
传送门 题意简述:你要从(0,0)(0,0)(0,0)走到(ex,ey)(ex,ey)(ex,ey),每次可以从(x,y)(x,y)(x,y)走到(x+ax,y+ay)(x+ax,y+ay)(x+ax ...
- UVaLive 4064 Magnetic Train Tracks (极角排序)
题意:给定 n 个不三点共线的点,然后问你能组成多少锐角或者直角三角形. 析:可以反过来求,求有多少个钝角三角形,然后再用总的减去,直接求肯定会超时,但是可以枚举每个点,以该点为钝角的那个顶点,然后再 ...
- Codeforces Round #541--1131F. Asya And Kittens(基础并查集)
https://codeforces.com/contest/1131/problem/F #include<bits/stdc++.h> using namespace std; int ...
- AdminLTE用django部署
前言 最近从网上看到AdminLTE这个web前端的主题挺好的,我平时用python就是写一些后台,准备以后就用这个框架了,这里就是把这个用django初始化一下这个项目. 基础环境介绍 Python ...
- jupyter Notebook环境搭建
1.什么是jupyter notebook jupyter notebook是一种 Web 应用,能让用户将说明文本.数学方程.代码和可视化内容全部组合到一个易于共享的文档中.它可以直接在代码旁写出叙 ...
- AssetBundle使用心得【资源加载】
0.资源加载方式 静态资源 Asset下所有资源称为静态资源 Resources资源 Resources目录下,通过实例化得到的资源 AssetBundle资源 又称为增量更新资源 1.什么是Asse ...
