DevOps 是 Development 和 Operations 的组合,也就是开发和运维的简写。DevOps 是针对企业中的研发人员、运维人员和测试人员的工作理念,是他们在应用开发、代码部署和质量测试等整条生命周期中协作和沟通的最佳实践,DevOps 强调整个组织的合作以及交付和基础设施变更的自动化、从而实现持续集成、持续部署和持续交付。DevOps 四大平台:代码托管(gitlab/github/gerrit/svn)、项目管理(jira)、运维平台(腾讯蓝鲸/开源平台)、持续交付(Jenkins/gitlab).
Jenkins 是一款开源自动化服务器,结合 web 界面一键部署--自动化构建交付,可用于轻松设置持续集成和持续交付(CI / CD)管道。
持续集成(CI)是DevOps的一种实践,团队成员定期将其代码更改提交到版本控制存储库,然后运行自动构建和测试。 持续交付(CD)是一系列的实践,代码更改会自动生成,测试并部署到生产中。
Jenkins可以作为独立应用程序安装,也可以用APT方式安装。
什么是持续集成(CI-Continuous integration):持续集成是指多名开发者在开发不同功能代码的过程当中,可以频繁的将代码行合并到一起并切相互不影响工作。
什么是持续部署(CD-continuous deployment):是基于某种工具或平台实现代码自动化的构建、测试和部署到线上环境以实现交付高质量的产品,持续部署在某种程度上代表了一个开发团队的更新迭代速率。目标是始终保证存在一个可交付的仓库。
什么是持续交付(Continuous Delivery):持续交付是在持续部署的基础之上,将产品交付到线上环境,因此持续交付是产品价值的一种交付,是产品价值的一种盈利的实现。
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,打开浏览器,输入
https://localhost:8080
提示你输入在安装过程中创建的管理员密码, 密码保存在文件/var/lib/jenkins/secrets/initialAdminPassword中。
之后创建管理员账户:
继续,进入jenkins主页面:
此时打开终端,输入命令查案8080端口的使用情况:
sudo lsof -i:8080
Jenkins支持很多的plugin,这些plugin极大地丰富了Jenkins的功能。安装plugin有两种方式:自动安装和手动安装。
自动安装比较简单,直接在jenkins浏览器界面操作,入口是:
进入主页http://localhost:8080/->manage jenkins-> manage plugins-> available plugins
搜索publish over ssh插件,选择安装
继续搜索PostBuildScript插件,用于Jenkins构建后,根据结果,执行shell脚本,可用于集群服务器。
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文件,找到
vim /var/lib/jenkins/config.xml
true修改为false:
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被释放。
删除项目,鼠标放到项目右边,会自动显示》符号,从中选择删除。
sudo apt-get install curl openssh-server ca-certificates postfix net-tools
有两种选择,可以在线下载安装
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包下载安装文件进行安装。
这里使用第一种方法,在线下载过程还是比较漫长的
出现以下提示,表示安装成功:
sudo vim /etc/gitlab/gitlab.rb
默认情况下,GITLAB也使用8080端口,如果不调整,必定会产生端口冲突,所以实际应用中,GITLAB和JENKINS一般是不同的机器,这里没有这个条件,我们修改配置对外IP和默认端口8081:
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
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_dsa 或 id_rsa 命名的文件,其中一个带有 .pub 扩展名。 .pub 文件是你的公钥,另一个则是与之对应的私钥。 如果找不到这样的文件(或者根本没有 .ssh 目录),你可以通过运行 ssh-keygen 程序来创建它们。
id_rsa是私钥,id_rsa.pub是公钥。
点击个人账户->preferences->ssh keys选项,将公钥粘贴在文本框中。
编写一个helloword程序推到工程中:
首先克隆代码
添加用例,推到仓库
通过gitlab网页查看,项目已经包含了我们推上去的改动
按照上面创建seqfile流程,创建一个gitlab的构建项目:
构建成功:
系统构建成功:
在helloworld构建流的基础上,新建一个测试任务,关联gitlab构建流程,设置触发器为构建gitlab后进行测试helloworld.
可以看到,在gitlab触发随后,13-5.6=7.4秒后helloworld测试工程也被触发。
之前采用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前端页面来做代码审核和权限管理,通常适用于大型软件项目,并且要求软件配置、开发、测试、审核等角色完整的软件开发团队。
仓库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