VCS
Git概览
VCS:
集中式VCS: 有集中的版本管理服务器,具备文件版本管理和分支管理能力,集成效率有明显地提高,客户端必须和服务器相连。
分布式VCS:服务端和客户端都有完整的版本库,脱离服务端,客户端照样可以管理版本。查看历史和版本比较等操作,都不需要访问服务器,比集中式更能提高版本管理效率。
Git :
一个免费开源的分布式版本控制系统,linux系统发明者Linus Torvalds 为帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。开源,容易备份,支持离线操作。
Git的工作流程:
先克隆远程资源到本地目录,本地仓库添加或修改文件,使用git add 添加修改的文件暂存到缓冲区
在添加之后,可以使用git commit添加到当前的工作区,git push将本地的修改推送到远程的git服务器。
Git的环境搭建:
https://git-scm.com/ 官网下载安装
Git基本操作:
建立仓库:git init 添加文件到仓库: git add 123.txt 把文件提交到仓库 git commit -m "add a file"
仓库状态:git status 查看修改的差异:git diff 查看提交日志:git log 回退到上一版本:git reset --hard HEAD^ 删除文件:git rm test.txt 克隆到本地:git clone git@github.com:xxxx/test.git
本地的代码提交到服务器:git push origin master
新建项目
master : 默认开发分支; origin : 默认远程版本库
#初始化操作
$ git config -global user.name <name> #设置提交者名字
$ git config -global user.email <email> #设置提交者邮箱
$ git config -global core.editor <editor> #设置默认文本编辑器
$ git config -global merge.tool <tool> #设置解决合并冲突时差异分析工具
$ git config -list #检查已有的配置信息
#创建新版本库
$ git clone <url> #克隆远程版本库
$ git init #初始化本地版本库
#修改和提交
$ git add . #添加所有改动过的文件
$ git add <file> #添加指定的文件
$ git mv <old> <new> #文件重命名
$ git rm <file> #删除文件
$ git rm -cached <file> #停止跟踪文件但不删除
$ git commit -m <file> #提交指定文件
$ git commit -m “commit message” #提交所有更新过的文件
$ git commit -amend #修改最后一次提交
$ git commit -C HEAD -a -amend #增补提交(不会产生新的提交历史纪录)
#查看提交历史
$ git log #查看提交历史
$ git log -p <file> #查看指定文件的提交历史
$ git blame <file> #以列表方式查看指定文件的提交历史
$ gitk #查看当前分支历史纪录
$ gitk <branch> #查看某分支历史纪录
$ gitk --all #查看所有分支历史纪录
$ git branch -v #每个分支最后的提交
$ git status #查看当前状态
$ git diff #查看变更内容
#撤消操作
$ git reset -hard HEAD #撤消工作目录中所有未提交文件的修改内容
$ git checkout HEAD <file1> <file2> #撤消指定的未提交文件的修改内容
$ git checkout HEAD. #撤消所有文件
$ git revert <commit> #撤消指定的提交
#分支与标签
$ git branch #显示所有本地分支
$ git checkout <branch/tagname> #切换到指定分支或标签
$ git branch <new-branch> #创建新分支
$ git branch -d <branch> #删除本地分支
$ git tag #列出所有本地标签
$ git tag <tagname> #基于最新提交创建标签
$ git tag -d <tagname> #删除标签
#合并与衍合
$ git merge <branch> #合并指定分支到当前分支
$ git rebase <branch> #衍合指定分支到当前分支
#远程操作
$ git remote -v #查看远程版本库信息
$ git remote show <remote> #查看指定远程版本库信息
$ git remote add <remote> <url> #添加远程版本库
$ git fetch <remote> #从远程库获取代码
$ git pull <remote> <branch> #下载代码及快速合并
$ git push <remote> <branch> #上传代码及快速合并
$ git push <remote> : <branch>/<tagname> #删除远程分支或标签
$ git push -tags #上传所有标签
Gitlab
什么是Gitlab?
GitLab由乌克兰程序员DmitriyZaporozhets和ValerySizov开发,使用Ruby语言写成。使用 MIT 许可证的基于网络的 Git 仓库管理工具开源项目,且具有 wiki 和 issue 跟踪功能,使用 Git 作为代码管理工具,并在此基础上搭建起来的 web 服务。
GitLab与GitHub的区别:
(1)GitLab分布式在线代码仓库托管软件,分为社区版和企业收费版,都需要企业服务器安装;
(2)GitHub分布式在线代码托管仓库,个人版可直接在线免费试用,企业版本收费且需要服务器安装。
GitLab主要服务构成:
(1)Nginx 静态web服务器
(2)GitLab-workhorse 轻量级的反响代理服务器
(3)GitLab-shell 用于处理 Git 命令和修改 authorized keys 列表
(4)Logrorate 日志文件管理工具
(5)Postgresql 数据库
(6)Redis 缓存服务器
GitLab的优势及应用场景:
(1)开源免费,适合中小型公司将代码放置在公司内网服务器上
(2)差异化的版本管理,离线同步以及强大的分支管理
(3)便捷的GUI操作界面以及强大的账户管理功能
(4)集成度很高,能够集成绝大多数的开发工具(如,jira等)
(5)支持内置HA,保证在高并发下仍旧实现高可用性
部署
GitLab工作流程
1. 创建并克隆项目
2. 创建项目某 Feature 分支(对应的就是些小需求)
3. 编写代码并提交至该分支
4. 推送该项目分支至远程 GitLab 服务器
5. 进行代码检查并提交 Master 主分支合并申请
6. 项目领导审查代码并确认合并申请
GitLab安装配置
一般的企业级的 GitLab 是部署在内网环境的,为了避免在访问时报错的尴尬,得做一些前期的准备工作。
(1):关闭 firewalld 防火墙
# 临时关闭防火墙,也就是说下次进入系统后防火墙还是会自己开启的
sudo systemctl stop firewalld
# 永久关闭防火墙,开机不会自启
sudo systemctl disable firewalld
# 防火墙开机自启动
sudo systemctl enable firewalld
# 查看防火墙状态
sudo systemctl status firewalld
(2):关闭 SELINUX
# 我用的腾讯云ubuntu是没有安装这个子系统的,如果需要这个子系统的安装一下即可
sudo apt-get install selinux-utils
# 临时关闭SELINUX
setenforce 0
# 临时打开SELINUX
setenforce 1
# 查看SELINUX的状态
getenforce
# 开机关闭SELINUX,编辑/etc/selinux/config文件,将SELINUX的值设置为disabled。下次开机SELinux就不会启动了。
# setenforce 1也无法打开必修修改配置文件
# 重启系统
reboot
(3):安装ssh
#如果使用云服务器的话,一般都会有ssh。如果没有的话,就需要我们自己手动安装。
# 更新系统软件
sudo apt-get update
# 安装ssh服务
sudo apt-get install openssh-server
# 启动ssh服务
sudo /etc/init.d/ssh start
# 重启ssh服务
sudo /etc/init.d/ssh restart
# 关闭ssh服务
sudo /etc/init.d/ssh stop
# 查看进程,看ssh服务是否启动
ps -e | grep sshd
# 配置使得root用户可以远程登录
sudo vi /etc/ssh/sshd_config
# 在文件中添加 PermitRootLogin yes 保存
(4):安装Postfix邮件服务
# 安装postfix服务
sudo apt-get install postfix
# 启动postfix服务
sudo systemctl start postfix
# 重启postfix服务
sudo systemctl restart postfix
# 关闭postfix服务
sudo systemctl stop postfix
# 开机自启动postfix服务
sudo systemctl enable postfix
(5):安装 ca-certificates
#生成证书使用的
sudo apt-get install ca-certificates
(6)安装GitLab
# 添加GitLab包服务并安装包
curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
# 安装社区版gitlab-ce
sudo apt-get install gitlab-ce
# 配置GitLab,将将external_url地址改为服务器的地址
sudo vim /etc/gitlab/gitlab.rb
# 更新配置
# 更新配置报错(由于服务器的配置带不动o(╥﹏╥)o)https://idce.com/document/VnmQ
sudo gitlab-ctl reconfigure
# 启动、停止、查看状态、重启gitlab服务
sudo gitlab-ctl start/stop/status/restart
(7)GitLab配置证书
# 证书创建于配置加载
# Nginx SSL代理服务器配置
# 初始化GitLab相关服务并完成安装
Ansible部署工具
# 为Ubuntu获取Ansible的最佳方法是将项目的PPA(个人包存档)添加到系统中
sudo apt-add-repository ppa:ansible/ansible
# 刷新系统的包索引,以便它知道PPA中可用的包
sudo apt-get update
sudo apt-get install ansible
# 查看Ansible是否安装成功
ansible --version
Jenkins
概览
持续集成/CI:
是一种软件开发实践,主要作用是实现一个完整的自动构建过程,包括自动编译、分发、部署和测试。
强调开发人员提交新代码后,立即进行构建和单元测试,根据测试结果来判断新代码和原代码是否能正确的集成在一起,根据判断结果进行代码优化。
持续集成的意义:
作为开发或者测试想要更好的构建自己的自动化环境,完成自动打包、自动部署、自动化测试,最大的优点就是减少了重复的工作,减少了人力成本和可能出现的错误.
在目前的互联网公司应用极为广泛。对于高频的代码集成,每次集成都通过版本的每日构建(包括编译,发布,部署,自动化测试)来验证,从而尽快地暴露软件缺陷。
CI三大组件=持续交付:
版本控制系统:GitHub、GitLab
持续集成工具:Jenkins
自动化部署工具(替代我们在那费劲的写脚本):Ansible、Saltstack、Chef
什么是持续交付/CD
在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。完成单元测试后,可以把代码部署到连接数据库的 Staging环境,在环境中进行更多的测试,待代码没问题了可以手动部署到生产环境。
注:软件应用开发的经典模型对应的环境:Development开发环境、Integration集成环境、testing环境、QA验证、Staging预演环境、production环境.
什么是Jenkins
一个软件开源项目,是基于Java的开发的一款持续集成工具,起源Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行。
Jenkins特点
1. 主流的运维开发平台,兼容所有主流的开发环境
2. 插件可与海量业内主流开发工具实现集成
3. 配置单位与日志管理,使运维与开发人员能协同工作
4. 权限管理划分不同角色
5. 强大的负载均衡功能,保证项目的可靠性
Jenkins的配置
官方:文档
在Win10配置
方式:一
前提:配置Java环境.
在官网点击下载[Generic Java package (.war)文件.
启动Jenkins命令,打开cmd至Jenkins安装目录下,运行命令 java -jar jenkins.war
如果改变默认端口,则指定端口例如端口号1080:java -jar jenkins.war --httpPort=1080。
方式二:
将下载的war包文件部署到 server 容器如Tomact,然后启动容器.
war包复制到Tomcat的webapps目录下,配置JENKINS_HOME环境变量,变量值输入Jenkins的安装目录
在浏览器输入http://localhost:8080/jenkins
第一次需要解锁,输入密码.
配置时,安装插件:选择推荐的插件进行安装,下一步到创建用户,然后保存,在配置实例时,选暂时不要(以后配置).确定之后开始使用.
国内可能无法顺利安装,需修改配置.
在服务器配置:
#Jenkins的依赖操作系统还是以Ubuntu为例
# Jenkins是基于Java开发
# 安装配置Jenkins的依赖环境-Java环境,这里的话建议用Java8
# 太高的版本会出现不兼容的情况
sudo apt-get install openjdk-8-jdk
# 查看Java是否安装成功
java
# 安装配置Jenkins
# 将 jenkins 存储库密钥添加到系统
wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
# 将Debian包存储库地址附加到服务器的sources.list
sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
# 更新本地软件源
sudo apt-get update
# 安装Jenkins
sudo apt-get install jenkins
# Jenkins的相关操作
# 启动
sudo service jenkins start
# 停止运行
sudo service jenkins stop
# 重启服务
sudo service jenkins restart
# 查看运行状态
sudo service jenkins status
# 使用Jenkins
# jenkins启动后的访问地址:http://ip_address_or_domain_name:8080
# 访问上面的地址会发现需要输入初始密码,查看获取初始密码
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。