jenkins+gitlab实现自动化部署平台

文章目录

  • jenkins+gitlab实现自动化部署平台
    • git
    • gitlab
      • gitlab介绍
        • 安装
    • jenkins
      • jenkins介绍
        • CI/CD介绍
      • Jenkins安装
    • gitlab+jenkins
      • 配置
    • 学习参考

jenkins+gitlab实现自动化部署平台

git

版本控制系统,顾名思义,版本控制就是一个管理我们文件版本的软件系统。同一份文件中会有不同的版本,编辑者会根据需求对新版本文件添加(修改、删除)内容等
jenkins+gitlab实现自动化部署平台_第1张图片

gitlab

官网
私人代码仓库
公开的对应的是github

gitlab介绍

推荐阿里云下载
是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。

Git的家族成员
Git:是一种版本控制系统,是一个命令,是一种工具。
Gitlib:是用于实现Git功能的开发库。
Github:是一个基于Git实现的在线代码托管仓库,包含一个网站界面,向互联网开放。
GitLab:是一个基于Git实现的在线代码仓库托管软件,你可以用gitlab自己搭建一个类似于Github一样的系统,一般用于在企业、学校等内部网络搭建git私服。

Gitlab的服务构成
Nginx:静态web服务器。
gitlab-shell:用于处理Git命令和修改authorized keys列表。
gitlab-workhorse: 轻量级的反向代理服务器。
logrotate:日志文件管理工具。
postgresql:数据库。
redis:缓存数据库。
sidekiq:用于在后台执行队列任务(异步执行)。
unicorn:An HTTP server for Rack applications,GitLab Rails应用是托管在这个服务器上面的。jenkins+gitlab实现自动化部署平台_第2张图片

GitLab Shell
GitLab Shell有两个作用:为GitLab处理Git命令、修改authorized keys列表。
当通过SSH访问GitLab Server时,GitLab Shell会:
1.限制执行预定义好的Git命令(git push, git pull, git annex)
2.调用GitLab Rails API 检查权限
3.执行pre-receive钩子(在GitLab企业版中叫做Git钩子)
4.执行你请求的动作 处理GitLab的post-receive动作
5.处理自定义的post-receive动作
当通过http(s)访问GitLab Server时,工作流程取决于你是从Git仓库拉取(pull)代码还是向git仓库推送(push)代码。
如果你是从Git仓库拉取(pull)代码,GitLab Rails应用会全权负责处理用户鉴权和执行Git命令的工作;
如果你是向Git仓库推送(push)代码,GitLab Rails应用既不会进行用户鉴权也不会执行Git命令,它会把以下工作交由GitLab Shell进行处理:
1.调用GitLab Rails API 检查权限
2.执行pre-receive钩子(在GitLab企业版中叫做Git钩子)
3.执行你请求的动作
4.处理GitLab的post-receive动作
5.处理自定义的post-receive动作

GitLab Workhorse
GitLab Workhorse是一个敏捷的反向代理。它会处理一些大的HTTP请求,比如文件上传、文件下载、Git push/pull和Git包下载。其它请求会反向代理到GitLab Rails应用,即反向代理给后端的unicorn。

安装

配置要求:内存2G以上

Gitlab环境部署
阿里云购买也可以,不要钱
手动部署:
1、配置yum源
vim /etc/yum.repos.d/gitlab-ce.repo
复制以下内容:
[gitlab-ce]
name=gitlab-ce
baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el6
Repo_gpgcheck=0
Enabled=1
Gpgkey=https://packages.gitlab.com/gpg.key
2、更新本地yum缓存
yum makecache
3、安装GitLab社区版
yum intall gitlab-ce        #自动安装最新版
yum install gitlab-ce-x.x.x    #安装指定版本
4.
vim /etc/gitlab/gitlab.rb 编辑配置文件写入当前主机IP,修改gitlab仓库路径
external_url '当前主机IP'

gitlab-ctl reconfigure    初始化gitlab
gitlab-ctl restart  重载服务
在网页访问输入密码大于八位即可;首次登录会强制用户修改密码。密码修改成功后,输入新密码进行登录。



'GitLab常用命令
gitlab-ctl start    # 启动所有 gitlab 组件;
gitlab-ctl stop        # 停止所有 gitlab 组件;
gitlab-ctl restart        # 重启所有 gitlab 组件;
gitlab-ctl status        # 查看服务状态;
gitlab-ctl reconfigure        # 启动服务;
vim /etc/gitlab/gitlab.rb        # 修改默认的配置文件;
gitlab-rake gitlab:check SANITIZE=true --trace    # 检查gitlab;
gitlab-ctl tail        # 查看日志;'

jenkins

官网 阿里云下载都行
官网
文档

jenkins介绍

Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。常用的版本控制工具有SVN、GIT,构建工具有Maven、Ant、Gradle。
是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。
1)持续的软件版本发布/测试项目。
2)监控外部调用执行的工作。

Jenkins特性:

开源的java语言开发持续集成工具,支持CI,CD;
易于安装部署配置:可通过yum安装,或下载war包以及通过docker容器等快速实现安装部署,可方便web界面配置管理;
消息通知及测试报告:集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知,生成JUnit/TestNG测试报告;
分布式构建:支持Jenkins能够让多台计算机一起构建/测试;
文件识别:Jenkins能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等;
丰富的插件支持:支持扩展插件,你可以开发适合自己团队使用的工具,如git,svn,maven,docker等。

CI/CD介绍

把开发工作流程分为以下几个阶段:
编码 → 构建 → 集成 → 测试 → 交付 → 部署
jenkins+gitlab实现自动化部署平台_第3张图片

正如你在上图中看到,持续集成(Continuous Integration)、持续交付(Continuous Delivery)和持续部署(Continuous Deployment)有着不同的软件自动化交付周期。

CI/CD是什么?

CI(Continuous integration,中文意思是持续集成)是一种软件开发时间。持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。jenkins+gitlab实现自动化部署平台_第4张图片

CD(Continuous Delivery, 中文意思持续交付)是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。比如,我们完成单元测试后,可以把代码部署到连接数据库的Staging环境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境。jenkins+gitlab实现自动化部署平台_第5张图片

Jenkins安装

安装最低配置:不少于256M内存,不低于1G磁盘,JDK版本>=8(openjdk也可以)。
机器可上网

1.jenkins的安装配置
[root@localhost ~]# ls
jdk-8u171-linux-x64.rpm  jenkins-2.121.1-1.1.noarch.rpm
[root@localhost ~]# yum install * -y

2.打开服务
[root@localhost ~]# systemctl status jenkins
● jenkins.service - LSB: Jenkins Automation Server
   Loaded: loaded (/etc/rc.d/init.d/jenkins; bad; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:systemd-sysv-generator(8)
[root@localhost ~]# /etc/init.d/jenkins start  开启服务
Starting jenkins (via systemctl):                          [  OK  ]

[root@localhost ~]# netstat -antlp  查看端口8080开启
3.网页访问jenkins
根据提示在虚拟机获取初始化密码:
[root@localhost ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
bdb371f17f07452eb5d935d7ab6d4f16

安装建议安装插件
这里要保证所有插件安装成功,保证网络有失败的再次安装即可
'加速Jenkins安装插件的速度
第1种方式:使用vim
vim /var/lib/jenkins/updates/default.json	##插件下载的加速  这是打开网页之后才有的
:$s/http:\/\/www.google.com/https:\/\/www.baidu.com/g
:$s/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g

第二种方式:使用sed
sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json
&& sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json'

创建Admin用户,完成相关设置
此时jenkins已部署完毕

查看jenkins的配置文件
cat /etc/sysconfig/jenkins				#查看jenkins的配置文件,定义了home、JAVA_CMD、user、port等基础配置,保持默认即可

查看程序主目录:
# ls /var/lib/jenkins/				#查看程序主目录
config.xml                                      nodes
hudson.model.UpdateCenter.xml                   plugins
hudson.plugins.git.GitTool.xml                  queue.xml.bak
identity.key.enc                                secret.key
jenkins.CLI.xml                                 secret.key.not-so-secret
jenkins.install.InstallUtil.lastExecVersion     secrets
jenkins.install.UpgradeWizard.state             updates
jenkins.model.JenkinsLocationConfiguration.xml  userContent
jobs                                            users
logs                                            workflow-libs
nodeMonitors.xml


jobs		浏览器上面创建的任务都会存放在这里
logs		存放jenkins相关的日志
nodes		多节点时用到
plugins		插件所在目录
secrets		密码秘钥所在目录				
#jobs和plugins目录比较重要
jenkins存放数据不依靠数据库,所以在移植时只需要拷贝整个程序主目录即可。

gitlab+jenkins

GitLab是一个代码仓库,用来管理代码。Jenkins是一个自动化服务器,可以运行各种自动化构建、测试或部署任务。
所以这两者结合起来,就可以实现开发者提交代码到GitLab,Jenkins以一定频率自动运行测试、构建和部署的任务,
帮组开发团队更高效的集成和发布代码。
两者结合起来,就可以实现开发者提交代码到GitLab,Jenkins以一定频率自动运行测试、构建和部署的任务,帮助开发团队更高效的集成和发布代码。
jenkins+gitlab实现自动化部署平台_第6张图片

jenkins+gitlab实现自动化部署平台_第7张图片

配置

节点 服务
node1 gitlab
node2 gjenkins
1.配置gitlab的ssh免密连接
# cd .ssh/
# ls
authorized_keys  id_rsa  id_rsa.pub  known_hosts
# cat id_rsa.pub 查看公钥
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDNeD0hcnCreyvvLHo5fMcQ4MszPyzAihqHQa9plB7Hxn+Qau4SSo8h2jJbhIDtvGfQdrCcB7823+skP6QFrfhUWBUbwZ7UjleSbumA3YhHK/ooCEzDx1kQY9pXxOEIp7jZ4PWfOhvINyFC1RH/kPC7Tx7697lq3mcWQCRS1wArF3vg3AHsNDtswwiYLitHkiZDlUVBBBnwH4GM1xe4YKtQXDOoqjnfxoq2LHFh8JKb/92NvqzYr1w+E8ps/jx+AoeUnv9pU4qtHierA3B/DQawI+wH3ChABZAjmr7zONbdINj1QJIjFmjDOgXQIc2eyYTFJb7/qaCwvm+Cwm6SVitx [email protected]
将公匙复制到gitlab的sshkeys
2.使用gitlab
在GitLab的主页中新建一个Project:demo
# git clone [email protected]:root/demo.git  进行克隆
Cloning into 'demo'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
# cd demo/
# ls
README.md
# cd .git/
# ls
branches  description  hooks  info  objects      refs
config    HEAD         index  logs  packed-refs
# git remote -v   
origin	[email protected]:root/demo.git (fetch)
origin	[email protected]:root/demo.git (push)
# cd ..
# ls
README.md
#提交代码
# vim README.md 
# cat README.md 
 demo
 helloworld
# git add README.md   提交到暂存区
# git commit -m "add README.md"   直接提交
[master e4b9560] add README.md
 1 file changed, 1 insertion(+)
# git push origin master
Counting objects: 5, done.
Writing objects: 100% (3/3), 261 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To [email protected]:root/demo.git
   c11a0b1..e4b9560  master -> master
在gitlab界面可以看到实时数据

#创建一个测试job

查看私钥:
# cd /root/.ssh/
# ls
authorized_keys  demo  id_rsa  id_rsa.pub  known_hosts
# cat id_rsa  全部复制到网页即可
设置免密保存即可

#通过git测试jenkins,ssh gitlab主机
# pwd
/home/kiosk/demo
# ls
aa.txt  readme.md  test.txt
# vim test.txt 
# cat test.txt 
test
# git add test.txt   提交信息
# git commit -m "add test.txt"
[master 02cadf8] add test.txt
 1 file changed, 1 deletion(-)

# git push origin master  推送信息
Username for 'https://github.com': xuefeilong
Password for 'https://[email protected]': 
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 248 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To https://github.com/xuefeilong/test.git
   acbf46a..02cadf8  master -> master

此时可以看到jenkins有推送信息标志,查看控制台输出可以看到提交的信息


学习参考

1

2

你可能感兴趣的:(自动化运维工具,gitlab,jenkins)