用户说明
- 假设node3是程序员的个人电脑,在这台机器上编写代码 ip地址192.168.10.10
Git的安装部署及使用
- git config --global user.name ‘zzg’ #定义用户
- git config --global user.email ‘zzg@qq.cn’ #定义邮箱
- 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 '<h1>Hello World!</h1>' > 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 <zzg@qq.cn>
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 <file>..." 更新要提交的内容)
# (使用 "git checkout -- <file>..." 丢弃工作区的改动)
#
# 删除: 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服务器
- 登陆时的用户名是root
- 访问http://192.168.10.11 初始化密码必须是8位以上,复杂。
添加新群组
选择公开
为devops组中的成员创建用户zzg。新建用户的时候,不能创建密码。用户建立好之后,修改用户,可以为其加密码。
点击上面小扳手位置。可以新增用户和新建项目
- 新建项目,并选择公开
- 选择左下角设置,为项目添加用户
- gitlab项目中默认只支持主程序员和管理员上传文件。如果需要更改在设置==>版本库==> 保护分支中开启
gitlab中重要的概念
- 群组group:对应成一个部门、开发团队
- 成员:对应用户
- 项目:对应软件项目
新建组,名为devops。群组等级为公开。
为devops组中的成员创建用户zzg。新建用户的时候,不能创建密码。用户建立好之后,修改用户,可以为其加密码。
新建项目devops。新建的用户zzg是新项目的主程序员。可见等级为公开。项目创建完成后,点击左下角的“折叠边栏”=>“设置”=>“成员”=>邀请上一步创建的用户,角色是“主程序员”。
新建的用户上传代码
上传代码有两种方式,一种是http的方式,这种方式,每次上传代码都需要填写用户名和密码。另一种是通过ssh实现免密登陆。
[root@node3 devops]# ssh-keygen -t rsa -C "zzg@tedu.cn" -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== zzg1@qq.com
- 点击右上角设置,在左边点击ssh密钥
- 添加密钥成功后就可以使用免密钥下载和发送脚本到Gitlab服务器
[root@node3 devops]# mkdir myweb #创建版本仓库目录
[root@node3 devops]# cd myweb
echo '<h1>Hello World!</h1>' > index.html #创建测试页面
[root@node3 devops]# git init . #创建Git仓库
echo '<h2>text web 2.0</h2>' >> 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 \ git@192.168.10.83: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登陆即可。登陆后,将管理员的密码改掉。
点击主页设置 ==>点击Manage Jenkins ==>插件管理 ==> 可选插件 ==> Localization: Chinese (Simplified) 中文插件补丁,git parameter(gitlab支持包)
- 在jenkins上创建工程,自动下载代码
- 点击新建任务
- 创建一个自由风格的软件项目
- 选择参数化构建过程
- 选择下载的插件Git Parameter==>Name:自定义==>Default Value:origin/master
- 源码管理
- 选择Git == > Repositories ==> Repository URL ==> 选择Gitlab上项目的http链接
- 如输入链接后提示 该错误,可能是Jenkins服务器没有安装Git软件包导致
- 另需要定义从Gitlab下载代码后保存在子文件夹下,并改名为myweb-$webver,其中$webver为之前上面所定义的版本号变量
- 点击Additional Behaviours ==> Checkout to a sub-directory:myweb-$webver
- 正常添加后,选择构建 ==> 构建步骤选择shell, 此处为Jenkins构建后执行的命令
- 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
# 将当前版本内容写到前一版本文件
# 更新当前版本