之前用的都是SVN,由于工作需要用到Git, 求人不如求己 , 技多不压身 , 多学一项技能 , 未来就少求别人一次 ,系统的学一遍,自己搭建一整套环境,自动化部署(自动发版),代码质量检测等等( 为啥不用docker搭建环境呢,个人平时比较忙,暂未学习docker,过段时间会学docker相关,也会写相应博文 )。为啥要打水印,Wechar上有人告诉我,之前很多博文,被某些网站白嫖,然后挂到自己网站( 未来博客上都会打水印 ),~@¥#%¥@%#@%¥再次声明, 创作不易,严禁转载!!!
从10月12、13(周末)天天搞到夜里2、3点,周一至周五,由于个人原因,刚换份工作,平时也忙,个人精力有限,只能晚上花2、3小时,学习-搭建-踩坑-度娘-搭建-成功,一直到今天,才完整的搭建出来,博客才发出来。安装过程中,并不是一帆风顺的,在此为了避免学习的小朋友踩相同的坑,最好版本和我一致,下面都会有提供我使用的安装包。 那些坑,我已经巧妙的绕开啦,按照我的步骤来,干就完事儿啦,欧力给~
Git 是一个 开源 的 分布式版本控制 系统,用于 敏捷高效 地处理任何或小或大的 项目 。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
官网地址: https://git-scm.com/downloads
不要慌,最下面我会提供我使用的所有安装包
linux:yum install -y git
mac:自带的有git
windows:需要自动手动下载,一直下一步即可
安装git完成
yum自动下载的git不是最新的,如果想安装最新的git版本,自行百度查,方法很多滴~由于时间关系,就不带领小伙伴实操啦,功能都大差不差的。
1、git 查看git的帮助文档
2、git --help 查看git的帮助文档
3、git add --help 查看某个命令的帮助文档
初次commit之前,需要配置用户邮箱及用户名
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
git commit:将暂存区的文件提交到本地仓库
echo "# git-test" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M master
git remote add origin https://github.com/543210188/git-test.git
git push -u origin master
git push -u origin master:往名字为origin的仓库的master分支上提交变更
1、git fetch 拉取远程仓库的变更到本地仓库
2、git merge origin/master 将远程的变更,合并到本地仓库的master分支
3、上面2个命令等价于 git pull
git rm --cache 1.txt
注意:如果只是:git rm --cache,仅删除暂存区里的文件
如果不加--cache,会删除工作区里的文件,并提交到暂存区
1、git checkout master 文件名
注:直接加文件名,从暂存区将文件恢复到工作区,如果工作区已经有该文件,则会覆盖
加了[分支名]+文件名,表示从分支名为所写的分支名中拉取文件,并覆盖工作区里的文件
git status 查看git的状态
官网: https://www.sourcetreeapp.com/
软件项目中 启动一套单独 的 开发路线 的方法,可以 避免版本兼容 开发问题, 避免 不同 版本 之 间 的 影响 ,封装一个开发阶段,解决bug的时候新建分支,用于对该bug的研究。
创建分支:git branch 分支名
查看分支:git branch
注:列出所有的分支,分支前面有*号,代表当前所在那个分支
删除:git branch -d 分支名
注:不能删除当前所在的分支
修改分支名:git branch -m 旧分支名 新分支名
切换分支:git checkout 分支名
注:如果在分支上面对文件进行修改之后,没有commit就切换到另外一个分支,是不允许的,必须commit之后,才能切换分支
强制切换分支:git checkout -f 分支名
注:强制切换分支,如果有未提交的变更,直接丢弃
查看提交历史:git log
查看最近2次的提交:git log -2
查看最近2次提交差异:git log -p -2
查看某个人提交的代码:git log --author 作者
显示简要的信息:git log --oneline
整个提交历史:git log --graph
比较工作区跟暂存区的差异:git diff
比较暂存区与分支差异:git diff --cached 或者 --staged
跟当前分支比较:git diff HEAD
比较当前分支与另外一个分支差异:git diff 分支名
查看两个分支的差异(针对已提交):git diff 分支名1 分支名2
查看单纯的一个文件差异:git diff 文件名
查看两次不同提交差异:git diff commitid_1 commitid_2
查看有变更的文件:git diff --stat
把暂存区中的文件移除出来_1:git reset HEAD 文件名
把暂存区中的文件移除出来_2:git reset HEAD^
修改暂存区中的摘要信息(需要重新提交git commit -m "test"):git reset --soft HEAD^
丢失修改过的代码(重置代码):git reset --hard HEAD^
分支合并(拿指定的分支名与当前分支进行合并):git merge 分支名
合并分支:git merge 分支名
查看冲突文件(重要):git diff --name-only --diff-filter=U
注:视情况,是只要master的代码还是v2.0(分支)代码,我这里处理是要2边的代码。
打上标签(给最近的打上标签):git tag 标签名
给指定的提交打上标签(git log获取commitid值,也就是获取提交的版本):git tag 标签名 commitid
显示标签(以字母序,非时间):git tag
显示该标签提交的那次相关信息:git show 标签名
删除标签(不会删除那次提交):git tag -d 标签名
将标签推送到远程服务器上(标签必须存在):git push origin 分支名 标签名
删除远程服务器上的标签:
1、删除本地的标签:git tag -d 标签名
2、删除远程的:git push origin :refs/tags/标签名
忽略不必要的文件
1、创建gitignore文件:touch .gitignore
2、在.gitignore添加忽略的目录:
target
.idea
.log:表示忽略项目中所有以.log结尾的文件
123?.log:表示忽略项目中所有以123加任意字符的文件
/error.log:表示忽略项目中根目录中的error.log 这个文件
src/main/test/:表示忽略/src/main/test/目录下的所有文件
*.class **/java/:匹配所有java目录下的所有文件
!/error.log:表示在之前的匹配规则下,被命中的文件,可以使用!对前面的规则进行否定
如果项目已经推送到远程服务器中,可通过这种方式删除
1、先删除本地暂存区文件(git rm -rf --cache target/):git rm -rf --cache 目录名
2、提交:git commit -m "删除本地暂存区"
3、推送:git push
GitLab 是一个用于仓库管理系统的开源项目,使用 Git 作为代码管理工具,并在此基础上搭建起来的web服务。安装方法是参考GitLab在GitHub上的Wiki页面。
/etc/gitlab/gitlab.rb #gitlab配置文件
/opt/gitlab #gitlab的程序安装目录
/var/opt/gitlab #gitlab目录数据目录
/var/opt/gitlab/git-data #存放仓库数据
gitlab-ctl reconfigure #重新加载配置
gitlab-ctl status #查看当前gitlab所有服务运行状态
gitlab-ctl stop #停止gitlab服务
gitlab-ctl stop nginx #单独停止某个服务
gitlab-ctl tail #查看所有服务的日志
Gitlab的服务构成:
nginx: 静态web服务器
gitlab-workhorse 轻量级反向代理服务器
logrotate 日志文件管理工具
postgresql 数据库
redis 缓存数据库
sidekiq 用于在后台执行队列任务(异步执行)
官网: https://about.gitlab.com/
国内镜像: https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/
yum install -y curl policycoreutils-python openssh-server #安装依赖
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el6/gitlab-ce-13.1.11-ce.0.el6.x86_64.rpm --no-check-certificate #centos6.5
rpm -ivh gitlab-ce-13.1.11-ce.0.el6.x86_64.rpm # 安装包gitlab
sudo service postfix start
sudo chkconfig postfix on
centos其他版本下载包方式,当然啦,也 可以先把包下载到本地,然后在丢到linux,执行安装效果是一样的 。
vim /etc/gitlab/gitlab.rb
打开后有一行 external_url 的设置改成要对外开放 web 的 url ,
例如我可以指定 git.chenyanbin.com
只想內部使用也可以改成 http://192.168.199.199:8888 这样的内部IP地址.
配置生效:gitlab-ctl reconfigure
重启:gitlab-ctl restart
设置防火墙端口(防火墙已全部关闭的话,可忽略):vim /etc/sysconfig/iptables
sudo gitlab-ctl reconfigure
sudo lokkit -s http -s ssh
停止gitlab:gitlab-ctl stop
重启gitlab:gitlab-ctl start
注:第一次登录时,需要设置初始密码,然后用root+密码登录即可
本地新建一个项目并用git,将文件夹推送到gitlab上。
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "543210188@qq.com"
gitlab_rails['smtp_password'] = "邮箱随机字符串"
gitlab_rails['smtp_domain'] = "qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
user['git_user_email'] = "543210188@qq.com"
gitlab_rails['gitlab_email_from'] = '543210188@qq.com'
重启配置文件:gitlab-ctl reconfigure
重启服务:gitlab-ctl restart
gitlab-rails console
Notify.test_email('543210188@qq.com','邮件测试','博客地址:https://www.cnblogs.com/chenyanbin/').deliver_now
缺点:随便添加账户,乱注册,不符合企业管理标准
开启校验并真实邮箱注册
生成随机密钥
ssh-keygen -t rsa
保护特定的分支不被随便合并,以免影响相应的分支
自己部署好gitlab,然后赋予账户权限,体验下就好
注:能push就能merge,相应的权限自我控制(master分支设置只能master可以合并)。
第二种方式合并请求
持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。
jdk安装:点我直达
maven安装:点我直达
官网: 点我直达
下面百度云盘也会提供哟~
tar -zxvf nexus-3.27.0-03-unix.tar.gz -C /usr/local
vim /usr/local/nexus-3.27.0-03/etc/nexus-default.properties
注:因为我本地没有使用8081端口,所以默认端口可以使用。但是防火墙端口记得开放哟~
vim /etc/sysconfig/iptables
service iptables restart
注意:jdk版本必须得1.8!!!nexus版本不同,可能需要的jdk版本不同
nexus不推荐使用root用户启动(可忽略)
也可以自己手动创建个用户,然后加入到组,赋予权限,步骤如下
1、useradd nexus
2、chown -R nexus:nexus xxxx/xxxx/nexus-3.27xxx/
3、chown -R nexus:nexus xxxx/xxxx/sonatype-work/
4、su nexus
5、./nexus start
注:./nexus start,启动完成之后,查看nexus是否启动:ps aux|grep nexus,若没有启动的话,可以使用:./nexus run;此时启动项目就会提示哪里出错啦~
注:点击右上角登录,默认账号密码:admin/admin123;从nexus3.17以后,默认密码改为随机的了,文件路径在:/usr/local/sonatype-work/nexus3/admin.password里!!!
vim /etc/rc.d/rc.local
阿里云地址:http://maven.aliyun.com/nexus/content/groups/public/
本地库,我已经清空,所有下载的都会先去nexus看看,没有的话,才会走阿里云代理上下载,然后还会下载到nexus。
点我直达
我使用的是7.0,版本要求: 点我直达
下载地址: 点我直达
点我直达
1、依赖:yum install unzip -y
2、解压:unzip sonarqube-7.0.zip
3、移动:mv sonarqube-7.0 /usr/local/
4、切换: cd /usr/local/
5、登录mysql:mysql -u root -p
6、创建库:CREATE DATABASE sonar DEFAULT CHARACTER SET utf8;
7、退出mysql:exit
8、进入sonarqube:cd sonarqube-7.0/conf/
vim sonar.properties
主要配置以下内容
sonar.jdbc.username=root
sonar.jdbc.password=root
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useCOnfigs=maxPerformance&useSSL=false
sonar.web.host=0.0.0.0
sonar.web.cOntext=/sonar
sonar.web.port=9000
useradd sonar
chown -R sonar:sonar /usr/local/sonarqube-7.0
su sonar
cd /usr/local/sonarqube-7.0/bin/linux-x86-64/
./sonar.sh start
记得开放防火墙端口:9000,账号/密码:admin/admin
安装完,重启服务再次打开网页即可
sonar7.0的中文包,网页在线安装不上,我是去github上下载,手动安装的,按照以下几步即可,下面我也会提供,我直接下载的是jar包,源码包还得编码(因为我懒)
1. 在https://github.com/SonarCommunity/sonar-l10n-zh,下载汉化包源码;
2. 本地打包,cmd里面,在解压包里面运行: mvn install
3. 将打好的jar包,放到: sonarqube/extensions/plugins 目录先;
4. 重启sonar,即可
具体操作如下,github地址: 点我直达
settings.xml
============================
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
git init
mvn clean install
mvn sonar:sonar
前置条件
jenkins下载: 点我直达
将jenkins放到tomcat中
注:可以看到,地址被占用了!
修改tomcat的端口号,我这里修改为:9999,记得防火墙!!!
继续到全局配置里设置sonarqube
yum -y install openssh-clients
ssh-keygen -t rsa
生成的key放到gitlab
more ~/.ssh/id_rsa.pub
注:git方式拉代码,直接不报红,代表搭建成功
linux创建目录
1、cd /
2、mkdir springboot_demo
jenkins配置
clean install
mv target/*.jar /springboot_demo/
cd /springboot_demo
BUILD_ID= java -jar spring-boot-demo-0.0.1-SNAPSHOT.jar >log 2>&1 &
clean install
mv target/*.jar /springboot_demo/
cd /springboot_demo
BUILD_ID= java -jar spring-boot-demo-0.0.1-SNAPSHOT.jar >log 2>&1 &
刚开始的时候sonarqube里面没有项目随着代码的重新发布,会将项目也提交到sonarqube中
#projectKey项目的唯一标识,不能重复
sonar.projectKey=yb
sonar.projectName=springboot-test
sonar.projectVersion=1.0
sonar.sourceEncoding=UTF-8
sonar.modules=java-module
# Java module
java-module.sonar.projectName=test
java-module.sonar.language=java
# .表示projectBaseDir指定的目录
java-module.sonar.sources=src
java-module.sonar.projectBaseDir=.
java-module.sonar.java.binaries=target/
本地代码修改完成之后,往gitlab上推代码,然后Jenkins自动打包发版程序,不用人工手动发版。
装完插件后,虚拟机上的磁盘满了,导致服务起不来,今天先到这吧,不搞这玩意了(明天要搞其他东西,搭建这一整套东西,恶心我几百回了,处处坑~),自行去找度娘吧,只需要简单配置2步就好,前面服务都全部搭建出来了,这个因为linux磁盘满了,懒得搞了,有点小遗憾,拜~
链接: https://pan.baidu.com/s/1OixJ3oHvjEjKLtvuvplclA 密码: fbqs