Git技术实战
目标:GitLab容器化搭建,Pycharm推送代码到Gitlab实现Jenkins+Pytest+Allure自动化测试,发送邮件
内容:
-
1、Git技术的概述
-
2、Git与SVN对比
-
3、Git工作流程
-
- docker技术实现
-
4、Git环境搭建
-
- GitHab
- GitLab
- 码云Gitee
- docker技术搭建
- 常用的Git代码托管服务
- 本机Git操作环境
-
5、Git常用命令
-
- 1、 环境配置
- 2、 获取Git仓库
- 3、 工作目录、暂存区以及版本库概念
- 4、 Git工作目录下文件的两种状态
- 5、 本地仓库操作
- 6、 远程仓库的使用
- 7、 分支
- 8、 标签
-
6、Pycharm配置Git环境
-
7、Jenkins关联Git操作
-
8、自动化测试CI实战
1、Git技术的概述
2、Git与SVN对比
一个开源的框架–需要操做什么流程,下载对应的插件
3、Git工作流程
-
1、克隆远程仓库到本地
-
- clone
-
2、在本地仓库中checkout代码–进行编写
-
3、在提交前到本地仓库前–需要到暂存区 index stage
-
4、提交到本地仓库、
-
- commit
-
5、推送到远程仓库里
-
- push
git pull:从远程仓库获取最新代码到本地仓库,直接就合并到本地仓库!
git fetch:从远程仓库获取最新代码到本地仓库,但不会自动合并merge,需要手动合并!
为了更好的学习Git,我们需要了解Git相关的一些概念,这些概念在后面的学习中会经常提到
#版本库:前面看到的.git隐藏文件夹就是版本库,版本库中存储了很多配置信息、日志信息和文件版本信息等
#工作目录(工作区):包含.git文件夹的目录就是工作目录,主要用于存放开发的代码
#暂存区:.git文件夹中有很多文件,其中有一个index文件就是暂存区,也可以叫做stage。暂存区是一个临时保存
修改文件的地方
4、Git环境搭建
-
1、常用的Git代码托管服务—远程仓库
-
GitHub
-
- 它的服务器在国外
- 下载特别慢–可能早上早点从github下载比晚上下要好
- 一般开源的项目多
-
GitLab
-
- GitLab 解决了这个问题,你可以在上面创建私人的免费仓库
- 如果公司自己的服务器搭建仓库,首选gitlab
-
码云Gitee
-
- 是国内的一个代码托管平台,由于服务器在国内,所以相比于GitHub,码云速度会更快
4.1 gitlab容器搭建
#由于是docker镜像运行, 所以我们需要把gitlab的配置, 数据, 日志存到容器外面, 即将其挂载到宿主机。先准备三个目录:
cd /srv #切到srv目录
mkdir gitlab#创建gitlab文件夹
cd gitlab
mkdir config logs data
docker run -di -p 443:443 -p 9001:80 -p 8022:22 --hostname 虚拟机的Ip --name mygitlab --restart always -v /srv/gitlab/config:/etc/gitlab -v /srv/gitlab/logs:/var/log/gitlab -v /srv/gitlab/data:/var/opt/gitlab -v /etc/localtime:/etc/localtime:ro --privileged=true gitlab/gitlab-ce:13.9.2-ce.0
1、进入gitlab
输入你电脑ip:9001就可进入gitlab
默认用户是root,刚进入时要修改密码不少于八个字符,修改密码为xintian123456,再次输入xintian123456。
进入登录界面,输入用户名root密码xintian123456点击登录即可。
2、报错信息502解决方案
查看容器id,输入docker ps
docker exec 77(容器id) gitlab-ctl reconfigure#容器里启动服务
systemctl stop firewalld#关闭防火墙
4.2 git本机客户端
1.官网下载git客户端https://git-scm.com/downloads,点击download。
2.安装git客户端
3、选择好安装路径,然后点击“Next
4、选择安装组件
5、菜单文件夹–可以默认!我的选择“Don’t create a Start Menu folder”
6、选择编辑器,默认使用vim作为编辑器
7、修改系统的环境变量—建议选择默认、修改系统的环境变量—建议选择默认
8、配置行尾结束符(个人选择第三个了;可以根据自己情况而定)我选择默认。
9、配置终端仿真
10、选择默认的“git pull”行为
11、额外的配置选项
12、实验配置选项
13、安装完成。
#1- 新建一个文件夹--作为本地仓库 sqlocal
#2- 在这个文件夹里--右键--点击 git bash here--git终端
#3- 查看Git客户端版本
git --version
#4- 环境配置---选配
git config --global user.name "xt"
git config --global user.name.email "xt@qq.com"
#5- 在本地创建一个本地仓库
#在前面新建的文件夹sqlocal下--在这个文件夹里--右键--点击 git bash here--git终端
git init
#6- 克隆远程仓库
git clone 远程仓库的url 默认是80 如果修改过端口,请一定加上自定义的端口
当输入远程仓库的账号与密码时候,如果输入错误,你下次连就连不上
#7- 使用pycharm关联gitlab--推送我们外卖项目代码工程
使用TortoiseGit管理文件版本
TortoiseGit是一款开源的Git图形界面工具,使用TortoiseGit可以简化Git相关的操作(本质上还是执行的Git 相关命令)。 TortoiseGit下载地址: https://tortoisegit.org/download/
下载完成可以得到如下安装程序
通过Git命令完成了Git的常用操作,通过TortoiseGit来完成如下操作:
◆ 创建仓库
◆ 克隆仓库
◆ 将文件添加到暂存区
◆ 提交文件
◆ 推送本地仓库至远程仓库
◆ 拉取代码
◆ 创建分支
◆ 切换分支
◆ 合并分支
直接双击安装即可,安装完成后在桌面(也可以是其他目录)点击右键,看到如下菜单则说明安装成功
4.3 gitlab新建工程
5、Git常用命令
使用jenkins实现自动化测试
#目前方案没有gitlab,后续采用该方案
#1- 先把项目的自动化脚本文件夹放到--宿主机与容器挂载的目录下
#使用xftp工具,放到--宿主机与容器挂载的目录下,容器下查看下
cd /var/jenkins_nome
ls
#2- jenkins创建工程
#1- 新建任务
#2- 构建一个自由风格的软件项目
#3- 进入工程--点击配置
#4- 选择构建--操作shell
#5- 增加邮件--构建后操作
6、Pycharm配置Git环境
Pycharm配置Git环境,有2个方案:
- 1、可以关闭现有工程—file—close project(文档使用方法)
- 2、菜单栏–CSV也可以操作
注意:docker部署要加上端口如http://192.168.67.141:9001/root/songqinadmin.git
点击clone
新建需要提交到远程仓库的文件,点击ok
工程右键,找到git点击提交工程
点击push
查看gitlab仓库发现提交成功
7、Jenkins关联Git操作
目标:需要把gitlab与jenkins关联起来
- 1、需要保证这2个服务都是ok
- 2、jenkins版本选择git
- 3、gitlab只要有设置好的事件触发,会webHook通过一个url post方法通知jenkins
- 4、jenkins收到触发信息,他需要执行构建操作—最新的代码会自动从gitlab会获取,执行构建
搜索gitlab,allure,选择直接安装。
重启docker镜像
docker ps -a
docker restart fef91a3db6d2(容器id)
重新进入jenkins,配置JDK丶git丶allure路径,直接按给的填写即可
JAVA_HOME路径/usr/local/openjdk-8
git路径/usr/bin/git
allure路径/opt/allure-2.13.5
新建工程并配置选项。
选择git添加用户信息
为了安全起见生产token值
打开gitlab仓库配置hooks
然后测试一下是否调通
8、自动化测试CI实战
10、Jenkins 实现构建
#!/bin/bash
rm -rf allure-results
cd DeliverySystem/test_case
pytest -sq --alluredir=${WORKSPACE}/allure-results
cp DeliverySystem/environment.properties ${WORKSPACE}/allure-results/environment.properties
exit 0
9、安装完jenkins后发现时区不对
解决:打开jenkins的【系统管理】—> 【脚本命令行】,在命令框中输入一下命令【时间时区设为 亚洲上海】:
System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Shanghai')
点击【运行】,可以看到时间已正常,如图。
后续:有时候打开又发现时间变了,又是相隔8个小时的utc,每次都要在命令行输入也是很麻烦了,打算这次一次性解决。
10、gitlab的ip地址修改
配置GitLab主机名
1、修改/srv/gitlab/config/gitlab.rb
vi /srv/gitlab/config/gitlab.rb#也可以直接使用ftp的记事本直接修改
把external_url改成部署机器的域名或者IP地址
2、修改 /srv/gitlab/data/gitlab-rails/etc/gitlab.yml
找到关键字 * ## Web server settings *
将host的值改成映射的外部主机ip地址和端口,这里会显示在gitlab克隆地址
3、重启容器
docker restart 容器id
11、宿主机时间同步问题
宿主机linux查看时间
[root@localhost etc]# date
2020年 12月 06日 星期日 04:38:43 CST
时区是对的,只是时间不对
安装ntp
yum install ntp #安装ntp服务
同步阿里时间
ntpdate ntp1.aliyun.com
注意事项:
- 可能网络会断开,请重新reboot下linux
- 虚拟机的ip可能会改变
2、容器内部时间同步
docker cp /etc/localtime ec327fc07985:/etc/localtime
#抛异常
Error response from daemon: Error processing tar file(exit status 1): invalid symlink "/usr/share/zoneinfo/UCT" -> "../usr/share/zoneinfo/Asia/Shanghai”
#解决办法
docker cp /usr/share/zoneinfo/Asia/Shanghai 容器id:/etc/localtime
#重启容器
docker restart 容器id
1、gitlab push事件—触发jenkins发生构建—第7次构建
2、jenkins会去gitlab拉取最新的代码