C#

从零开始用Jenkins搭建.NET CI环境

Goodbye

Posted by Zeusro on February 26, 2016
👈🏻 Select language

Image

准备工作

安装之后记得安装MSbuild,gitlab,gitlab-hook插件

服务器上面,需要安装.net环境,git

全局设置

  • Git plugin

瞎填一个user name和email就行

Global Tool Configuration

不知道什么时候开始,插件的设置移动到了这个地方,这里需要设置几个地方

  • MSBuild

Image

  • Git

主要是设置git的可执行文件,由于我有加到path上,所以忽略

Credentials

证书的设置比较奇葩

需要点击(global),然后在弹出的内容里面点击add Credentials

Job的配置

  • SSH的问题

我们都知道每一个Windows命令其实有着角色附在上面的.以前用git的时候,发现自己是有加ssh私钥到服务器上面的,但是git push失败,那也其实就是因为我们用的角色有问题.

Jenkins用的是Local System account.在用ssh key连接我们gitlab上面的项目时,要把我们系统用户上面的.ssh复制到Jenkins使用的用户用的文件夹.

但是在这之前.需要ssh(在git的安装目录里面有这个exe)一下我们的gitlab主机

1
ssh.exe -T [email protected]

确保known_hosts里面有了这个主机后,把整个.ssh文件夹复制到C:\Windows\SysWOW64\config\systemprofile,以及C:\Windows\System32\config\systemprofile这个目录

小技巧

看到permission denied的话,加多一句

1
ssh-keygen -t rsa -C "[email protected]"

看一下know host加到哪个目录,然后把自己生成的丢过去这个导致失败的目录就行.

  • 源码管理

在安装了上文提到的必备插件之后,源码里面就可以选择git,这里面我用了ssh,所以是下图这种格式

Image

重点:

这个证书别用计算机用户那个SSH.我们知道,一个gitlab只允许一台机子一个ssh,同一个ssh不能添加到多个账户.这样就会有一个问题.我们这台编译机要连源码的项目,于是需要一个ssh key.但是它编译后的结果,在Windows中我是用git去做目录同步的,于是需要另外一个ssh 去连我的机器人账户,这2个ssh key一样的话,将会导致一个步骤失败.

源码浏览器,其实是跳到我们的gitlab对应项目上,所以用http

Image

  • 触发器

这个很重要.我们根据自己的需要打勾以及选择之后

Image

复制Build when a change is pushed to GitLab. GitLab CI Service URL后面的url.

回到这个项目对应gitlab项目设置,在setting→_→web hooks里面填上这个URL,并按需要打勾,确认无误后添加.

这样当我们gitlab上面的源码有变动时,就会触发web hook.告诉我们的CI该干活了.

Image

  • MSBuild

这里主要需要学习MSBuild的文法.当初我建这个CI的目的.纯粹是为了编译网站.下面这个几个就是常用的,非常容易理解.

1
2
3
4
5
/p:PublishProfile="F:xxxxx.pubxml"
/p:DeployOnBuild=true
/p:Configuration=Release
/p:VisualStudioVersion=12.0  
/property:TargetFrameworkVersion=v4.5

pubxml文件在我们选择发布时就会生成一个.这个自己看,也非常容易理解.

我建议在自己开发的机器msbuild一遍.

一般来讲.我们的msbuild位于*cd C:\Windows\Microsoft.NET\Framework64\v4.0.30319*

然后

1
2
3
4
5
6
7
8
9
10
cd C:\Windows\Microsoft.NET\Framework64\v4.0.30319\
MSBuild.exe "C:\xxxxx.sln" \
/p:PublishProfile="C:\xxxxx.pubxml" \
/p:DeployOnBuild=true \
/p:Configuration=Release \
/p:VisualStudioVersion=12.0 \
/property:TargetFrameworkVersion=v4.5 \
/verbosity:n \
/t:Rebuild \
/maxcpucount:16

我个人推荐的配置是

1
2
3
4
5
6
7
/p:PublishProfile="C:\xxxxx.pubxml" \
/p:DeployOnBuild=true \
/p:Configuration=Release \
/p:VisualStudioVersion=12.0 \
/property:TargetFrameworkVersion=v4.5 \
/verbosity:n \
/maxcpucount:16

通过编译后上服务器一遍来说没问题

但是,我特么就是有问题啊!!!!

  • nuget feed的问题

因为我项目里面用了我私有的nuget包,这个包在nuget的官方源头是找不到的.所以我需要像在VS那样,在CI server上面配置自己的feed

C:\Windows\SysWOW64\config\systemprofile\AppData\Roaming\NuGet中找到NuGet.Config,改为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageRestore>
    <add key="enabled" value="True" />
    <add key="automatic" value="True" />
  </packageRestore>
  <bindingRedirects>
    <add key="skip" value="False" />
  </bindingRedirects>
  <packageSources>
    <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
    <add key="我的后宫" value="D:\nuget" />     
  </packageSources>
  <activePackageSource>
    <add key="All" value="(Aggregate source)" />
  </activePackageSource>
</configuration>
  • 编译失败问题

这个不能忍了.妹的在我的电脑一点问题都没有,在server上死活不给编译过去.后来重点排查了程序中的第三方dll和我的后宫nuget包,发现错误都出在那里.之所以在开发机上面没有发觉,是因为开发机上面的nuget依赖有本地缓存.编译的时候直接跳过去了.于是历经了35次后,本宝宝的程序终于在CI上面编译成功

  • git没有权限clone不了项目的问题

这个是job的配置出错.job的git配置里面,选择SSH Username with private key,直接输入私钥,要完整复制 ~/.ssh/id_isa里面的内容。即是包括首尾那个没有意义的分割符!

血泪教训

  • 不要使用gitlab的test hook

当时我项目有2个分支,我要生成的是某个分支的,但是点了一下test hook.我擦,主分支的东西都被拉过去了.

异常处理

anonymous没有Overall/Administer权限

http://stackoverflow.com/questions/22833665/hudson-security-accessdeniedexception2-anonymous-is-missing-the-overall-admini

误设置了安全选项导致无法登录进去

修改

1
<authorizationStrategy class="hudson.security.AuthorizationStrategy$Unsecured"/>
1
2
3
cd jenkins目录
# 重启
jenkins restart   # Forces

更改Jenkins目录

Stop Jenkins service

Move C:\Users\Coola.jenkins folder to d:\Jenkins

Using regedit, change HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Jenkins\ImagePath to “d:\Jenkins\jenkins.exe”

Start service

一些配置

  • 这个权限对应“任何用户可以做任何事(没有任何限制)”
1
<authorizationStrategy class="hudson.security.AuthorizationStrategy$Unsecured"/>
  • 这个权限对应“登录用户可以做任何事”
1
<authorizationStrategy class="hudson.security.FullControlOnceLoggedInAuthorizationStrategy"/>

插件选用

插件名 用途 介绍url
proxy 代理  
gitlab 用于与gitlab集成 https://wiki.jenkins-ci.org/display/JENKINS/GitLab+Plugin
publish-over-ssh 通过ssh连接其他Linux机器  
Mercurial 构建工具 https://wiki.jenkins-ci.org/display/JENKINS/Mercurial+Plugin
gitlab-hook Enables Gitlab web hooks to be used to trigger SMC polling on Gitlab projects https://wiki.jenkins-ci.org/display/JENKINS/GitLab+Hook+Plugin

参考链接

  1. 取消安全选项
  2. 配置权限
  3. 用 GitLab + Jenkins 搭建 CI
  4. Jenkins搭建.NET自动编译测试与发布环境
  5. 利用Jenkins+Gitlab搭建持续集成(CI)环境
  6. 用MSBuild和Jenkins搭建持续集成环境(1)
  7. 用MSBuild和Jenkins搭建持续集成环境(2)
  8. Jenkins进阶系列
  9. Jenkins CI integration
  10. GitLab Documentation
  11. Configuring your repo for Jenkins CI
  12. Jenkins git clone via SSH on Windows 7 x64
  13. 使用Jenkins搭建持续集成服务
  14. Hosting Your Own NuGet Feeds
  15. Using MSBuild.exe to “Publish” a ASP.NET MVC 4 project with the cmd line
  16. 项目开发环境搭建手记(5.Jenkins搭建)
  17. MSBuild DeployOnBuild=true not publishing
  18. How to change Jenkins default folder on Windows
  19. Jenkins环境变量

Image

Preparation

After installation, remember to install MSBuild, GitLab, and GitLab-hook plugins.

On the server, you need to install the .NET environment and Git.

Global Settings

  • Git plugin

Just fill in any user name and email.

Global Tool Configuration

I don’t know when it started, but plugin settings moved to this location. You need to configure several things here:

  • MSBuild

Image

  • Git

Mainly to set the Git executable file. Since I’ve added it to the PATH, I’ll skip this.

Credentials

The credential settings are quite unusual.

You need to click (global), then click “Add Credentials” in the popup.

Job Configuration

  • SSH Issues

We all know that every Windows command actually has a role attached to it. When I used Git before, I found that I had added an SSH private key to the server, but Git push failed. This was actually because the role we were using had issues.

Jenkins uses the Local System account. When connecting to our GitLab project using an SSH key, you need to copy the .ssh folder from your system user to the folder used by the Jenkins user.

But before that, you need to SSH (there’s an exe in the Git installation directory) to our GitLab host:

1
ssh.exe -T [email protected]

After ensuring that known_hosts contains this host, copy the entire .ssh folder to C:\Windows\SysWOW64\config\systemprofile and C:\Windows\System32\config\systemprofile.

Tip

If you see “permission denied”, add this command:

1
ssh-keygen -t rsa -C "[email protected]"

Check which directory the known host was added to, then copy your generated key to the directory that caused the failure.

  • Source Code Management

After installing the required plugins mentioned above, you can select Git in the source code section. I used SSH here, so the format is as shown in the image below:

Image

Important:

Don’t use the SSH from the computer user for this credential. We know that a GitLab only allows one SSH per machine, and the same SSH cannot be added to multiple accounts. This creates a problem: our build machine needs to connect to the source code project, so it needs an SSH key. However, for the compiled results, I use Git for directory synchronization in Windows, so I need another SSH to connect to my robot account. If these two SSH keys are the same, one step will fail.

The source browser actually jumps to our corresponding GitLab project, so use HTTP:

Image

  • Triggers

This is very important. After checking and selecting according to our needs:

Image

Copy the URL after “Build when a change is pushed to GitLab. GitLab CI Service URL”.

Go back to the corresponding GitLab project settings, fill in this URL in Settings → Web Hooks, check as needed, and add after confirming.

This way, when there are changes to the source code on our GitLab, it will trigger the web hook and tell our CI to get to work.

Image

  • MSBuild

Here you mainly need to learn MSBuild syntax. When I built this CI, my purpose was purely to compile websites. The following are commonly used and very easy to understand:

1
2
3
4
5
/p:PublishProfile="F:xxxxx.pubxml"
/p:DeployOnBuild=true
/p:Configuration=Release
/p:VisualStudioVersion=12.0  
/property:TargetFrameworkVersion=v4.5

The pubxml file is generated when we choose to publish. You can check it yourself, and it’s very easy to understand.

I recommend running MSBuild once on your development machine.

Generally, our MSBuild is located at *cd C:\Windows\Microsoft.NET\Framework64\v4.0.30319*

Then:

1
2
3
4
5
6
7
8
9
10
cd C:\Windows\Microsoft.NET\Framework64\v4.0.30319\
MSBuild.exe "C:\xxxxx.sln" \
/p:PublishProfile="C:\xxxxx.pubxml" \
/p:DeployOnBuild=true \
/p:Configuration=Release \
/p:VisualStudioVersion=12.0 \
/property:TargetFrameworkVersion=v4.5 \
/verbosity:n \
/t:Rebuild \
/maxcpucount:16

My recommended configuration is:

1
2
3
4
5
6
7
/p:PublishProfile="C:\xxxxx.pubxml" \
/p:DeployOnBuild=true \
/p:Configuration=Release \
/p:VisualStudioVersion=12.0 \
/property:TargetFrameworkVersion=v4.5 \
/verbosity:n \
/maxcpucount:16

After compiling and deploying to the server, it should generally be fine.

But, I had problems!!!!

  • NuGet Feed Issues

Because my project uses my private NuGet packages, which cannot be found in the official NuGet source, I need to configure my own feed on the CI server, just like in VS.

Find NuGet.Config in C:\Windows\SysWOW64\config\systemprofile\AppData\Roaming\NuGet and change it to:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageRestore>
    <add key="enabled" value="True" />
    <add key="automatic" value="True" />
  </packageRestore>
  <bindingRedirects>
    <add key="skip" value="False" />
  </bindingRedirects>
  <packageSources>
    <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
    <add key="My Private Feed" value="D:\nuget" />     
  </packageSources>
  <activePackageSource>
    <add key="All" value="(Aggregate source)" />
  </activePackageSource>
</configuration>
  • Build Failure Issues

This is unacceptable. It worked fine on my computer, but the server absolutely refused to compile. Later, I focused on checking third-party DLLs and my private NuGet packages in the program, and found that all errors were there. The reason I didn’t notice on the development machine was because the NuGet dependencies on the development machine had local cache. The compilation directly skipped them. After 35 attempts, my program finally compiled successfully on CI.

  • Git Permission Issues - Cannot Clone Project

This is a job configuration error. In the job’s Git configuration, select “SSH Username with private key”, directly enter the private key, and completely copy the content from ~/.ssh/id_rsa. This includes the meaningless separators at the beginning and end!

Lessons Learned

  • Don’t use GitLab’s test hook

At that time, my project had 2 branches. I wanted to generate from a specific branch, but I clicked the test hook. Damn it, the main branch content was all pulled over.

Exception Handling

Anonymous Missing Overall/Administer Permission

http://stackoverflow.com/questions/22833665/hudson-security-accessdeniedexception2-anonymous-is-missing-the-overall-admini

Mistakenly Set Security Options Causing Unable to Log In

Modify:

1
<authorizationStrategy class="hudson.security.AuthorizationStrategy$Unsecured"/>
1
2
3
cd jenkins directory
# Restart
jenkins restart   # Forces

Change Jenkins Directory

Stop Jenkins service

Move C:\Users\Coola.jenkins folder to d:\Jenkins

Using regedit, change HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Jenkins\ImagePath to “d:\Jenkins\jenkins.exe”

Start service

Some Configurations

  • This permission corresponds to “Any user can do anything (no restrictions)”
1
<authorizationStrategy class="hudson.security.AuthorizationStrategy$Unsecured"/>
  • This permission corresponds to “Logged-in users can do anything”
1
<authorizationStrategy class="hudson.security.FullControlOnceLoggedInAuthorizationStrategy"/>

Plugin Selection

Plugin Name Purpose Introduction URL
proxy Proxy  
gitlab For GitLab integration https://wiki.jenkins-ci.org/display/JENKINS/GitLab+Plugin
publish-over-ssh Connect to other Linux machines via SSH  
Mercurial Build tool https://wiki.jenkins-ci.org/display/JENKINS/Mercurial+Plugin
gitlab-hook Enables Gitlab web hooks to be used to trigger SMC polling on Gitlab projects https://wiki.jenkins-ci.org/display/JENKINS/GitLab+Hook+Plugin
  1. Disable Security
  2. Configure Permissions
  3. Building CI with GitLab + Jenkins
  4. Jenkins .NET Automatic Build Test and Release Environment
  5. Building Continuous Integration (CI) Environment with Jenkins+Gitlab
  6. Building Continuous Integration Environment with MSBuild and Jenkins (1)
  7. Building Continuous Integration Environment with MSBuild and Jenkins (2)
  8. Jenkins Advanced Series
  9. Jenkins CI integration
  10. GitLab Documentation
  11. Configuring your repo for Jenkins CI
  12. Jenkins git clone via SSH on Windows 7 x64
  13. Building Continuous Integration Service with Jenkins
  14. Hosting Your Own NuGet Feeds
  15. Using MSBuild.exe to “Publish” a ASP.NET MVC 4 project with the cmd line
  16. Project Development Environment Setup Notes (5. Jenkins Setup)
  17. MSBuild DeployOnBuild=true not publishing
  18. How to change Jenkins default folder on Windows
  19. Jenkins Environment Variables

Image

Подготовка

После установки не забудьте установить плагины MSBuild, GitLab и GitLab-hook.

На сервере необходимо установить среду .NET и Git.

Глобальные настройки

  • Git plugin

Просто заполните любое имя пользователя и email.

Global Tool Configuration

Не знаю, когда это началось, но настройки плагинов переместились в это место. Здесь нужно настроить несколько вещей:

  • MSBuild

Image

  • Git

В основном для настройки исполняемого файла Git. Поскольку я добавил его в PATH, я пропущу это.

Credentials

Настройки учетных данных довольно необычны.

Нужно нажать (global), а затем нажать “Add Credentials” во всплывающем окне.

Конфигурация Job

  • Проблемы с SSH

Мы все знаем, что каждая команда Windows фактически имеет прикрепленную роль. Когда я использовал Git раньше, я обнаружил, что добавил SSH-приватный ключ на сервер, но git push не удался. Это было потому, что роль, которую мы использовали, имела проблемы.

Jenkins использует Local System account. При подключении к нашему проекту GitLab с помощью SSH-ключа необходимо скопировать папку .ssh из вашего системного пользователя в папку, используемую пользователем Jenkins.

Но перед этим нужно выполнить SSH (есть exe в директории установки Git) к нашему хосту GitLab:

1
ssh.exe -T [email protected]

После того, как убедитесь, что known_hosts содержит этот хост, скопируйте всю папку .ssh в C:\Windows\SysWOW64\config\systemprofile и C:\Windows\System32\config\systemprofile.

Совет

Если вы видите “permission denied”, добавьте эту команду:

1
ssh-keygen -t rsa -C "[email protected]"

Проверьте, в какой директории был добавлен known host, затем скопируйте ваш сгенерированный ключ в директорию, которая вызвала сбой.

  • Управление исходным кодом

После установки необходимых плагинов, упомянутых выше, вы можете выбрать Git в разделе исходного кода. Здесь я использовал SSH, поэтому формат такой, как показано на изображении ниже:

Image

Важно:

Не используйте SSH от пользователя компьютера для этих учетных данных. Мы знаем, что GitLab разрешает только один SSH на машину, и один и тот же SSH не может быть добавлен к нескольким учетным записям. Это создает проблему: нашей машине сборки нужно подключиться к проекту исходного кода, поэтому нужен SSH-ключ. Однако для скомпилированных результатов я использую Git для синхронизации директорий в Windows, поэтому нужен другой SSH для подключения к моей учетной записи робота. Если эти два SSH-ключа одинаковы, один шаг не удастся.

Браузер исходного кода фактически переходит к нашему соответствующему проекту GitLab, поэтому используйте HTTP:

Image

  • Триггеры

Это очень важно. После проверки и выбора в соответствии с нашими потребностями:

Image

Скопируйте URL после “Build when a change is pushed to GitLab. GitLab CI Service URL”.

Вернитесь к соответствующим настройкам проекта GitLab, заполните этот URL в Settings → Web Hooks, отметьте по необходимости и добавьте после подтверждения.

Таким образом, когда есть изменения в исходном коде на нашем GitLab, это вызовет web hook и скажет нашему CI приступить к работе.

Image

  • MSBuild

Здесь в основном нужно изучить синтаксис MSBuild. Когда я создавал этот CI, моя цель была чисто скомпилировать веб-сайты. Ниже приведены часто используемые и очень понятные:

1
2
3
4
5
/p:PublishProfile="F:xxxxx.pubxml"
/p:DeployOnBuild=true
/p:Configuration=Release
/p:VisualStudioVersion=12.0  
/property:TargetFrameworkVersion=v4.5

Файл pubxml генерируется, когда мы выбираем публикацию. Вы можете проверить его сами, и это очень понятно.

Я рекомендую запустить MSBuild один раз на вашей машине разработки.

Обычно наш MSBuild находится в *cd C:\Windows\Microsoft.NET\Framework64\v4.0.30319*

Затем:

1
2
3
4
5
6
7
8
9
10
cd C:\Windows\Microsoft.NET\Framework64\v4.0.30319\
MSBuild.exe "C:\xxxxx.sln" \
/p:PublishProfile="C:\xxxxx.pubxml" \
/p:DeployOnBuild=true \
/p:Configuration=Release \
/p:VisualStudioVersion=12.0 \
/property:TargetFrameworkVersion=v4.5 \
/verbosity:n \
/t:Rebuild \
/maxcpucount:16

Моя рекомендуемая конфигурация:

1
2
3
4
5
6
7
/p:PublishProfile="C:\xxxxx.pubxml" \
/p:DeployOnBuild=true \
/p:Configuration=Release \
/p:VisualStudioVersion=12.0 \
/property:TargetFrameworkVersion=v4.5 \
/verbosity:n \
/maxcpucount:16

После компиляции и развертывания на сервере, как правило, все должно быть в порядке.

Но у меня были проблемы!!!!

  • Проблемы с NuGet Feed

Поскольку мой проект использует мои приватные пакеты NuGet, которые нельзя найти в официальном источнике NuGet, мне нужно настроить свой собственный feed на CI-сервере, как в VS.

Найдите NuGet.Config в C:\Windows\SysWOW64\config\systemprofile\AppData\Roaming\NuGet и измените на:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageRestore>
    <add key="enabled" value="True" />
    <add key="automatic" value="True" />
  </packageRestore>
  <bindingRedirects>
    <add key="skip" value="False" />
  </bindingRedirects>
  <packageSources>
    <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
    <add key="Мой приватный feed" value="D:\nuget" />     
  </packageSources>
  <activePackageSource>
    <add key="All" value="(Aggregate source)" />
  </activePackageSource>
</configuration>
  • Проблемы с ошибками компиляции

Это недопустимо. На моем компьютере все работало отлично, но сервер абсолютно отказывался компилировать. Позже я сосредоточился на проверке сторонних DLL и моих приватных пакетов NuGet в программе и обнаружил, что все ошибки были там. Причина, по которой я не заметил на машине разработки, заключалась в том, что зависимости NuGet на машине разработки имели локальный кэш. Компиляция напрямую пропускала их. После 35 попыток моя программа наконец успешно скомпилировалась на CI.

  • Проблемы с правами Git - не может клонировать проект

Это ошибка конфигурации job. В конфигурации Git job выберите “SSH Username with private key”, введите приватный ключ напрямую и полностью скопируйте содержимое из ~/.ssh/id_rsa. Это включает бессмысленные разделители в начале и конце!

Уроки, выученные на горьком опыте

  • Не используйте test hook GitLab

В то время у моего проекта было 2 ветки. Я хотел сгенерировать из определенной ветки, но нажал test hook. Черт, содержимое главной ветки было полностью вытянуто.

Обработка исключений

Anonymous не имеет разрешения Overall/Administer

http://stackoverflow.com/questions/22833665/hudson-security-accessdeniedexception2-anonymous-is-missing-the-overall-admini

Ошибка настройки параметров безопасности, из-за которой невозможно войти

Изменить:

1
<authorizationStrategy class="hudson.security.AuthorizationStrategy$Unsecured"/>
1
2
3
cd директория jenkins
# Перезапуск
jenkins restart   # Forces

Изменение директории Jenkins

Остановить службу Jenkins

Переместить папку C:\Users\Coola.jenkins в d:\Jenkins

Используя regedit, изменить HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Jenkins\ImagePath на “d:\Jenkins\jenkins.exe”

Запустить службу

Некоторые настройки

  • Это разрешение соответствует “Любой пользователь может делать что угодно (без ограничений)”
1
<authorizationStrategy class="hudson.security.AuthorizationStrategy$Unsecured"/>
  • Это разрешение соответствует “Вошедшие пользователи могут делать что угодно”
1
<authorizationStrategy class="hudson.security.FullControlOnceLoggedInAuthorizationStrategy"/>

Выбор плагинов

Имя плагина Назначение URL введения
proxy Прокси  
gitlab Для интеграции с GitLab https://wiki.jenkins-ci.org/display/JENKINS/GitLab+Plugin
publish-over-ssh Подключение к другим Linux-машинам через SSH  
Mercurial Инструмент сборки https://wiki.jenkins-ci.org/display/JENKINS/Mercurial+Plugin
gitlab-hook Позволяет использовать Gitlab web hooks для запуска SMC опроса проектов Gitlab https://wiki.jenkins-ci.org/display/JENKINS/GitLab+Hook+Plugin

Ссылки

  1. Отключить безопасность
  2. Настройка разрешений
  3. Создание CI с GitLab + Jenkins
  4. Среда автоматической сборки, тестирования и развертывания Jenkins .NET
  5. Создание среды непрерывной интеграции (CI) с Jenkins+Gitlab
  6. Создание среды непрерывной интеграции с MSBuild и Jenkins (1)
  7. Создание среды непрерывной интеграции с MSBuild и Jenkins (2)
  8. Продвинутая серия Jenkins
  9. Интеграция Jenkins CI
  10. Документация GitLab
  11. Настройка вашего репозитория для Jenkins CI
  12. Jenkins git clone via SSH на Windows 7 x64
  13. Создание службы непрерывной интеграции с Jenkins
  14. Размещение собственных NuGet Feeds
  15. Использование MSBuild.exe для «публикации» проекта ASP.NET MVC 4 с командной строки
  16. Заметки о настройке среды разработки проекта (5. Настройка Jenkins)
  17. MSBuild DeployOnBuild=true не публикует
  18. Как изменить папку Jenkins по умолчанию в Windows
  19. Переменные окружения Jenkins


💬 讨论 / Discussion

对这篇文章有想法?欢迎在 GitHub 上发起讨论。
Have thoughts on this post? Start a discussion on GitHub.

在 GitHub 参与讨论 / Discuss on GitHub