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

一、前言

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

二、系统环境

Centos7.6
Gitlab:
Jenkins:
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。
在这里插入图片描述

四、Gitlab创建项目

创建项目很简单,还可以从很多代码托管机构直接导入项目。
在这里插入图片描述
项目创建完毕,进入项目管理首页,看到两个提示:
在这里插入图片描述

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
在这里插入图片描述

五、项目初始化

项目创建完毕后,将程序推送到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
wget https://repo.huaweicloud.com/jenkins/redhat-stable/jenkins-2.361.1-1.1.noarch.rpm

6.2 安装到相应目录

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

6.3 修改配置文件

vim /etc/sysconfig/jenkins

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

6.4 启动jenkins

#启动服务
systemctl start jenkins
#查看服务状态
systemctl status jenkins.service -l
#查看jenkins安装路径
whereis jenkins
#重新加载某个服务的配置文件,如果新安装了一个服务,归属于 systemctl 管理,要是新服务的服务程序配置文件生效,需重新加载。
systemctl reload-daemon

6.5 启动故障

故障1
启动遇到错误提示:Jenkins requires Java 8, but you are running 17.0.7+8-LTS-224 from /usr/local/java/jdk-17.0.7
在这里插入图片描述

原因:Jenkins启动时需要Jdk环境,返回信息中提示无法找到/usr/bin/java文件或目录。Jenkins在没有修改配置文件时启动,会默认去找指定目录下的Java执行文件。
处理:通过修改/etc/init.d/jenkins,让Jenkins识别到安装的Java执行文件。

vim /etc/init.d/jenkins
# Search usable Java as /usr/bin/java might not point to minimal version required by Jenkins.
# see http://www.nabble.com/guinea-pigs-wanted-----Hudson-RPM-for-RedHat-Linux-td25673707.html
candidates="
/etc/alternatives/java
/usr/lib/jvm/java-1.8.0/bin/java
/usr/lib/jvm/jre-1.8.0/bin/java
/usr/lib/jvm/java-1.7.0/bin/java
/usr/lib/jvm/jre-1.7.0/bin/java
/usr/bin/java
/usr/local/java/jdk1.8.0_371/bin/java
#创建软连接Jdk目录下bin/java文件
ln -s /usr/local/java/jdk1.8.0_371   /usr/bin/java

再重启即可。

故障2:
在这里插入图片描述

七、安装.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
在这里插入图片描述
目前覆盖的API范围到4.8 了。
在这里插入图片描述

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

8.1 登录

地址:http://服务器ip:8088
在这里插入图片描述

8.2 首次登录需要默认密码

按提示从服务器查找默认密码
cat /var/lib/jenkins/secrets/initialAdminPassword
在这里插入图片描述

8.3 全局工具配置

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

8.3.1 Git配置

Git要设置Name和Path,这里的Path是指Centos上git的环境地址,如图8.3.1-1所示,按照图8.3.1-2设置即可。
在这里插入图片描述
图8.3.1-1
在这里插入图片描述
图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方式,带参数执行更方便。
在这里插入图片描述
图8.3.2-1
在这里插入图片描述
图8.3.2-2
在这里插入图片描述
图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

在这里插入图片描述

8.4.2 Extended E-mail Notification

为什么说账号密码要看SMTP的设置说明,以腾讯QQ邮箱为例,账号和密码是有特殊要求的,比如如果是foxmail邮箱,账号必须要写邮箱全称地址,密码不是邮箱的登录密码而是授权码。SSL、端口号也按照邮件服务商的说明来设置,字符集默认UTF-8。
在这里插入图片描述

8.4.3 邮件通知

点击Test configuration按钮可以立即发送测试邮件。
在这里插入图片描述

8.4.4 Publish over CIFS

我采用的是发布到windows共享文件夹的方式来部署,所以需要安装CIFS插件8
在这里插入图片描述
在这里插入图片描述
Name和Hostname就是指我们部署IIS的windows服务器,我直接用的IP地址,用机器名不能成功,原因不明。Username和Password就是远程访问共享文件夹的账号和密码,我是域网络,所以直接输入域账号特别方便,注意坑:域账号要带域信息一起输入(Username:域\用户名)。Share就是远程共享文件夹的名称。其它参数用默认值即可。点击Test Configuration按钮如果共享文件夹连接成功,显示Success
在这里插入图片描述

8.5 新建项目

在这里插入图片描述

8.6 配置项目

在这里插入图片描述

8.6.1 源码管理

General标签页里我没有设置,直接跳到源码管理。这里使用之前我们安装Gitlab并配置好的仓库地址,如图8.6.1-1。Credentials使用的凭据就是Git的账号密码,点击添加按钮,如图8.6.1-2操作。
在这里插入图片描述
图8.6.1-1
在这里插入图片描述
图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使用互不冲突,具体如何组合,需要根据项目情况合理配置;

在这里插入图片描述

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工作空间里,因为构建后操作里的归档文件路径只能从工作空间里获取。
在这里插入图片描述
图8.6.4-1
在这里插入图片描述
图8.6.4-2

8.6.5 构建后操作

构建后操作一共有三个。

第一步:归档成品

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

巨坑2:归档成品操作是一定要有的,否则无法把打包好的文件复制给IIS服务器的共享文件夹,存档的文件路径不需要输入Jenkins的工作空间地址,已经默认指向了。
在这里插入图片描述
图8.6.5-1
在这里插入图片描述

第二步:Editable Email Notification

在Project Recipient List中加入要接收通知的邮件地址,其它参数全部默认。
在这里插入图片描述

第三步:Send build Artifacts to a windows share

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

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

Exclude files设置了没有效果,不过这都是小问题了,以后再百度解决。
在这里插入图片描述
在这里插入图片描述

8.7 立即构建

点击立即构建按钮。
在这里插入图片描述
构建中…
在这里插入图片描述
构建完成,蓝色灯状态表示构建成功,在下拉菜单中选择控制台输出,打开构建日志。
在这里插入图片描述

8.8 构建日志

构建日志的的结尾显示本次构建的结果,如图8.8-1
在这里插入图片描述
图8.8-1

8.9 邮件通知

在这里插入图片描述

九、自动触发构建(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
在这里插入图片描述

9.3 修改Jenkins安全策略

在Jenkins中修改安全策略(谨慎操作,确保操作用户具有所有权限):系统管理->全局安全配置->在安全矩阵中给予匿名用户Build权限,如图9.3-1。
在这里插入图片描述
在这里插入图片描述
图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
在这里插入图片描述

9.5 添加webhook设置

在Gitlab项目中选择Settings->Integrations->设置URL,将Jenkins构建触发器中的GitLab webhook URL地址填在这里,并确保Push events选中,点击下方的Add webhook按钮完成添加。
在这里插入图片描述
添加完毕后点击Test按钮,选择Push events测试触发功能是否正常。
在这里插入图片描述
返回200表示正常,此时Jenkins已经开始构建动作了。
在这里插入图片描述
在Jenkins项目页面可以看到构建进度条。
在这里插入图片描述

9.6 定时构建和轮询

Jenkins定时构建,轮询SCM设置11
在这里插入图片描述
定时构建:不管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设置 ↩︎

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiangcns

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值