Centos+Gitlab+Jenkins 针对.NET项目持续集成环境搭建和自动化部署

目录

  • 一、前言
  • 二、系统环境
  • 三、Gitlab安装
    • 3.1 安装依赖软件
    • 3.2 开启postfix
    • 3.3 安装Gitlab
    • 3.4 设置服务器IP和端口
    • 3.5 重置并启动GitLab
    • 3.6 浏览器访问GitLab
  • 四、Gitlab创建项目
  • 五、项目初始化
    • 5.1 初始化一个git 仓库
    • 5.2 添加所有文件
    • 5.3 添加注释
    • 5.4 添加远程仓库地址
    • 5.5 上传本地commit到Gitlab仓库
    • 5.6 踩坑必读
      • 5.6.1 README.md文件冲突
      • 5.6.2 .gitigonre设置了却失效
  • 六、Jenkins安装
    • 6.1 下载安装包
    • 6.2 安装到相应目录
    • 6.3 修改配置文件
    • 6.4 启动jenkins
  • 七、安装.NET环境
    • 7.1 系统更新运行
    • 7.2 添加安装包仓库
    • 7.3 安装Mono
  • 八、Jenkins配置(坑都在这里)
    • 8.1 登录
    • 8.2 首次登录需要默认密码
    • 8.3 全局工具配置
      • 8.3.1 Git配置
      • 8.3.2 MSBuild配置
    • 8.4 系统配置
      • 8.4.1 Jenkins Location
      • 8.4.2 Extended E-mail Notification
      • 8.4.3 邮件通知
      • 8.4.4 Publish over CIFS
    • 8.5 新建项目
    • 8.6 配置项目
      • 8.6.1 源码管理
      • 8.6.2 构建触发器
      • 8.6.3 构建环境
      • 8.6.4 构建
      • 8.6.5 构建后操作
        • 第一步:归档成品
        • 第二步:Editable Email Notification
        • 第三步:Send build Artifacts to a windows share
    • 8.7 立即构建
    • 8.8 构建日志
    • 8.9 邮件通知
  • 九、自动触发构建(git钩子)
    • 9.1 安装必要插件
    • 9.2 修改构建触发器设置
    • 9.3 修改Jenkins安全策略
    • 9.4 修改Gitlab设置
    • 9.5 添加webhook设置
    • 9.6 定时构建和轮询
  • 十、推荐文章

一、前言

本文主要内容是在Centos系统环境下搭建Gitlab+Jenkins 持续集成环境,并实现.NET web项目的自动化部署,网上针对.NET项目持续集成的介绍不多,而且选择的大都是windowsI环境。本文内容根据网络搜索和我的实战操作记录整理而成,踩坑无数,最后成功,希望对大家有用。

二、系统环境

Gitlab:Centos7.6
Jenkins:Centos7.6
IIS服务器:Windows Server 2008

三、Gitlab安装

GitLab是由GitLabInc.开发,使用MIT许可证的基于网络的Git仓库管理工具,且具有wiki和issue跟踪功能。使用Git作为代码管理工具,并在此基础上搭建起来的web服务。1

3.1 安装依赖软件

[root@localhost ~] yum -y install policycoreutils openssh-server openssh-clients postfix

3.2 开启postfix

postfix支持gitlab发信功能,设置postfix开机自启

[root@localhost ~] systemctl enable postfix && systemctl start postfix

3.3 安装Gitlab

[root@localhost ~] wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-11.3.4-ce.0.el7.x86_64.rpm
......
[root@localhost ~] rpm -ivh gitlab-ce-11.3.4-ce.0.el7.x86_64.rpm

3.4 设置服务器IP和端口

修改配置文件gitlab.rb

[root@localhost ~] vim  /etc/gitlab/gitlab.rb

修改external_url为服务器IP和指定端口,这里我设置成8086

## GitLab URL
##! URL on which GitLab will be reachable.
##! For more details on configuring external_url see:
##! https://docs.gitlab.com/omnibus/settings/configuration.html#configuring-the-external-url-for-gitlab
external_url 'http://10.5.1.122:8086'

3.5 重置并启动GitLab

[root@localhost ~] gitlab-ctl reconfigure
......
[root@localhost ~] gitlab-ctl restart

3.6 浏览器访问GitLab

输入服务器IP和指定端口进行访问,可能出现的问题见参考文献1。
Centos+Gitlab+Jenkins 针对.NET项目持续集成环境搭建和自动化部署_第1张图片

四、Gitlab创建项目

创建项目很简单,还可以从很多代码托管机构直接导入项目。
Centos+Gitlab+Jenkins 针对.NET项目持续集成环境搭建和自动化部署_第2张图片
项目创建完毕,进入项目管理首页,看到两个提示:
在这里插入图片描述

You won’t be able to pull or push project code via SSH until you add an SSH key to your profile
你不能通过SSH方式拉取或者推送项目代码,除非你添加了SSH秘钥到配置文件

The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. More information
已启用了自动DevOps管道,如果找不到其他CI配置文件,将使用该管道。

这两个提示不用管,我觉得内网环境,小规模的开发团队不需要,如果要添加,在用户设置里操作,点击generate one按钮按设置说明操作,如果要中文请看这里 2
Centos+Gitlab+Jenkins 针对.NET项目持续集成环境搭建和自动化部署_第3张图片

五、项目初始化

项目创建完毕后,将程序推送到git仓库,切换到程序根目录下,右键菜单启动Git Bash(你的开发环境要安装有Git)

5.1 初始化一个git 仓库

用户名@机器名 MINGW64 ~
$ git init

5.2 添加所有文件

用户名@机器名 MINGW64 ~
$ git add -A

5.3 添加注释

用户名@机器名 MINGW64 ~
$ git commit -a -m  "注释内容”

5.4 添加远程仓库地址

用户名@机器名 MINGW64 ~
$ git remote add origin http://10.5.1.122:8086/root/projectname.git

5.5 上传本地commit到Gitlab仓库

用户名@机器名 MINGW64 ~
$ git push origin master

5.6 踩坑必读

5.6.1 README.md文件冲突

如果出现类似README.md文件冲突的问题,参见这里 3

5.6.2 .gitigonre设置了却失效

如果.gitigonre设置了却失效,参见这里 4

六、Jenkins安装

我是下载的rpm安装包进行安装的5,安装完成后直接可用没有什么幺蛾子,JAVA环境默认安装的版本就是1.8.0_181,我卸载了重新装了一遍还是这个版本,这里没有坑,网上资料丰富。

6.1 下载安装包

wget https://pkg.jenkins.io/redhat/jenkins-2.156-1.1.noarch.rpm

6.2 安装到相应目录

rpm -ivh jenkins-2.156-1.1.noarch.rpm

6.3 修改配置文件

vim /etc/sysconfig/jenkins

修改两个属性
JENKINS_USER=“root”:将用户权限修改为root权限
JENKINS_PORT=“8088”:将端口修改为你需要的端口

6.4 启动jenkins

systemctl start jenkins

七、安装.NET环境

MonoDevelop 是个Linux平台上的开放源代码集成开发环境,主要用来开发Mono与.NET Framework软件。MonoDevelop 整合了很多Eclipse与Microsoft Visual Studio的特性,像是 Intellisense、版本控制还有 GUI 与 Web 设计工具。另外还整合了GTK# GUI设计工具(叫做Stetic)。目前支援的语言有C#、Java、BOO、Nemerle、Visual Basic .NET、CIL、C与C++ 6

官方网站安装说明在这里

我是参照这里安装的7

7.1 系统更新运行

yum –y update

7.2 添加安装包仓库

参照Mono官方的CentOS安装 http://www.mono-project.com/download/#download-lin-centos,首先添加安装包仓库

yum install yum-utils

rpm --import http://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF

yum-config-manager --add-repo http://download.mono-project.com/repo/centos7/

7.3 安装Mono

yum install mono-complete

等待几分钟的下载安装,安装完后我们使用Mono –V 检查我们的安装是否成功,目前版本是6.6
Centos+Gitlab+Jenkins 针对.NET项目持续集成环境搭建和自动化部署_第4张图片
目前覆盖的API范围到4.8 了。
Centos+Gitlab+Jenkins 针对.NET项目持续集成环境搭建和自动化部署_第5张图片

八、Jenkins配置(坑都在这里)

8.1 登录

地址:http://服务器ip:8088
Centos+Gitlab+Jenkins 针对.NET项目持续集成环境搭建和自动化部署_第6张图片

8.2 首次登录需要默认密码

按提示从服务器查找默认密码
cat /var/lib/jenkins/secrets/initialAdminPassword
Centos+Gitlab+Jenkins 针对.NET项目持续集成环境搭建和自动化部署_第7张图片

8.3 全局工具配置

系统管理-全局工具配置
在这里插入图片描述

8.3.1 Git配置

Git要设置Name和Path,这里的Path是指Centos上git的环境地址,如图8.3.1-1所示,按照图8.3.1-2设置即可。
Centos+Gitlab+Jenkins 针对.NET项目持续集成环境搭建和自动化部署_第8张图片
图8.3.1-1
Centos+Gitlab+Jenkins 针对.NET项目持续集成环境搭建和自动化部署_第9张图片
图8.3.1-2

8.3.2 MSBuild配置

如图8.3.2-1所示,这里我设置了两个MSBuild环境,最开始设置的是shell-XBuild环境(shell-XBuild这个Name是自己命名的),因为xbuild.exe在文件夹/usr/lib/mono/xbuild/14.0/bin/下(图8.3.2-2),这样配置的话Jenkins项目构建就只能采用shell方式,命令不方便带参数调用(我觉得肯定是可以带参数的,但是我在网上找了好久包括官网都没有找到带参数的使用方法)。后来改用MSBuild环境,设置Path为/usr/bin/xbuild(图8.3.2-3),构建就可以使用Build a Viusal Studio project or solution using MSBuild方式,带参数执行更方便。
Centos+Gitlab+Jenkins 针对.NET项目持续集成环境搭建和自动化部署_第10张图片
图8.3.2-1
Centos+Gitlab+Jenkins 针对.NET项目持续集成环境搭建和自动化部署_第11张图片
图8.3.2-2
Centos+Gitlab+Jenkins 针对.NET项目持续集成环境搭建和自动化部署_第12张图片
图8.3.2-3

可以注意到/usr/bin/xbuild下的xbuild是一个shell文件,他实际指向的仍然是/usr/lib/mono/xbuild/14.0/bin/xbuild.exe,打开这个shell文件,内容是:

#!/bin/sh
MONO_GC_PARAMS="nursery-size=64m,$MONO_GC_PARAMS" exec /usr/bin/mono $MONO_OPTIONS /usr/lib/mono/xbuild/14.0/bin/xbuild.exe "$@"

这个shell文件的地址是这样求出来的(如图8.3.2-4)
在这里插入图片描述
图8.3.2-4

8.4 系统配置

在这里插入图片描述

8.4.1 Jenkins Location

Centos+Gitlab+Jenkins 针对.NET项目持续集成环境搭建和自动化部署_第13张图片

8.4.2 Extended E-mail Notification

为什么说账号密码要看SMTP的设置说明,以腾讯QQ邮箱为例,账号和密码是有特殊要求的,比如如果是foxmail邮箱,账号必须要写邮箱全称地址,密码不是邮箱的登录密码而是授权码。SSL、端口号也按照邮件服务商的说明来设置,字符集默认UTF-8。
Centos+Gitlab+Jenkins 针对.NET项目持续集成环境搭建和自动化部署_第14张图片

8.4.3 邮件通知

点击Test configuration按钮可以立即发送测试邮件。
Centos+Gitlab+Jenkins 针对.NET项目持续集成环境搭建和自动化部署_第15张图片

8.4.4 Publish over CIFS

我采用的是发布到windows共享文件夹的方式来部署,所以需要安装CIFS插件8
Centos+Gitlab+Jenkins 针对.NET项目持续集成环境搭建和自动化部署_第16张图片
Centos+Gitlab+Jenkins 针对.NET项目持续集成环境搭建和自动化部署_第17张图片
Name和Hostname就是指我们部署IIS的windows服务器,我直接用的IP地址,用机器名不能成功,原因不明。Username和Password就是远程访问共享文件夹的账号和密码,我是域网络,所以直接输入域账号特别方便,注意坑:域账号要带域信息一起输入(Username:域\用户名)。Share就是远程共享文件夹的名称。其它参数用默认值即可。点击Test Configuration按钮如果共享文件夹连接成功,显示Success
Centos+Gitlab+Jenkins 针对.NET项目持续集成环境搭建和自动化部署_第18张图片

8.5 新建项目

Centos+Gitlab+Jenkins 针对.NET项目持续集成环境搭建和自动化部署_第19张图片

8.6 配置项目

Centos+Gitlab+Jenkins 针对.NET项目持续集成环境搭建和自动化部署_第20张图片

8.6.1 源码管理

General标签页里我没有设置,直接跳到源码管理。这里使用之前我们安装Gitlab并配置好的仓库地址,如图8.6.1-1。Credentials使用的凭据就是Git的账号密码,点击添加按钮,如图8.6.1-2操作。
Centos+Gitlab+Jenkins 针对.NET项目持续集成环境搭建和自动化部署_第21张图片
图8.6.1-1
Centos+Gitlab+Jenkins 针对.NET项目持续集成环境搭建和自动化部署_第22张图片
图8.6.1-2

8.6.2 构建触发器

可以设置Jenkins定时构建或者轮询SCM9

(1)定时构建:不管SVN或Git中数据有无变化,均执行定时化的构建任务 ;

(2)轮询SCM:只要SVN或Git中数据有更新,则执行构建任务;

(3)构建语法说明:

首先格式为:* * * * (五个星);
第一个表示分钟,取值0~59
第二个表示小时,取值0~23
第三个表示一个月的第几天,取值1~31
第四个表示第几月,取值1~12
第五个
表示一周中的第几天,取值0~7,其中0和7代表的都是周日
使用举例:
每隔10分钟构建一次:H/5 * * * *
每隔1小时构建一次: H H/1 * * *
每月30号构建一次: H H 30 * *
每两小时一次,每个工作日上午9点到下午5点(也许是上午10:38,下午12:38,下午2:38,下午4:38)
H H(9-16)/2 * * 1-5

(4)定时构建和轮询SCM使用互不冲突,具体如何组合,需要根据项目情况合理配置;

Centos+Gitlab+Jenkins 针对.NET项目持续集成环境搭建和自动化部署_第23张图片

8.6.3 构建环境

我没有设置,保持默认选项。

8.6.4 构建

MSBuild Version是该构建的名称;
MSBuild Build File指向.NET项目的sln文件;
Command Line Arguments 参数。

参数的用法

/t:Rebuild 重新生成
/p:Configuration=Release 生成模式
/p:VisualStudioVersion=14.0 指定子工具集版本,不设置会报错
/p:DeployOnBuild=True;PublishProfile=MaterialControlTest 使用 MaterialControlTest.pubxml 发布文件来发布项目,我设置了然而没有任何用处
/p:OutDir=/var/lib/jenkins/workspace/Material3/website/ 输出打包文件地址

我的参数如图8.6.4-1所示,当构建完成后,打包后的程序会输出到/var/lib/jenkins/workspace/Material3/website/,如图8.6.4-2。

巨坑1/var/lib/jenkins/workspace/是Jenkins的工作空间,OutDir输出路径一定要设置在Jenkins工作空间里,因为构建后操作里的归档文件路径只能从工作空间里获取。
Centos+Gitlab+Jenkins 针对.NET项目持续集成环境搭建和自动化部署_第24张图片
图8.6.4-1
Centos+Gitlab+Jenkins 针对.NET项目持续集成环境搭建和自动化部署_第25张图片
图8.6.4-2

8.6.5 构建后操作

构建后操作一共有三个。

第一步:归档成品

设置用于存档的文件地址为website/_PublishedWebsites/WEC.MaterialControl/也就是你Centos服务器上程序根目录下输出的从website开始的那一段路径,如图8.6.5-1。_PublishedWebsites/WEC.MaterialControl/的名称是依据什么自动设置出来的目前我还没有找到。

巨坑2:归档成品操作是一定要有的,否则无法把打包好的文件复制给IIS服务器的共享文件夹,存档的文件路径不需要输入Jenkins的工作空间地址,已经默认指向了。
Centos+Gitlab+Jenkins 针对.NET项目持续集成环境搭建和自动化部署_第26张图片
图8.6.5-1
Centos+Gitlab+Jenkins 针对.NET项目持续集成环境搭建和自动化部署_第27张图片

第二步:Editable Email Notification

在Project Recipient List中加入要接收通知的邮件地址,其它参数全部默认。
Centos+Gitlab+Jenkins 针对.NET项目持续集成环境搭建和自动化部署_第28张图片

第三步:Send build Artifacts to a windows share

Name这里就是选择我们之前在Jenkins系统配置时预设置的CIFS,我用的名称就是IP地址,Source files的地址设置为:website/_PublishedWebsites/WEC.MaterialControl/**,简单说就是指向打包输出的程序文件夹。

巨坑3website/_PublishedWebsites/WEC.MaterialControl/**的最后是两个*号**表示复制该文件夹下的所有文件夹及文件,*.*表示仅复制该文件夹下的所有文件,不包括文件夹。

Exclude files设置了没有效果,不过这都是小问题了,以后再百度解决。
Centos+Gitlab+Jenkins 针对.NET项目持续集成环境搭建和自动化部署_第29张图片
Centos+Gitlab+Jenkins 针对.NET项目持续集成环境搭建和自动化部署_第30张图片

8.7 立即构建

点击立即构建按钮。
Centos+Gitlab+Jenkins 针对.NET项目持续集成环境搭建和自动化部署_第31张图片
构建中…
Centos+Gitlab+Jenkins 针对.NET项目持续集成环境搭建和自动化部署_第32张图片
构建完成,蓝色灯状态表示构建成功,在下拉菜单中选择控制台输出,打开构建日志。
Centos+Gitlab+Jenkins 针对.NET项目持续集成环境搭建和自动化部署_第33张图片

8.8 构建日志

构建日志的的结尾显示本次构建的结果,如图8.8-1
Centos+Gitlab+Jenkins 针对.NET项目持续集成环境搭建和自动化部署_第34张图片
图8.8-1

8.9 邮件通知

Centos+Gitlab+Jenkins 针对.NET项目持续集成环境搭建和自动化部署_第35张图片

九、自动触发构建(git钩子)

GitLab服务器和Jenkins服务器可以通过Web Hook的方式进行通信。10

9.1 安装必要插件

在Jenkins服务器中,安装插件:GitLab PluginGitLab Hook Plugin

9.2 修改构建触发器设置

在Jenkins项目中打开配置,构建触发器中选择"Build when a change is pushed to GitLab."记下GitLab webhook URL
Centos+Gitlab+Jenkins 针对.NET项目持续集成环境搭建和自动化部署_第36张图片

9.3 修改Jenkins安全策略

在Jenkins中修改安全策略(谨慎操作,确保操作用户具有所有权限):系统管理->全局安全配置->在安全矩阵中给予匿名用户Build权限,如图9.3-1。
在这里插入图片描述
Centos+Gitlab+Jenkins 针对.NET项目持续集成环境搭建和自动化部署_第37张图片
图9.3-1

9.4 修改Gitlab设置

在Admin area->Settings->Outbound requests勾选Allow requests to the local network from hooks and services
Outbound requests:外发请求
Allow requests to the local network from hooks and services:允许来自钩子和服务的对本地网络的请求
如果不设置的话,添加Webhooks时会报错:Urlis blocked: Requests to localhost are not allowed
Centos+Gitlab+Jenkins 针对.NET项目持续集成环境搭建和自动化部署_第38张图片

9.5 添加webhook设置

在Gitlab项目中选择Settings->Integrations->设置URL,将Jenkins构建触发器中的GitLab webhook URL地址填在这里,并确保Push events选中,点击下方的Add webhook按钮完成添加。
Centos+Gitlab+Jenkins 针对.NET项目持续集成环境搭建和自动化部署_第39张图片
添加完毕后点击Test按钮,选择Push events测试触发功能是否正常。
Centos+Gitlab+Jenkins 针对.NET项目持续集成环境搭建和自动化部署_第40张图片
返回200表示正常,此时Jenkins已经开始构建动作了。
在这里插入图片描述
在Jenkins项目页面可以看到构建进度条。
Centos+Gitlab+Jenkins 针对.NET项目持续集成环境搭建和自动化部署_第41张图片

9.6 定时构建和轮询

Jenkins定时构建,轮询SCM设置11
Centos+Gitlab+Jenkins 针对.NET项目持续集成环境搭建和自动化部署_第42张图片
定时构建:不管SVN或Git中数据有无变化,均执行定时化的构建任务 ;

轮询SCM:只要SVN或Git中数据有更新,则执行构建任务;

构建语法说明:

首先格式为:* * * * (五个星);
第一个表示分钟,取值0~59
第二个表示小时,取值0~23
第三个表示一个月的第几天,取值1~31
第四个表示第几月,取值1~12
第五个
表示一周中的第几天,取值0~7,其中0和7代表的都是周日
使用举例:
每隔10分钟构建一次:H/5 * * * *
每隔1小时构建一次: H H/1 * * *
每月30号构建一次: H H 30 * *
每两小时一次,每个工作日上午9点到下午5点(也许是上午10:38,下午12:38,下午2:38,下午4:38)
H H(9-16)/2 * * 1-5

定时构建和轮询SCM使用互不冲突,我觉得开启SCM的话就忽略post-commit钩子吧,不然每次构建会跑两遍;

十、推荐文章

看到一篇不错的文章,有一些介绍持续集成知识的内容,推荐一下:Jenkins搭建.NET自动编译测试并实现半增量部署


  1. Centos7部署配置Gitlab ↩︎

  2. GitLab中配置SSH key ↩︎

  3. 用VS2017上传项目到码云gitee.com和基本命令 ↩︎

  4. .gitigonre设置了却失效 ↩︎

  5. centos7踩坑(二)安装git+jenkins ↩︎

  6. CentOS 7 安装Mono 及 Hello World ↩︎

  7. CentOS 7.2下安装Mono 5.0 ↩︎

  8. Publish Over CIFS Plugin ↩︎

  9. Jenkins定时构建,轮询SCM设置 ↩︎

  10. 向GitLab提交代码之后自动触发Jenkins构建 ↩︎

  11. Jenkins定时构建,轮询SCM设置 ↩︎

你可能感兴趣的:(开发运维)