持续集成Jenkins+Gitlab实现持续集成

用户说明
  • 假设node3是程序员的个人电脑,在这台机器上编写代码 ip地址192.168.10.10

Git的安装部署及使用

  • git config --global user.name ‘zzg’ #定义用户
  • git config --global user.email ‘[email protected]’ #定义邮箱
  • git config --global core.editor vim #定义注释时的解释器
  • git config --list #查看git文件内容
  • cat ~/.gitconfig #查看git信息

git重要的概念

  • 工作区:编写程序时,创建一个目录,把程序文件全都放在该目录下,这个目录就是工作区
  • 暂存区:工作区和版本库之间的缓冲地带
  • 版本库:git在工作区中创建一个隐藏目录.git,这个目录是版本库,它在工作区下,但是不是工作区的一部分。
提交
确认
工作区
暂存区
版本库

创建本地仓库

  • 新建项目时已经计划使用git
[root@node3 ~]# git init myproject
初始化空的 Git 版本库于 /root/myproject/.git/
[root@node3 ~]# ls -A myproject/
.git
  • 在已经存在的项目中使用git
[root@node3 ~]# mkdir devops
[root@node3 ~]# cd devops/
[root@node3 devops]# echo '

Hello World!

' > index.html
[root@node3 devops]# git init . 初始化空的 Git 版本库于 /root/devops/.git/ [root@node3 devops]# ls -A .git index.html

git应用

[root@node3 devops]# git status  # 状态
[root@node3 devops]# git status -s  # 简要信息
?? index.html
[root@node3 devops]# git add .   # 将目录下所有内容加入暂存区,开始跟踪
[root@node3 devops]# git status -s
A  index.html
[root@node3 devops]# git commit -m "modify index.html, add hosts"  # 确认至版本库,需要写日志
[root@node3 devops]# git log  # 查看所有的提交
commit 0fff998482d7630caa531f28d51587884745b423
Author: zzg <[email protected]>
Date:   Tue May 21 14:16:04 2019 +0800

 modify index.html, add hosts
 
 恢复误删除的文件
 
[root@node3 devops]# rm -rf *
[root@node3 devops]# ls
[root@node3 devops]# git status
# 位于分支 master
# 尚未暂存以备提交的变更:
#   (使用 "git add/rm ..." 更新要提交的内容)
#   (使用 "git checkout -- ..." 丢弃工作区的改动)
#
#	删除:      hosts
#	删除:      index.html
#
修改尚未加入提交(使用 "git add" 和/或 "git commit -a"[root@node3 devops]# git checkout -- *
[root@node3 devops]# ls
hosts  index.html
[root@git devops]# git checkout \ 0fff998482d7630caa531f28d51587884745b423 #切换到目的版本
现在目录下出现了index.html和hosts两个文件
[root@node3 devops]# ls
index.html  hosts
# 返回到最新的提交
[root@node3 devops]# git checkout master

分支管理

# 查看分支
[root@node3 devops]# git branch
* master
[root@node3 devops]# ls
index.html  mima
# 新建分支
[root@node3 devops]# git branch fn1
[root@node3 devops]# git branch
  fn1
* master
# 切换分支
[root@node3 devops]# git checkout fn1
切换到分支 'fn1'
[root@node3 devops]# git branch
* fn1
  master
# 在fn1分支中编写程序
[root@node3 devops]# cp ~/anaconda-ks.cfg .
[root@node3 devops]# git add .
[root@node3 devops]# git commit -m "fn1 add anaconda"
[fn1 619f6fb] fn1 add anaconda
 1 file changed, 65 insertions(+)
 create mode 100644 anaconda-ks.cfg
[root@node3 devops]# ls
anaconda-ks.cfg  index.html  mima
# 切换回master分支
[root@node3 devops]# git checkout master
切换到分支 'master'
[root@node3 devops]# ls
index.html  mima
# 合并fn1分支到主干
[root@node3 devops]# git merge fn1
更新 8e1c9eb..619f6fb
Fast-forward
 anaconda-ks.cfg | 65 ++++++++++++++++++++++++++++++++++++
 1 file changed, 65 insertions(+)
 create mode 100644 anaconda-ks.cfg
[root@node3 devops]# ls
anaconda-ks.cfg  index.html  mima
# fn1分支使命已经达成,可以删除
[root@node3 devops]# git branch -d fn1
已删除分支 fn1(曾为 619f6fb)。
[root@node3 devops]# git branch 
* master

Gitlab服务器

持续集成Jenkins+Gitlab实现持续集成_第1张图片

  • 登陆时的用户名是root
  • 访问http://192.168.10.11 初始化密码必须是8位以上,复杂。
添加新群组

持续集成Jenkins+Gitlab实现持续集成_第2张图片
选择公开

为devops组中的成员创建用户zzg。新建用户的时候,不能创建密码。用户建立好之后,修改用户,可以为其加密码。

持续集成Jenkins+Gitlab实现持续集成_第3张图片
点击上面小扳手位置。可以新增用户和新建项目

持续集成Jenkins+Gitlab实现持续集成_第4张图片

  • 新建项目,并选择公开
    持续集成Jenkins+Gitlab实现持续集成_第5张图片
  • 选择左下角设置,为项目添加用户
    持续集成Jenkins+Gitlab实现持续集成_第6张图片
  • gitlab项目中默认只支持主程序员和管理员上传文件。如果需要更改在设置==>版本库==> 保护分支中开启

gitlab中重要的概念

  • 群组group:对应成一个部门、开发团队
  • 成员:对应用户
  • 项目:对应软件项目

新建组,名为devops。群组等级为公开。
为devops组中的成员创建用户zzg。新建用户的时候,不能创建密码。用户建立好之后,修改用户,可以为其加密码。
新建项目devops。新建的用户zzg是新项目的主程序员。可见等级为公开。项目创建完成后,点击左下角的“折叠边栏”=>“设置”=>“成员”=>邀请上一步创建的用户,角色是“主程序员”。

新建的用户上传代码

上传代码有两种方式,一种是http的方式,这种方式,每次上传代码都需要填写用户名和密码。另一种是通过ssh实现免密登陆。

[root@node3 devops]# ssh-keygen -t rsa -C "[email protected]" -b 4096
[root@node3 devops]# cat ~/.ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC4l7/lm33v5VV1Pspkea0ldWlwgZgAJ+Z64HoVkLX+0oudHuuPhKGf9pnzRpGklWVPaoA9M3pMAjuNaiWc5OIeOwYKHP3XPV3fTR5M1iWr034/zcWrSm0MJ5BXtqnpamWH8Fy1i9WhyPR98/Sn8k0EaHt7c5PyQLqM2li2YG7HtWf2Z6CuxI83rUBVlN2TwnIhWzLKheUzMb1zCYi83I6WDX5FNvGYG+3kw7SisKmCl54ex1uQMoDLRjCjnEsLoCg4fZRGBXWH3/4K1Fn+mPxxDsKyHlusU5lgtTNu3XHdfuxJRlL8luUKHGrBKd73fo7Vo5lxpy+/75OlXd/9ybXaRVvXsJ2t8xitLgyT2ov4mL5sR996EkTsy7ZWQiJY3mDCDBlNnpwkK02IlXOlWQ8xnVAT/XW3druFASCDUdUFh92+zEG1LP1NwMX1msuflRy/1p+GqphCCQXO1VIefWtZ3I5Q+UaWgE8cGq9ol3G/WUKnCJ8XCLM45EMSBPZiPtwn2xd417C8COGe+J7XRO0Vy3wf5w0ODKDonEzFmob2FhGYqyax4SJk/RniOgMFORPBO0DMzEU5YkHKuthNU7EUhiDfeHWROtr4ja8bqDEPpbSf56e9hqfnoOCp6USbjMbQCPp/ZrC1KNV3JDH2N1FqS3pKJBaH9y40Ted/ZbNeRw== [email protected]
  • 点击右上角设置,在左边点击ssh密钥
    持续集成Jenkins+Gitlab实现持续集成_第7张图片持续集成Jenkins+Gitlab实现持续集成_第8张图片
  • 添加密钥成功后就可以使用免密钥下载和发送脚本到Gitlab服务器
 [root@node3 devops]# mkdir myweb  														#创建版本仓库目录		
[root@node3 devops]# cd myweb
echo '

Hello World!

' > index.html #创建测试页面 [root@node3 devops]# git init . #创建Git仓库 echo '

text web 2.0

' >> index.html #更新为web页面内容 [root@node3 devops]# git add . #添加到缓冲区 [root@node3 devops]# git commit -m "web test 2.0" #添加到工作区 [root@node3 devops]# git tag #打上标记 [root@node3 devops]# git remote rename origin old-origin #在Gitlab定义 如果出现以下报错,忽略 error: 不能重命名配置小节 'remote.origin' 到 'remote.old-origin' [root@node3 devops]# git remote add origin \ [email protected]:devops/myweb.git #Gitlab服务器地址 [root@node3 devops]# git remote rm origin #如不小心将git远程地址配错了需要删除后在重新添加 [root@node3 devops]# git push -u origin --all #将本地文件上传到Gitlab服务器 [root@node3 devops]# git push -u origin --tags #将版本标记上传到Gitlab服务器

Jenkins部署即持续化集成

安装jenkins

[root@node4 ~]# yum -y install java-1.8.0-openjdk
[root@node4 ~]# yum install -y jenkins-2.138.2-1.1.noarch.rpm
[root@node4 ~]# systemctl start jenkins
[root@node4 ~]# systemctl enable jenkins

打开http://192.168.10.12:8080。安装插件选择自定义=>无。不用创建管理员帐号,使用admin登陆即可。登陆后,将管理员的密码改掉。

持续集成Jenkins+Gitlab实现持续集成_第9张图片
持续集成Jenkins+Gitlab实现持续集成_第10张图片

点击主页设置 ==>点击Manage Jenkins ==>插件管理 ==> 可选插件 ==> Localization: Chinese (Simplified) 中文插件补丁,git parameter(gitlab支持包)

在这里插入图片描述

  • 在jenkins上创建工程,自动下载代码
  • 点击新建任务
  • 创建一个自由风格的软件项目

持续集成Jenkins+Gitlab实现持续集成_第11张图片

  • 选择参数化构建过程
  • 选择下载的插件Git Parameter==>Name:自定义==>Default Value:origin/master
    持续集成Jenkins+Gitlab实现持续集成_第12张图片
  • 源码管理
  • 选择Git == > Repositories ==> Repository URL ==> 选择Gitlab上项目的http链接
  • 如输入链接后提示 该错误,可能是Jenkins服务器没有安装Git软件包导致
  • 另需要定义从Gitlab下载代码后保存在子文件夹下,并改名为myweb-$webver,其中$webver为之前上面所定义的版本号变量持续集成Jenkins+Gitlab实现持续集成_第13张图片
  • 点击Additional Behaviours ==> Checkout to a sub-directory:myweb-$webver
    持续集成Jenkins+Gitlab实现持续集成_第14张图片
  • 正常添加后,选择构建 ==> 构建步骤选择shell, 此处为Jenkins构建后执行的命令
    持续集成Jenkins+Gitlab实现持续集成_第15张图片
  • Jenkins将Gitlab仓库下载的代码默认放在/var/lib/jenkins/workspace/下

完善Jenkins

  • jenkins下载web项目后,将其打包
  • 为了应用服务器可以下载项目软件包,在jenkins上安装httpd服务,以便应用服务器下载
[root@jenkins ~]# yum install -y httpd
[root@jenkins ~]# systemctl start httpd
[root@jenkins ~]# systemctl enable httpd
[root@jenkins ~]# mkdir -p /var/www/html/deploy/pkgs
# /var/www/html/deploy/: 保存livever、lastver,即当前版本和前一个版本的版本号
# /var/www/html/deploy/pkgs/: 保存软件压缩包和它的md5值
[root@jenkins ~]# chown -R jenkins.jenkins /var/www/html/deploy/
# 因下载后默认为用户jenkins写入数据,将deploy文件夹改成jenkins所有确保能正常使用

在Jenkins添加shell脚本

deploy_dir=/var/www/html/deploy
pkgs_dir=/var/www/html/deploy/pkgs
cp -r myweb-$webver $pkgs_dir
# 将下载的软件目录拷贝到web服务器目录
cd $pkgs_dir
rm -rf myweb-$webver/.git
# 删除版本库文件
tar czf myweb-$webver.tar.gz myweb-$webver
# 打包压缩
md5sum myweb-$webver.tar.gz | awk '{print $1}' > myweb-$webver.tar.gz.md5 # 计算并保存md5值
rm -rf myweb-$webver
# 删除程序目录
cd $deploy_dir
[ -f livever ] && cat livever > lastver
echo $webver > livever
# 将当前版本内容写到前一版本文件
# 更新当前版本

你可能感兴趣的:(持续集成Jenkins+Gitlab实现持续集成)