wave-zo

git + gitlab + jenkins + nginx 

  一键实现代码自动同步,其实使用jenkins中的触发器功能,才是真正完美的实现自动化,啥都不干,dev上传代码,直接就同步到web服务器的站点目录中。

老男孩教育讲得真不错,不过有个老师讲的想拽瞌睡,笔记就是老男孩上面的,稍加改动本来是想同步到有道云,然后空闲的时候,也可以看看,今天我的有道云哥哥出毛病了,暂且存在上面,未来再看,哈哈哈。。。

一、DevOps的介绍

1.就是一种过程规范、协作方式、工具、生产环境,加强运维人员与开发人员之间的协作关系,高效交付产品。

  Dev:development Ops:operations
2.DevOps能够干嘛:
提高产品的质量:
1)自动化测试
2)持续集成(持续代码合并)
3)代码质量管理工具
4)程序员鼓励师
3.DevOps如何实现:
  设计架构规划——代码存储——构建、测试、预生产、部署、监控
 
4.Git版本控制系统
1)版本控制系统(version control system):可以记录一个或若干个文件内容变化,方便查阅历史上的某个记录
作用:1.随时可以恢复到历史某一个历史状态
      2.多人协作开发
2)常见的版本管理工具
SVN:集中式版本控制系统,只有一个*数据仓库
Git:分布式的版本控制系统,在每个使用者电脑上就有一个完整的数据仓库,没有网络依然可以使用git,为了更好的
团队合作,可以将数据同步到git服务器或GitHub等代码仓库上。
 
3)Git
Git就是linux的创始人托瓦芝写的
5.Git安装
1)系统环境准备
cat /etc/redhat-release 查看系统版本
uname -r 查看系统内核
getenforce 确认Selinux关闭状态
systemctl stop firewalld 关闭防火墙
2)Git安装部署
一般情况下,linux会自带Git工具,毕竟是同一个人开发的,
不妨使用rpm命令查看一下
rpm -qa git 查看软件git是否已经安装
如果没有的话,就得安装Git了
yum install -y git
git config
--global 使用全局配置文件
--system 使用系统级配置文件
--local 使用版本库级配置文件
进行用户的相关配置,早晚都要的配,否则到后面就无法提交暂存区中的代码到本地的数据仓库中
git config --global user.name "zb" 配置git使用用户
git config --global user.email "zb@qq.com" 配置git使用邮箱(邮箱可以随便写)
git config --global color.ui true 语法高亮(建议配置)
3)Git的初始化
初始化工作目录
mkdir data_git
cd data_git
git init 初始化,需要进入工作目录中输入该命令
[root@web02 ~/data_git]# tree -L 1 .git/
.git/
├── branches 分支目录
├── COMMIT_EDITMSG
├── config 定义项目特有的配置选项
├── description 仅供git web程序使用
├── HEAD 指示当前的分支
├── hooks 包含git钩子文件
├── index 保存暂存区西信息,在执行git init 的时候,这个文件还没有
├── info 包含一个全局排除文件(exclude文件)
├── logs
├── objects 存放所有数据内容,有info和pack两个子文件夹
└── refs 存放指向数据(分支)的提交对象的指针
4)Git的一些常用命令
1.git init 初始化仓库,把一个目录初始化为一个版本仓库(可以是空的目录 也可以是带内容的目录)
2.git status 查看当前仓库的状态
3.git add . 使用. 或*添加目录中所有改动过的文件到暂存区域中
4.删除工作目录中的文件的方法:
a 先从暂存区撤回到工作区、然后直接删除文件
git rm --cached bbb
rm -f bbb
b 直接从暂存区域同工作区域一同删除文件
git rm -f bbb
 
  小结:如何真正意义上通过版本控制系统管理文件
1.工作目录必须有个代码文件
2.通过git add file 将代码文件添加到暂存区域中
3.通过git commit -m "描述信息" 添加到本地仓库中
5.git commit -m 从缓存区提交到本地仓库
6.修改文件名的两种方法:
a
mv zb zb.txt
git rm --cached zb 从暂存区删除zb文件
git add zb.txt 将文件zb.txt添加到暂存区
git commit -m "commit zb.txt"
然后就完成了文件的改名过程,是不是很繁琐,下面这个方法就很好了
b 直接使用git命令重命名
git mv zb.txt zb 把工作区域和暂存区域的文件同时修改文件名称
7.git status只能查看区域状态的不同,不能查看文件内容的变化
git diff 查看文件内容的不同,默认比较的是工作目录和暂存区有什么不同
git diff --cached 比对暂存区和本地仓库的不同
8.当一个文件被添加到了暂存区,就代表该文件已经被仓库管理
当这个文件被修改之后,可以使用命令直接添加到本地仓库中
git commit -am "agdag"
如果是新创建的文件,那么就只好按照下面的做法,将文件添加本地仓库中了:
git add 新文件
git commit -m "描述信息"
 
git commit 相当于虚拟机的镜像、任何操作都被做了一次快照,可以恢复到任意一个位置
git log 查看历史的git commit 快照操作
git log --oneline 一行简单的显示commit信息
git log --oneline --decorate 显示当前的指针指向哪里
git log -p 显示具体内容的变化
git log -2 查看最近的两次改变
git log -2 -p 查看最近的两次详细改变
9.恢复历史数据
1)只是修改了工作区的文件数据,但是并未提交到暂存区
在工作目录下:
echo htquiha >zb 例如使用这条命令不小心将原文件的内容覆盖了,怎么恢复呢
git checkout -- zb 从暂存区覆盖本地工作目录
2)修改了本地目录,且同时提交到暂存区
echo ghagh >> zb zb文件中添加新内容
git add zb 提交到暂存区
git diff --cached 比对暂存区和本地仓库的内容
git reset HEAD zb 本地仓库覆盖暂存区
git checkout -- zb 然后再使用暂存区的内容覆盖掉工作区中修改之后的内容,以达到还原的目的
3)修改了工作目录后提交到了暂存区和本地仓库后进行数据恢复
echo ghagh >> zb
git add zb
git commit -m " add ghagh"
这个时候就只能使用git的类似快照的功能了
Git服务程序提供了一个叫做HEAD的版本指针,默认指向最近一次提交的版本记录
git log --oneline 先找到犯错之前的前一个提交版本记录的哈希字串
git reset --hard d7643c4 根据哈希字串进行数据的恢复
此时你使用git log --oneline查看提交的历史记录,发现最新的那一次的历史记录不见了,
那该怎么查看呢?
要想还原到未来的历史更新点,可以使用git reflog 命令来查看所的历史记录
git reflog 查看所用的历史记录
git reset --hard 哈希字串
然后就可以从过去返回到现在了
 5.git分支
1)一般实际的项目开发中,我们要尽量保证master分支是非常稳定的,仅用于发布新版本,工作的时候可以尽力不同的分支
  等到工作完成之后再合并到master分支上面
2)关于分支常用的一些命令
git branch 查看分支
git branch testing 新建testing分支
[root@web02 ~/data_git]# git branch testing
[root@web02 ~/data_git]# git branch
* master *号在哪里就说明当前在哪个分支上
testing
git checkout testing 切换到testing分支
git checkout -b testing 创建并切换到testing分支
git branch -d testing 删除testing分支
git merge testing 代码合并,将testing分支的代码合并过来,但是自己的却不给过去
 6.git tag
标签也是指向一次的commit提交,回滚到标签直接加标签号,不需要加唯一标识符,也可以将历史提交的某一记录
标记为标签
git tag -a v1.0 -m "haha" 创建标签,-a指定标签名,-m指定说明文字
git tag -a v1.0 416ab75 -m "haha" 指定某一次提交为标签
git tag 查看历史标签信息
git show v1.0 查看指定标签的详细信息
git reset --hard v1.0 直接还原数据到v1.0
git tag -d v1.0 删除指定标签,使用-d 参数
7.github的使用
是git版本库的托管服务,是全球最大的软件仓库,是软件开发和寻找资源的最佳路径,拥有美观的web界面,里面的代码文件可以被任何
人克隆,方便开发者为开源项目贡献代码,如果不想让别人看到你的代码,可以购买私有库。
使用的大致过程:
1.注册用户
github.com
账户号:Wave-Zo
新建一个仓库:data_git
git remote add origin git@github.com:Wave-Zo/data_git.git 远程添加一个仓库名叫origin
2.配置ssh-key
生成一个密钥对:
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub
复制密钥信息到github中进行配置
setting——ssh key ——New ssh key
Name:rootrsa
上传代码到远程仓库需要进入到工作目录中
git remote -u origin master 将主分支上的代码全部上传到名为origin的远程仓库中
之后就可以在github的web界面看到上传的代码信息
3.创建项目
4.克隆项目到本地
cd /tmp
[root@web02 /tmp]# git clone git@github.com:Wave-Zo/data_git.git
下载下来的目录就是一个工作目录,可以进入这个目录中使用git命令
5.推送新代码到github
在刚刚下载下来的目录中创建一个代码文件,并推送到远程仓库中
echo "public classs Zb{public statis void main(String args)()}">z
git add z
git commit -m "create new file z " z
git push -u origin master
然后就可以在github上看到新增加了z文件:
8.gitlab安装
Gitlab是一个用于仓库管理系统的开源项目,使用git作为代码管理工具,并在此基础上搭建起来的web服务。
可以访问公开或私人项目,与github功能类似,提供了一个简单的聊天工具wall,还提供了一个代码片段收集功能
可以轻松实现代码复用。
官网:https://about.gitlab.com/
国内镜像网站:清华源:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/
下载ce社区版(开源的)
安装的环境:
1.centos6或7
2.至少2G的内存(实验) 生产的话:至少4G
为什么要求2G呢?当你下载并安装gitlab,然后启动其服务,查看内存的使用情况,如下:
[root@zb01 ~]# free -h
total used free shared buff/cache available
Mem: 1.9G 1.3G 222M 49M 397M 331M
Swap: 1.0G 24M 999M
看到了吧,内存已经使用了1.3G,交换分区都是使用了24M,可以想象如果只用1G的内存,gitlab
怕是启动不了。
 
3.安装包:gitlab-ce-10.2.2-ce.0.el6.x86_64.rpm
4.禁用防火墙,关闭selinux服务
 
安装过程:
1.查看gitlab官网:install Gitlab——选择Centos7——就可以看到安装介绍
2.解决依赖问题
yum install -y curl policycoreutils-python openssh-server perl
3.到清华源下载gitlab的rpm包,然后上传到linux中:
rpm -ivh gitlab-ce-10.2.2-ce.0.el6.x86_64.rpm
4.编辑gitlab配置文件
vim /etc/gitlab/gitlab.rb
external_url \'http://10.0.0.200\' 修改为主机的ip地址,或者域名
gitlab-ctl reconfigure 更改配置文件之后要重新配置
/opt/gitlab/ gitlab程序安装目录
/var/opt/gitlab/ gitlab目录数据目录
/var/opt/gitlab/git-dfata 存放仓库数据
gitlab-ctl status 查看目前gitlab所有服务运行状态
gitlab-ctl stop 停止gitlab服务
gitlab-ctl stop nginx 单独停止某一个服务
gitlab-ctl tail 查看所有服务的日志
通过浏览器输入IP地址进行访问gitlab
10.0.0.200
gitlab的服务构成:
nginx:静态的web服务器
gitlab-workhorse:轻量级的反向代理服务器
logrotate: 日志文件管理工具
数据库
5.登录进入到gitlab web界面,先创建一个组——创建项目——最后再创建用户
还要配置ssh key的信息:
ssh-keygen -t rsa
cat ./.ssh/id_rsa.pub
6.创建新的仓库,当你再web界面创建一个组的时候,会有相应的步骤:
全局配置:
git config --global user.name "zb"
git config --global user.email "zb@qq.com"
git clone git@10.0.0.200:tset/git_data.git
进入到工作目录中,创建一个文件
cd git_data
touch README.md
git add README.md
git commit -m "add README"
同步到远程仓库中,默认名为origin
git push -u origin master
之后就可以在gitlab web界面上看到刚刚上传的数据
 
7.新建一个开发者用户dev
密码12345678,并将其加入tset组中
8.在gitlab 界面中用户dev用户登录,然后设置其ssh key信息
9.dev用户测试
下载代码到本地
git clone git@10.0.0.200:tset/git_data.git
cd git_data
touch dev.txt
git add dev.txt
git commit -m "new file dev.txt" dev.txt
git push -u origin master
10.创建分支保护,需要使用root用户来设置
进入项目的设置中去,然后仓库设置,分支保护设置master分支保护
master分支保护:
这个时候就只有gitlab服务器上的root用户才能合并代码,其他用户则没有权限合并代码,
也就是没有权限将自己写好的代码上传到远程仓库中去。
只能发送代码和合并的请求
此时dev用户创建了一个dev分支用来进行工作
git checkout -b dev
touch 123.txt
git add 123.txt
git commit -m "create new file 123.txt" 123.txt
git push -u origin dev
然后dev用户需要去gitlab界面上创建一个代码合并请求,告知管理员自己已经完成任务:
之后管理员会收到这个合并请求:
然后同意合并,这样dev开发的代码才算成功的保存到了远程仓库
dev每次编写源代码时,都需要删除掉之前创建的分支,然后使用git pull确定本地仓库的数据和
远程仓库的数据是一致的,然后在此基础上再创建一个工作分支,用来进行代码的编写。
9.jenkins
官网:jenkins.io
jenkins是一个开源的软件项目,是基于java开发的持续集成工具,用于监控持续重复的工作。
1.安装准备
1)装备两台服务器 关闭selinux和防火墙
2)内存2G 硬盘50G+
jenkins 10.0.0.8
nexus 10.0.0.9
2.安装jdk运行环境和jenkins服务
上传jdk和jenkins rpm安装包,使用rpm -ivh进行安装
rpm -ivh jdk-8u281-linux-x64.rpm
rpm -ivh jenkins-2.99-1.1.noarch.rpm
3.配置jenkins
  启动用户修改为root
4.插件的安装和修改登录密码
插件放入插件目录中 /var/lib/jenkins/plugins
jenkins的主要目录:
/usr/lib/jenkins/ jenkins安装目录,war包会放在这里
/etc/sysconfig/jenkins jenkins配置文件,”端口“,”JENKINS_HOME”等都可以在这里面配置
/var/libjenkins/ 默认的jenkins_HOME
/var/log/jenkins/jenkins.log:jenkins日志文件
或者在jenkins首页中:系统管理——插件管理——高级——选择文件——导入.phi的插件文件,
也可以实现插件的安装,安装之后要重启服务:
systemctl restart jenkins 然后再重新登录
不过这种安装方式最头疼的就是:解决插件的依赖
不仅如此,插件之间的版本也要选择正确,运气好的话,这个插件没有依赖包,运气差的话
这个插件有一大批依赖包等着你去安装。如果你能找到完整的插件包,那可真是太好了。
直接将这些文件解压到/var/lib/jenkins/plugins/目录中,然后重启就好了。
5.再浏览器输入10.0.0.8:8080访问jenkins服务,
然后解锁jenkins服务
[root@web02 ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
bf4b208e4177489793b49cb641d04556
进去之后修改管理员密码:123456
账号:admin 密码:123456
用户的密码信息放在配置文件中:
/var/lib/jenkins/users/admin/config.xml
6.新建一个项目
1)新建Item——输入项目名:freestyle-job——选择构建一个*风格的软件项目——确定
然后对项目进行更详细的配置,例如:描述——增加构建步骤——选择execute shell:在里面输入pwd
然后保存,
注意保存之后会在服务器上自动生成一个目录:
/var/lib/jenkins/workspace/freestyle-job
这就是jenkins的工作目录,可以通过刚刚设置的pwd命令查看
2)点击立即构建,在下面就可以看到项目构建的历史,点击最左边的小圆圈将刚刚输入的
pwd命令进行执行输出,也就是查看项目的工作路径
当然这些配置随时都可以进行配置,从jenkins面板(首页)中进入到项目中,最左边就有一个配置的选项
 
7.手动代码上线
1)准备一台web服务器,IP地址为:10.0.0.9
网上下载源代码:码云:https://gitee.com/kangjie1209/monitor.git
将代码的下载到gitlab服务器上,然后上传到gitlab远程仓库中,
也可以直接再gitlab网页种导入项目。
2)在gitlab服务器上创建一个目录
[root@zb01 ~]# mkdir monitor.git
cd monitor.git/
git init
git remote add origin git@10.0.0.200:tset/monitor.git
git add .
git commit -m "Initial commit"
git push -u origin master
3)在上一步创建的工作目录中下载源代码,并上传到远程仓库中
git clone https://gitee.com/kangjie1209/monitor.git
mv monitor/* ./ 将生成的monitor目录中的文件剪切到当前目录中
rm -rf monitor/
rm test.txt
码云上下载的代码,也会是一个仓库,一定要使用git clone来下载
将代码上传到远程仓库中
git status
git add .
git commit -m "download code" .
git push -u origin master
4)将gitlab上的代码拉取到jenkins本地中去
jenkins本地也就是10.0.0.8,
在jenkins首页中依次进行下面的操作:
选择freestyle-job项目——配置——源码管理
Repository URL:git@10.0.0.200:tset/monitor.git
也就是gitlab仓库中的项目中的地址
————点击保存——之后在项目界面中点击立即构建,
如果不出意外,代码就已经跑到你的jenkins服务器上的工作目录中去了:
/var/lib/jenkins/workspace/freestyle-job
5)在jenkins服务器上,编写脚本,将代码上传到web服务器10.0.0.9中去
需要做免密钥传输,所以需要将jenkins上的公钥信息发送给10.0.0.9服务器上
ssh-copy-id -i .ssh/id_dsa.pub root@10.0.0.9
如果没有密钥就需要生成密钥对
然后在jenkins服务器上编写脚本,推送源码到web服务器的网页目录中去:
cd /server/scripts
vim deploy.sh
[root@web02 /server/scripts]# cat deploy.sh
#!/bin/bash
 
code_dir=/var/lib/jenkins/workspace/freestyle-job/
web_dir=/html/bbs
ip=10.0.0.9
time=`date +%F`
cd $code_dir && tar -zcf /tmp/web-$time.tar.gz ./*
scp /tmp/web-$time.tar.gz $ip:$web_dir
ssh root@$ip "cd $web_dir && tar -xf web-$time.tar.gz -C /html/bbs && rm -f web-$time.tar.gz"

 

/html/bbs为10.0.0.9的站点目录,这个目录是可以设置的,默认情况下是/usr/share/nginx/html
6)再次配置freestyle-job项目,增加构建步骤execute shell
将上一步中的shell脚本放入其中的command中执行,这样当gitlab仓库中的代码
发生改变,只要在jenkins界面点击立即构建就可以执行脚本,同时将代码发送到
web服务器的站点中,从而实现代码上线的功能。
如下图所示:
  
   7)在浏览器中输入10.0.0.9,就可以访问刚刚上线的网页信息,如下所示:
 
我丢,太赞了,这网页做得也太好了吧,感谢码云!!!更感谢网页作者的开源精神。

分类:

技术点:

相关文章: