jenkins&gitlab devops CI&CD环境安装

DevOps 是 Development 和 Operations 的组合,也就是开发和运维的简写。DevOps 是针对企业中的研发人员、运维人员和测试人员的工作理念,是他们在应用开发、代码部署和质量测试等整条生命周期中协作和沟通的最佳实践,DevOps 强调整个组织的合作以及交付和基础设施变更的自动化、从而实现持续集成、持续部署和持续交付。DevOps 四大平台:代码托管(gitlab/github/gerrit/svn)、项目管理(jira)、运维平台(腾讯蓝鲸/开源平台)、持续交付(Jenkins/gitlab).

Jenkins 是一款开源自动化服务器,结合 web 界面一键部署--自动化构建交付,可用于轻松设置持续集成和持续交付(CI / CD)管道。

持续集成(CI)是DevOps的一种实践,团队成员定期将其代码更改提交到版本控制存储库,然后运行自动构建和测试。 持续交付(CD)是一系列的实践,代码更改会自动生成,测试并部署到生产中。

Jenkins可以作为独立应用程序安装,也可以用APT方式安装。

Devops开发流程

什么是持续集成(CI-Continuous integration):持续集成是指多名开发者在开发不同功能代码的过程当中,可以频繁的将代码行合并到一起并切相互不影响工作。

什么是持续部署(CD-continuous deployment):是基于某种工具或平台实现代码自动化的构建、测试和部署到线上环境以实现交付高质量的产品,持续部署在某种程度上代表了一个开发团队的更新迭代速率。目标是始终保证存在一个可交付的仓库。

什么是持续交付(Continuous Delivery):持续交付是在持续部署的基础之上,将产品交付到线上环境,因此持续交付是产品价值的一种交付,是产品价值的一种盈利的实现。

安装环境:

APT方式安装Jenkins

sudo apt-get install --reinstall ca-certificates
wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt-get -y update
sudo apt-get install jenkins
sudo ufw allow 8080
sudo cat /var/lib/jenkins/secrets/initialAdminPassword

安装后,用命令 jenkins --version查看版本信息:

默认端口是8080,通过http://localhost:8080访问.如果要在受防火墙保护的远程Ubuntu服务器上安装Jenkins,则需要打开端口8080。通常只想允许从特定IP地址或IP范围访问Jenkins服务器。 例如,要仅允许来自“ 192.168.121.0/24”子网的连接,可以运行以下命令:

sudo ufw allow proto tcp from 192.168.121.0/24 to any port 8080

如果需要允许从任何地方访问,请执行以下操作:

sudo ufw allow 8080

Jenkins安装默认插件

要设置新安装的Jenkins,打开浏览器,输入

https://localhost:8080

提示你输入在安装过程中创建的管理员密码, 密码保存在文件/var/lib/jenkins/secrets/initialAdminPassword中。

之后创建管理员账户:

继续,进入jenkins主页面:

此时打开终端,输入命令查案8080端口的使用情况:

sudo lsof -i:8080

安装jenkins插件

Jenkins支持很多的plugin,这些plugin极大地丰富了Jenkins的功能。安装plugin有两种方式:自动安装和手动安装。

自动安装比较简单,直接在jenkins浏览器界面操作,入口是:

进入主页http://localhost:8080/->manage jenkins-> manage plugins-> available plugins

搜索publish over ssh插件,选择安装

继续搜索PostBuildScript插件,用于Jenkins构建后,根据结果,执行shell脚本,可用于集群服务器。

新建ITEM:

Jenkins主页选择新建item.

输入一个名字,选择freestyle project.然后继续。

general页输入仓库地址:

源码管理页选择git,注意,必须要打开Credentials设置仓库账号/密码,否则Jenkins将无法正常访问仓库。

用户名和密码正确填写,其它输入有意义的字符串即可。

之后,Credentials选择新添加的账户,红色警告便消失:

触发器设置为每15分钟构建一次:

构建环境,在LOG中增加时间戳信息。

Build Steps填写增加构建步骤

构建后操作

构建后操作--> Execute scripts --> add generic script file.

我们需要在本地文件系统中提供一个脚本文件,并将文件路径设置到此步骤的配置中。这里只是举例,所以postscript没有做任何有价值的事情,仅仅是输出一行完成信息。

设置完成后保存,此时jenkins界面如下图所示:

可以看到我们新建的任务,后面可以触发执行(这里新创建的时候已经执行过一次了)。

触发任务执行

选择My View->任务名->Build Now,可以看到左下角的工作序列,如果当前有工作在进行,新进入的工作序列将会进入Pending状态,等正在执行的任务接受后再投入执行。

可以看到,任务pipeline执行完成后,Jenkins工作空间页面可以看到项目文件的一些信息:

选中任何一个执行pipeline打开:

进入后,打开控制台输出,即可看到编译过程:

并且发现确实被下载到了指定目录/var/lib/jenkins/workspace/seqfile:

编译错误是代码和内核兼容原因,和Jenkins配置无关。

出错原因

经过实际测试发现,如果将最后一步的流程改为:

构建后操作--> Execute scripts --> add post bulid step

此时,编译错误变成了项目本身的编译错误了,这次配置才算完全正确。

设置的每15分钟构建一次,经过一个晚上,构建达到了64次:

无密码登陆

编辑config.xml文件,找到<useSecurity>, 将“true”改为“false”

vim /var/lib/jenkins/config.xml

true修改为false:

重启jenkins服务

 sudo service jenkins restart

修改端口号

检查 /etc/init.d/jenkins 脚本,修改 do_start 函数的 check_tcp_port 命令,端口号从 8080 换成 8848:
修改 /etc/default/jenkins 文件,将端口 8080 改成 8848
修改 /usr/lib/systemd/system/jenkins.service,将8080改成8848,并将user,group修改为root

enable 8848端口

sudo ufw allow 8848
sudo systemctl daemon-reload
sudo systemctl restart jenkins

此时输入新的地址http://localhost:8848/ 即可打开jenkins,原地址无效。

查看端口占用情况,8848已被占用,8080被释放。

删除项目,鼠标放到项目右边,会自动显示》符号,从中选择删除。

gitlab部署

sudo apt-get install curl openssh-server ca-certificates postfix net-tools

安装GITLAB

有两种选择,可以在线下载安装

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh |sudo bash
sudo apt-get install gitlab-ce

或者在如下地址https://packages.gitlab.com/gitlab/gitlab-ce 选择RPM或者DEB包下载安装文件进行安装。

这里使用第一种方法,在线下载过程还是比较漫长的

出现以下提示,表示安装成功:

配置GITLAB

sudo vim /etc/gitlab/gitlab.rb

默认情况下,GITLAB也使用8080端口,如果不调整,必定会产生端口冲突,所以实际应用中,GITLAB和JENKINS一般是不同的机器,这里没有这个条件,我们修改配置对外IP和默认端口8081:

启动GITLAB

  sudo gitlab-ctl stop
  sudo gitlab-ctl reconfigure
  sudo gitlab-ctl restart
  sudo gitlab-ctl start

开机自启动/关闭开机自启动

 启用 Gitlab开机自启动 :systemctl enable gitlab-runsvdir.service
 禁止 Gitlab 开机自启动:systemctl disable gitlab-runsvdir.service

登陆GITLAB

http://localhost:8081/

默认账号是root,默认密码在/etc/gitlab/initial_root_password文件中。

新用户注册

只有管理员能以ROOT用户登陆,开发者需要注册普通账户,注册过程如下图:

新注册的用户会出现在admin area->users->pending approval栏中,需要管理员approve后方可正常登陆。

之后以管理员身份登陆,arppove账户注册请求

之后退出ROOT账户,以刚刚注册的普通账户登陆,登陆后会要求你选择开发角色,这里选择账户为开发者的角色。

之后继续,进入到用户主页,即可进行后续创建项目的操作了。

创建gitlab项目:

创建成功的项目视图如下:

gitlab服务器都使用 SSH 公钥进行认证。 为了向 gitlab 服务器提供 SSH 公钥,如果某系统用户尚未拥有密钥,必须事先为其生成一份。 这个过程在所有操作系统上都是相似的。 首先,你需要确认自己是否已经拥有密钥。 默认情况下,用户的 SSH 密钥存储在其 ~/.ssh 目录下。 进入该目录并列出其中内容,你便可以快速确认自己是否已拥有密钥,我们需要寻找一对以 id_dsaid_rsa 命名的文件,其中一个带有 .pub 扩展名。 .pub 文件是你的公钥,另一个则是与之对应的私钥。 如果找不到这样的文件(或者根本没有 .ssh 目录),你可以通过运行 ssh-keygen 程序来创建它们。

id_rsa是私钥,id_rsa.pub是公钥。

点击个人账户->preferences->ssh keys选项,将公钥粘贴在文本框中。

编写一个helloword程序推到工程中:

首先克隆代码

添加用例,推到仓库

通过gitlab网页查看,项目已经包含了我们推上去的改动

gitlab和jekins协同

按照上面创建seqfile流程,创建一个gitlab的构建项目:

构建成功:

系统构建成功:

新建测试任务

在helloworld构建流的基础上,新建一个测试任务,关联gitlab构建流程,设置触发器为构建gitlab后进行测试helloworld.

可以看到,在gitlab触发随后,13-5.6=7.4秒后helloworld测试工程也被触发。

jenkins流水线任务

之前采用Jenkins的自由风格构建的项目,每个步骤流程都要通过不同的方式设置,并且构建过程中整体流程是不可见的,无法确认每个流程花费的时间,并且问题不方便定位问题。Jenkins的Pipeline可以让项目的发布整体流程可视化,明确执行的阶段,可以快速的定位问题。并且整个项目的生命周期可以通过一个Jenkinsfile文件管理,而且Jenkinsfile文件是可以放在项目中维护。所以Pipeline相对自由风格或者其他的项目风格更容易操作。

构建执行

所有任务列表

从另一台电脑登录

前面安装和访问jenkins和gitlab的电脑是同一台,所以我们可以在浏览器中用localhost替代IP地址进行访问。既然这台电脑已经开通了WEB服务以及开放了访问端口。也就可以从另一台电脑进行访问。

gitlab默认使用了nginx作为web server.

jenkins默认使用了jetty作为webserver.

根据IP地址,从另一台电脑访问jenkins和gitlab的地址分别为:

http://192.168.31.85:8848/

http://192.168.31.85:8081/

Gerrit/gitlab代码审核服务器的核心是在web服务器上给托管的Git仓库提供一系列的权限控制,以及通过Web前端页面来做代码审核和权限管理,通常适用于大型软件项目,并且要求软件配置、开发、测试、审核等角色完整的软件开发团队。

gitlab配置仓库

仓库matainer添加开发者权限。

参考文章

https://blog.csdn.net/tugouxp/article/details/120103794?spm=1001.2014.3001.5502

https://blog.csdn.net/tugouxp/article/details/119602151?spm=1001.2014.3001.5502

https://blog.csdn.net/tugouxp/article/details/118752932?spm=1001.2014.3001.5502

https://blog.csdn.net/tugouxp/article/details/104562056?spm=1001.2014.3001.5502

https://blog.csdn.net/qq_20173195/article/details/126521845

结束

猜你喜欢

转载自blog.csdn.net/tugouxp/article/details/129759698