目录
一、git工具的使用
1、git简介
2、本地git仓库部署
3、远程git仓库搭建
二、搭建远程私有仓库gitlab
三、jenkins持续集成
1、jenkins简介
2、jenkins安装
3、jenkins插件源安装
4、jenkins使用
(1) jenkins创建项目
(2) 配置周期性检查gitlab变更
(3) 配置实时监控gitlab变更
(4) jenkins构建 自动构建docker镜像上传至本地仓库
(5) 添加docker交付任务
一、git工具的使用
1、git简介
Git是一个开源的分布式版本控制系统,几乎所有开源软件用的都是分布式版本系统,其可以有效、高速的处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
git特点:
a、速度
b、简单的设计
c、对非线性开发模式的强力支持(允许成千上万个并行开发的分支)
d、完全分布式
e、有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)
自诞生于 2005 年以来,Git 日臻成熟完善,在高度易用的同时,仍然保留着初期设定的目标。 它的速度飞快,极其适合管理大项目,有着令人难以置信的非线性分支管理系统。
Git必看秘籍:https://git-scm.com/book/zh/v2
git 的三种状态
a、已提交(committed): 已提交表示数据已经安全地保存在本地数据库中。
b、已修改(modified) : 已修改表示修改了文件,但还没保存到数据库中。
c、已暂存(staged):已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
这会让我们的 Git 项目拥有三个阶段:工作区、暂存区以及 Git 目录。
2、本地git仓库部署
获取 Git 仓库通常有两种方式:
a、将尚未进行版本控制的本地目录转换为 Git 仓库。
b、从其它服务器克隆 一个已存在的 Git 仓库。比如: git clone
本地目录转化为git仓库
安装Git:# yum install -y git
新建demo目录,查看目录无内容 (包括隐藏文件)
初始化demo目录为代码库
再次查看目录 发现新建了.git隐藏目录 .git目录是git跟踪管理版本库的
在demo目录中新建代码文件readme.md
git status并查看状态 加上-s表示简洁输出 代码前的??表示该文件不在版本库中
使用git add 命令将代码文件添加到stage暂存区 查看文件状态 A表示已经添加到暂存区 HEAD指针指向当前正在操作的分支
检查当前文件状态 $ git status
检查当前文件状态简化输出 $ git status -s
跟踪新文件 $ git add README
默认在提交时会提交整个暂存区 提交时-m表示添加注释
提交更新 $ git commit
跳过使用暂存区域 $ git commit -a -m 'added new benchmarks'
默认在提交的时候会告诉我们已什么身份进行提交 自己创建一个邮箱和用户名 方便审计
查看状态 重新进行提交 再次查看可以看到代码文件前无状态内容 无内容表示文件无变更
向代码文件中写入内容 再次查看文件状态可以看到在靠代码文件前出现了M 这表示目前代码文件的修改在工作区
使用git add命令将此代码文件添加到暂存区 再次查看状态可以看到M首列 表示修改提交到了暂存区
然后进行提交 再次查看文件状态无内容 表示没有改动
在demo目录下创建.a .o 隐藏文件 创建env目录 在env目录下继续创建文件file1
查看状态 代码前的??表示这些文件不在版本库中
编辑.gitignore忽略文件 .* 表示忽略所有隐藏文件 再次查看状态无内容
忽略文件 $ cat .gitignore
.* //忽略所有隐藏文件
/test //只忽略当前目录下的test文件
build/ //忽略任何目录下名为 build 的文件夹
通过rm -rf删除代码文件 查看状态可以看到在靠代码文件前出现了D 表示删除的是工作区的内容
可以撤销防止勿删 使用checkout来撤销此次删除 然后查看文件内容 可以看到文件恢复
如果通过git rm 命令删除 查看状态显示为首列出现了D 表示删除了暂存区的内容
使用git commit 来提交删除操作 这时可以看到readme.md文件被删除
如果想要恢复可以使用回滚的方式来进行操作使用 通过git log查看提交历史
使用git reflog 命令查看历史版本信息 然后选择需要回滚到的版本
使用git reset --hard版本id进行回滚
git相关命令
git add README | 跟踪新文件 |
git diff | 查看已暂存和未暂存的修改 |
git commit | 提交更新 |
git commit -a -m 'added new benchmarks' | 跳过使用暂存区域 |
git rm PROJECTS.md $ git rm --cached README | 移除文件 |
git mv README.md README | 重命名文件 其实,运行 git mv 就相当于运行了下面三条命令: $ mv README.md README $ git rm README.md $ git add README |
git log git log -p -2 git log --stat git log --pretty=oneline | 查看提交历史 |
git reset HEAD README.md | 取消暂存的文件 |
git checkout -- README.md | 撤消对文件的修改 |
git reflog git reset --hard efa267a | 版本回退 |
3 、远程git仓库搭建
可以使用github来新建远程仓库 但github访问速度较慢 这里我们使用阿里的gitee进行远程仓库的搭建
新建仓库demo
选择SSH连接访问方式 根据页面的提示信息推送本地仓库内容到gitee 第一次推送需要指定用户
一定要在仓库目录中添加远程仓库的地址 推送本地仓库内容至远程共有仓库时要指定分支master 推送失败 显示key不对 需要设置ssh免密认证
这里需要做ssh免密 使用ssh-keygen可用来生成ssh公钥认证所需的公钥和私钥文件
复制生成的公钥
在gitee中选择SSH公钥模块 将公钥粘贴进去 点击确定输入密码
重新推送
推送仓库完毕后点击头像-仓库 查看本地仓库推送到远程git仓库 同步成功
在demo目录下创建test.txt 文件和file1 file2文件 查看状态 将它们添加到stage暂存区 提交暂存区到本地版本库
上传本地demo仓库到远程demo仓库
刷新查看同步成功
如果在本地不小心将demo代码文件删除 通过gitee远程仓库克隆 可以看到demo恢复
二、搭建远程私有仓库gitlab
常用命令:
gitlab-ctl tail | # 查看日志 |
gitlab-ctl start | # 启动所有 gitlab 组件 |
gitlab-ctl stop | # 停止所有 gitlab 组件 |
gitlab-ctl restart | # 重启所有 gitlab 组件 |
gitlab-ctl status | # 查看服务状态 |
gitlab-ctl reconfigure | # 重载服务 |
gitlab安装
官网:https://about.gitlab.com/install/
软件下载(官方下载慢,推荐使用国内镜像站点) https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/
实验准备 真实主机创建两个虚拟机 server12(4G) server13 (2G)
wget https://omnibus.gitlab.cn/el/7/gitlab-jh-14.8.2-jh.0.el7.x86_64.rpm 下载软件包
yum install -y curl policycoreutils-python openssh-server perl 安装相关依赖
yum install -y gitlab-jh-14.8.2-jh.0.el7.x86_64.rpm 安装gitlab包
cd /etc/gitlab/ 安装完毕后切换到/etc/gitlab/目录下
vim gitlab.rb 编辑gitlab.rb配置文件 将external_url参数修改为自己的ip
gitlab-ctl reconfigurere 使用gitlab-ctl reconfigure命令重载服务 在/etc/gitlab/initial_root_password 文件可以看到初次登录gitlab密码
gitlab-ctl status 查看服务状态
free -m 查看占用内存较多
浏览器访问server12ip地址172.25.15.12进入登陆页面
复制此密码进行登陆
进入页面是英文显示 点击右侧Edit profile 修改语言为中文
刷新后看到中文页面 点击密码修改登录密码
退出后重新登陆成功
server12生成ssh密钥 复制生成的公钥
将server12的公钥信息复制到gitlab仓库 完成ssh密钥的添加
新建一个名为project1的项目 设置为私有 使用自述文件初始化仓库
server12安装git yum install -y git
通过ssh克隆该项目仓库
server12执行上图克隆命令 克隆prodject1仓库至本地 查看prodject1内容
git remote -v | --verbose 列出详细信息,在每一个名字后面列出其远程url 显示对应的克隆地址
测试 创建index.html文件 添加到暂存区 提交到版本库然后上传 在远程git私有仓库可以查看到在本地刚刚创建的index.html文件 同步成功
三、jenkins持续集成
1、jenkins简介
Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。
Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。
CI(Continuous integration持续集成)持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。
CD(Continuous Delivery持续交付) 是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中
2、jenkins安装
为server13分配至少2G内存
软件下载:https://jenkins.io/zh/download/
国内镜像站:https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/
国内镜像站下载最新版本 jenkins安装包
真机将jenkins安装包发送到server13上
Jankins是基于java8编写的软件,所以在安装之前需要在主机上安装Java8的运行环境。
先安装linux自带的openjdk
再安装jenkins
安装成功后启动
开启成功后 可以看到8080端口开启
测试访问172.25.15.13:8080 页面提示密码在/var/lib/jenkins/secrets/initialAdminPassword文件内
登录成功后选择安装jenkins社区推荐的插件来进行安装
跳过用户创建阶段 直接选择管理员admin账号登陆
jenkins访问url 保存继续 jenkins安装完毕
进去之后选择configure 设置登陆密码
密码修改成功后 重新你登陆
3、jenkins插件安装
server12创建存放更新源CA证书目录 然后下载证书
设置证书文件的拥有者和组为jenkins
更新插件源 测试哪个插件元速度快 两次测试发现ustc插件元速度快并稳定 这里选择ustc
在更新中心中查找ustc插件源 https://cdn.jsdelivr.net/gh/lework/jenkins-update-centerhttps://cdn.jsdelivr.net/gh/lework/jenkins-update-center
复制ustc插件源地址
网页中在dashboard界面中选择manage jenkins 点击Manage Plugins插件管理
选择advanes 这里要设置插件源地址
将插件源地址设置为ustc插件源地址
4、jenkins使用
(1)jenkins创建项目
输入任务名称test 点击构建一个自由风格的软件项目
编辑源码管理 选择git 将项目代码从gitlab拉过来
在gitlab上复制ssh克隆
在git仓库"请输入git仓库"粘贴 在gitlab上复制的SSH克隆 输入后会进行报错 无法连接仓库
解决办法在server13上安装git
server13安装git
安装完毕后 又会出现一个报错 校验主机key失败 输入私有仓库地址 添加证书
类型选择ssh
server13jenkins主机生成ssh密钥 以便git和jenkins进行SSH免密连接 复制生成的公钥
进入gitlab project1项目里边 点击编辑个人资料
选择左边的SSH密钥 将上述 复制生成的公钥粘贴至此处 点击添加密钥
查看设置成功
复制私钥
配置test项目 进入源码管理界面 Source Code Management 输入私有仓库地址 添加证书
在description中填写 gitlab ssh key 用户名填root 将上边复制的私钥粘贴在此处
输入完毕后点击添加
证书添加完成后 指定分支填写*/main 与gitlab中分支一致
gitlab中查找分支名称 进入gitlab中 点击菜单 选择项目 点击您的项目 点击project1项目进去 即可查看到分支名称为main 将此分支名称填写到Source Code Management
(2)配置周期性检查gitlab变更
定义轮询间隔,有更新时触发jinkens
在Build Triggers配置中选择Poll SCM轮询SCM触发器类型 * * * * * 表示每分钟查看一次gitlab代码变化
构建选择执行shell命令
ls -l *列出从gitlab仓库中拿到的内容 完毕后点击保存即可
点击右侧播放键 手动构建 等待刷新 可看到构建成功 进入test项目中 查看#1(构建号)的构建历史
在控制台输出中可以看到操作成功的信息
(3) 配置实时监控gitlab变更
首先安装gitlab构建触发插件 直接安装不用重启
安装成功 返回页面 点击配置管理
进入jenkins的构建触发器模块 取消轮询 选择当我们修改了gitlab gitlab webhook通过URL来进行触发 主动实时的来通知jenkins 复制url
在下方点击高级生成秘密令牌 复制此令牌 然后点击保存
在gitlab的设置中找到webhooks,将url和秘密令牌粘贴于此
然后点击下方启用SSL验证
这时我们会发现报错 没有添加成功 请求在本地的网络不允许
这时我们需要修改网络配置 点击菜单 选择管理员
进去之后点击设置 选择网络
找到Outbound requests出站请求 展开 在允许从web hooks和服务向本地网络发出请求前面打✓ 然后保存修改
然后返回到weebhooks 重新添加网络和令牌 在添加 成功
进行测试 点击push events
这时我们发现在test项目中 有构建2
在server12中编辑Dockerfile文件
将Dockerfile文件添加到暂存区 提交并上传
在gitlab项目中查看提交上的Dockerfile文件 同步成功
这时我们可以发现 在jenkins多了#3构建
点击控制台输出进去查看 sucess
(4) jenkins构建 自动构建docker镜像上传至本地仓库
jenkins界面安装docker插件
选择通过dockerfile构建镜像并且上传到仓库 点击安装不用重启
server1启动仓库
因为jenkins实时同步 server13安装docker server1发送docker-ce.repo镜像源到server13
server13安装docker失败 需要解决其依赖性
server1发送centos源到server13
server13安装docker成功
server1将docker配置文件发送到server13
server13修改内核参数并重新加载 启动docker
docker info 查看 启动成功
server13添加仓库解析
server1将仓库证书发送到server13的/etc/docker/目录下
server1将阿里云加速器发送到server13的/etc/docker/目录下
server13重启docker使之生效
修改docker.sock文件权限 使jenkinds通过套接字使用docker 不然jenkins无法直接执行docker命令
删除执行shell
构建步骤选择Docker Build and Pubish
设置仓库名称为library/webserver 标签动态获取 使用docker套接字 设置仓库地址
镜象推送到仓库需要认证 需要添加jenkins凭据提供者
用户名密码为登陆harbor仓库的用户名和密码 describe为 "harbor admin auth" 然后点击add在Registry credentials注册表凭据中选择 admin (admin/******(harbor admin auth))
取消强制拉取镜像 最后点击保存
测试 点击右边的播放键 手动触发立即构建
查看控制台输出
拉取镜像成功 开始构建 打标签 上传镜像到本地仓库
docker images查看镜像
数据文件在/var/lib/jenkins/workspace/test/目录下
在harbor仓库页面可以看到上传的镜像
(5) 添加docker交付任务
新建一个任务名为docker_project_test 选择自由风格
构建触发器选择其他工程构建后触发 指定关注test项目 选择只有构建稳定时触发
选择构建为执行shell
编写触发时执行的shell命令 操作为运行容器
查看正在构建
查看控制台输出
查看控制台输出 可以看到配置成功
server13测试访问可以看到容器运行成功
浏览器访问172.25.15.13
自动触发
编辑index.html文件 提交上传
gitlabe可以查看到修改的index.html文件
查看控制台输出
成功上传镜像
查看镜像
harbor仓库查看
浏览器访问失败 没有更新
docker_project_test 项目报错 点击docker_project_test 项目
查看控制台输出 错误原因是触发构建后直接进行docker run 但是本机已经有这个容器 再次创建名称相同的容器 两者冲突
解决方法 修改触发器执行命令 二次触发的话先过滤容器 如果存在webserver容器 先删除此容器 在删除此镜像 然后休眠1秒钟 重新拉取镜像运行容器 注:在shell脚本第2行和第3行中间再增加一行 命令为sleep 1 文中截图不全
查看控制台输出 成功
浏览器访问 更新成功
再次编辑index.html文件 提交上传
gitlabe可以查看到修改的index.html文件
再次触发查看test项目控制台输出
查看harbor仓库 镜像上传成功
浏览器访问 更新成功