https://novemberfive.co/blog/windows-jenkins-cake-tutorial/

Where we started, or: why Cake took the cake

Before we started using Cake to build our Windows 10 applications, we used a similar setup, but instead of Cake we used an MSBuild script.

What went wrong? Well, nothing! We could do everything what we wanted with the MSBuild script. In fact, the Cake build script does exactly the same thing our old MSBuild file took care of.

So why did we replace the MSBuild script with Cake?

The answer is pretty simple: MSBuild uses xml to configure the build task. Cake build scripts are written in C#. As C# developers we write C# code on a daily basis, which means Cake, unlike MSBuild, feels instantly familiar (and doesn’t have us researching syntax on a regular basis). This means writing and changing the build scripts is easier, quicker, and fewer mistakes are made. It also means that any developer can make these changes, without having to go through a learning curve first.

Some more advantages for us were the fact that we can make identical builds wherever we want with Cake (on our local machine, Jenkins, …) and the fact that it offers a Visual Studio Code plugin with syntax highlighting.

Our recipe: application lifecycle management via Git, Jenkins and Cake for UWP

So how does our solution work?

Jenkins fetches the changes from Git via polling; gets and commits any new translations from Phraseapp; and starts the default Cake task.

Cake can then:

  • clean the solution
  • take care of the semantic versioning, based on git branches
  • restore the nuget package
  • perform the actual build of the applications
  • run unit tests
  • create an app package bundle
  • sign the app package bundle

At this point, Jenkins kicks back into action. It archives the packages, in our case to Dropbox and to a dedicated server, and uploads the beta builds to Hockey app. It then notifies the developers and/or project manager via Slack when new builds are available or have failed.

Now, let’s get down to the details to help you get the same workflow!

Preparing your Cake

Step 1: Preparing Git

Only files necessary for building the application are checked in with Git. All other files, like binaries and helper files, are ignored. We do this via a gitignore. We have to ignore following folders: tools and build (a custom folder we created to temporarily store the build artifacts).

To do this, simply add the following lines to the gitignore file; you can place them anywhere in the file.

#Cake
build
tools

Step 2: Acquiring Cake

You can download Cake from the website, install via Powershell or use the Visual Code plugin to acquire it. You only need two files to start working with Cake. You can place these files anywhere in the repository, but we prefer to place them at the root.

  • build.ps1: The bootstrapper powershell script. This file downloads Cake and its dependencies when needed. It contains a basic configuration and will start Cake.
  • build.cake: This file contains our buildscript. It will have some basic configuration by default.

With these files in place, we can run Cake for the first time. To do so, start powershell with administrator rights. Go to the root of your repository, for example:

cd c:\projects\ExampleApp

Execute the bootstrapper script:

.\build.ps1

That’s it! You should now see something like this:

Step 3: Customizing the bootstrapper

In our company, we use three build types (build configurations in Visual Studio), which are aligned on all platforms:

  • Debug: For development only
  • Beta: For beta distribution and testing
  • Release: The actual store build

The bootstrapper file (build.ps1) supports only Debug and Release by default. To better suit our needs, we replaced [ValidateSet("Release", "Debug")] with [ValidateSet("Release", "Beta")].

Step 4: Making our Cake file

First, we clean up the solution and remove the old build artifacts, to make sure we start with a clean slate:

Task("Clean")
.Does(() =>
{
// Remove old build artifacts from the build output folder
CleanDirectories(projectPath + "/AppPackages"); // Clean the solution, uwp supports multiple platforms
foreach(var platform in supportedPlatforms)
{
MSBuild(solutionFile, configurator =>
configurator.SetConfiguration(buildConfiguration)
.SetVerbosity(Verbosity.Quiet)
.SetMSBuildPlatform(MSBuildPlatform.x86)
.SetPlatformTarget(platform)
.WithTarget("Clean"));
}
});

Next, we set up the semantic version of the app, using the GitVersion Tool. This version will be added in AssemblyInfo.cs. The GitVersion Tool is not part of the default Cake installation, so we have to add an import on top of the Cake.file:

#tool "nuget:?package=GitVersion.CommandLine"

Task("Versioning")
.IsDependentOn("Clean")
.Does(() =>
{
GitVersion(new GitVersionSettings {
UpdateAssemblyInfo = true
});
});

The next step is using a default command to restore the packages.

Task("NugetPackageRestore")
.IsDependentOn("Versioning")
.Does(() =>
{
NuGetRestore(solutionFile);
});

After this, we define the actual build. We do this multiple times, once for each platform.

Task("Build")
.IsDependentOn("NugetPackageRestore")
.Does(()=>{
foreach(var platform in supportedPlatforms)
{
MSBuild(solutionFile, configurator =>
configurator.SetConfiguration(buildConfiguration)
.SetVerbosity(Verbosity.Quiet)
.SetMSBuildPlatform(MSBuildPlatform.x86)
.SetPlatformTarget(platform)
.WithTarget("Build"));
}
});

After the build of the application, we run all our tests. In this example we run only unit tests. All the names of our unit test projects are ending with “.UnitTests”. We can use a wildcard to find all our test projects.

Task("Test")
.IsDependentOn("Build")
.Does(()=>{
MSTest("./Tests/**/*.UnitTests.dll");
});

As final step we sign the generated appxbundle. This is needed to install the app on Windows 10 mobile. If you want to install the app on a PC, just zip all files, because HockeyApp supports only one file for each app.

Task("Sign")
.IsDependentOn("Test")
.Does(()=>{ if (!buildConfiguration.Equals("Release"))
{
var appxBundles = GetFiles(projectPath + "/AppPackages/**/*.appxbundle"); Sign(appxBundles, new SignToolSignSettings {
TimeStampUri = new Uri("http://timestamp.digicert.com"),
CertPath = "certificate.pfx",
Password = "Password"
});
}
});

The full file should look like this:

Jenkins serving Cake: our recipe for Windows的更多相关文章

  1. Jenkins持续集成(上)-Windows下安装Jenkins

    环境:Windows 2008 R2.Jenkins2.235.1: 概要 前面写过一篇文章,<自动发布-asp.net自动发布.IIS站点自动发布(集成SLB.配置管理.Jenkins)> ...

  2. jenkins简单安装及配置(Windows环境)

    jenkins是一款跨平台的持续集成和持续交付.基于Java开发的开源软件,提供任务构建,持续集成监控的功能,可以使开发测试人员更方便的构建软件项目,提高工作效率. Windows平台下,一般安装方法 ...

  3. Jenkins的详细安装及使用--windows

    操作环境:Windows 一.环境准备 1 安装JDK 本文采用jdk-8u111-windows-x64.exe: 2 配置tomcat 本文采用tomcat8,无需安装,配置JAVA_HOME及J ...

  4. 微软开放技术发布开源 Jenkins 插件以将 Windows Azure Blob 服务用的开作存储库

     发布于 2014-02-10 作者 陈 忠岳 持续集成 (CI) 的历史源远流长, 其宗旨在于软件团队在敏捷环境中不断将他们的工作整合为持续构建.管理 CI 进程的工具已存在一段时间.过去几年中 ...

  5. NetBeans GUI tests on Jenkins + Windows (转)

    from http://forgetfulprogrammer.wordpress.com/tag/interact-with-desktop/ Running NetBeans applicatio ...

  6. 【最新】Android使用jenkins全自动构建打包-Windows版本(Android,Jenkins,360加固,Email,QRcode,参数构建,蒲公英)

    Android打包喝咖啡系列(Windows版) 这篇博客主要讲述的内容: 1.windows上部署Jenkins https://jenkins.io 2.基于SVN或Git https://git ...

  7. jenkins windows slave 构建c/c++代码

    关于如何再centos系统上的jenkins master下搭建windows系统的jenkins slave节点,本篇博客中不做介绍,如果有需要的话,请参考我的另外一篇博客,在其中介绍了不同系统的j ...

  8. Installing Jenkins as a Windows service

    Install Jenkins as a Windows service NOTE: if you installed Jenkins using the windows installer, you ...

  9. jenkins轻松玩玩远程windows的进程

    飞测说:在持续集成的路上走了小半年,遇到的一些问题,今天来说一个折腾好几天的问题,和大家交流.我们都知道C#语言开发的,部署站点在IIS上,但是用持续集成的时候,发现经常因为w3wp进程导致文件无法覆 ...

随机推荐

  1. 使用.NET向webService传double、int、DateTime 服务器得到的数据时null的问题(转http://blog.csdn.net/slimboy123/article/details/4366701)

    用C#.NET调用Java开发的WebService时,先在客户端封装的带有int属性的对象,当将该对象传到服务器端时,服务器端可以得到string类型的属性值,却不能得到int类型.double和D ...

  2. Echo团队团队展示

    班级:软件工程1916|W 作业:团队作业第一次-团队展示 团队名称:Echo 课程目标:展示团队 成员信息 队员学号 队员姓名 个人博客地址 备注 221600418 黄少勇 http://www. ...

  3. 20155228 实验五 Android开发基础

    20155228 实验五 Android开发基础 实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统. 实验要求 1.没有Linux基础的同学建议先学习< ...

  4. Apache+Tomcat+Memcached实现会话保持

    会话保持的三种方式 Session sticky会话绑定:通过在前端调度器的配置中实现统一session发送至同一后发端服务器 Session cluster会话集群:通过配置Tomcat保持所有To ...

  5. 【CDH学习之一】CDH简介

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 zookeeper-3.4.11 一.CDH在商业应用中,对 ...

  6. Class__Two

    今天老师要求做查找英文文章中最高频的词  文章用文本储存 import java.io.BufferedReader;import java.io.File;import java.io.FileIn ...

  7. GIT库代码管理规范

    GIT库代码管理规范 一. 规范要求 1. 每个项目建立单独的GIT库.每个GIT库包括两条线,命名规则如下: 开发线(测试):项目名称_DEV 生产线(正式):项目名称 2. 每条线只允许增量不允许 ...

  8. 几种线程安全的Map解析

    转载自 面试必问-几种线程安全的Map解析 HashMap线程安全的吗? Java中平时用的最多的Map集合就是HashMap了,它是线程不安全的. 看下面两个场景: 1.当用在方法内的局部变量时,局 ...

  9. 环绕声5.1ch

    简单说5.1ch就是数字影院中的音频输出术语,环绕立体声输出,让人有置身电影院的感觉,由五个音箱(两个主音箱.两个环绕箱.一个中置箱)+一个低音炮组成 5.1环绕声包括了5个全频带声道和 1个低频效果 ...

  10. (2018干货系列十一)最新iOS学习路线整合

    怎么学iOS iOS是由苹果公司开发的移动操作系统,以xcode为主要开发工具,具有简单易用的界面.令人惊叹的功能,以及超强的稳定性,已经成为iPhone.iPad 和iPod touch 的强大基础 ...