導讀
之前用的都是SVN,由於工作需要用到Git,求人不如求己,技多不壓身,多學一項技能,未來就少求別人一次,系統的學一遍,自己搭建一整套環境,自動化部署(自動發版),代碼質量檢測等等(為啥不用docker搭建環境呢,個人平時比較忙,暫未學習docker,過段時間會學docker相關,也會寫相應博文)。為啥要打水印,Wechat上有人告訴我,之前很多博文,被某些網站白嫖,然后掛到自己網站(未來博客上都會打水印),~@¥#%¥@%#@%¥再次聲明,創作不易,嚴禁轉載!!!
踩坑
從10月12、13(周末)天天搞到夜里2、3點,周一至周五,由於個人原因,剛換份工作,平時也忙,個人精力有限,只能晚上花2、3小時,學習-搭建-踩坑-度娘-搭建-成功,一直到今天,才完整的搭建出來,博客才發出來。安裝過程中,並不是一帆風順的,在此為了避免學習的小朋友踩相同的坑,最好版本和我一致,下面都會有提供我使用的安裝包。那些坑,我已經巧妙的繞開啦,按照我的步驟來,干就完事兒啦,歐力給~
演示環境
- mac系統
- 虛擬機:Centos 6.5(我分配了4G,2核,配置低了會卡!里面用到ES服務器配置低,服務起不來,ES腦補鏈接:點我直達,磁盤至少分50G,當初我給了20G,最后服務配置太多以后,導致服務跑不起來了)
Git
Git是什么
Git 是一個開源的分布式版本控制系統,用於敏捷高效地處理任何或小或大的項目。
Git 是 Linus Torvalds 為了幫助管理 Linux 內核開發而開發的一個開放源碼的版本控制軟件。
Git 與常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本庫的方式,不必服務器端軟件支持。
Git的安裝
官網地址: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文件狀態
git status 查看git的狀態
git圖形化客戶端
官網:https://www.sourcetreeapp.com/
拉取代碼
分支
軟件項目中啟動一套單獨的開發路線的方法,可以避免版本兼容開發問題,避免不同版本之間的影響,封裝一個開發階段,解決bug的時候新建分支,用於對該bug的研究。
創建分支&查看分支
創建分支:git branch 分支名
查看分支:git branch
注:列出所有的分支,分支前面有*號,代表當前所在那個分支
刪除分支
刪除:git branch -d 分支名
注:不能刪除當前所在的分支
修改分支名
修改分支名:git branch -m 舊分支名 新分支名
開發v2.0版本分支(切換分支並推送到github)
切換分支: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
git更改提交
用途
- 將暫存區中不必要的文件移除
- 版本回滾
- 只修改提交的摘要信息
把暫存區中的文件移除出來_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/標簽名
gitignore文件
用途
-
忽略不必要的文件
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
簡介
GitLab 是一個用於倉庫管理系統的開源項目,使用Git作為代碼管理工具,並在此基礎上搭建起來的web服務。安裝方法是參考GitLab在GitHub上的Wiki頁面。
為什么要使用gitlab?
- 基礎功能開源,可自行搭建
- 可以進行權限控制,使代碼對部分人可見
安裝gitlab(Centos6.5)
目錄結構及說明
/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://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
linux其他版本安裝方式
centos其他版本下載包方式,當然啦,也可以先把包下載到本地,然后在丟到linux,執行安裝效果是一樣的。
修改對外開放域名或ip
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
啟動gitlab
sudo gitlab-ctl reconfigure
sudo lokkit -s http -s ssh
停止gitlab:gitlab-ctl stop
重啟gitlab:gitlab-ctl start
登錄
注:第一次登錄時,需要設置初始密碼,然后用root+密碼登錄即可
創建項目並推送到gitlab
本地新建一個項目並用git,將文件夾推送到gitlab上。
郵件服務
作用
- 有合並請求時,郵件通知
- 賬號注冊時,郵件驗證
- 修改密碼時,通過郵件修改
步驟
- 開啟QQ郵箱的smtp服務
- 修改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
賬號注冊和分組
用戶注冊(未開啟郵箱檢驗)
缺點:隨便添加賬戶,亂注冊,不符合企業管理標准
用戶注冊(郵箱校驗)
開啟校驗並真實郵箱注冊
創建組並邀請成員(配置過郵件服務,會郵件提醒)
訪問權限
- private:只有組成員才能看到
- Internal:只要登錄的用戶就能看到
- Public:所有人都能看到
組權限
- Guest:可以創建issue、發表評論,不能讀寫版本庫
- Reporter:可以克隆代碼,不能提交
- Developer(推薦):可以克隆代碼、開發、提交、push
- Master:可以創建項目、添加tag、保護分支、添加項目成員、編輯項目
- Owner:可以設置項目訪問權限 - Visibility Level、刪除項目、遷移項目、管理組成員
生成隨機密鑰
ssh-keygen -t rsa
分支及標簽保護
為什么要保護分支?
保護特定的分支不被隨便合並,以免影響相應的分支
自己部署好gitlab,然后賦予賬戶權限,體驗下就好
注:能push就能merge,相應的權限自我控制(master分支設置只能master可以合並)。
第二種方式合並請求
敏捷持續集成
簡介
好處
- 節省人力成本
- 加快軟件開發進度
- 實時交付
重要組件
- git
- gitlab
- Jenkins:持續集成引擎
- maven:構建
- sonarqube:代碼質量管理
- JDK
- Tomcat
jdk和maven安裝
jdk安裝:點我直達
maven安裝:點我直達
nexus私服安裝
官網:點我直達
下面百度雲盤也會提供喲~
解壓
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
啟動nexus
注意: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里!!!
修改最大文件數(默認1024)
注:記得重啟!!!
設置nexus開機自啟動
vim /etc/rc.d/rc.local
nexus安裝及使用
項目maven大概過程分析
設置maven的setting.xml
<?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" 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"> <pluginGroups/> <proxies/> <servers> <server> <id>ybchen-releases</id> <username>admin</username> <password>admin</password> </server> <server> <id>ybchen-snapshots</id> <username>admin</username> <password>admin</password> </server> </servers> <mirrors/> <profiles> <profile> <id>ybchen</id> <activation> <activeByDefault>false</activeByDefault> </activation> <!-- 私有庫地址--> <repositories> <repository> <id>ybchen</id> <url>http://192.168.199.199:8088/repository/maven-public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <!--插件庫地址--> <pluginRepositories> <pluginRepository> <id>ybchen</id> <url>http://192.168.199.199:8088/repository/maven-public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> </pluginRepositories> </profile> </profiles> <activeProfiles> <activeProfile>ybchen</activeProfile> </activeProfiles> </settings>
設置nexus的代理地址,並添加到組中
阿里雲地址:http://maven.aliyun.com/nexus/content/groups/public/
測試
本地庫,我已經清空,所有下載的都會先去nexus看看,沒有的話,才會走阿里雲代理上下載,然后還會下載到nexus。
將本地jar上傳至nexus
<distributionManagement> <repository> <id>ybchen-releases</id> <name>Nexus Release Repository</name> <url>http://xxx.xxx.xxx.xxx:port/repository/maven-releases/</url> </repository> <snapshotRepository> <id>ybchen-releases</id> <name>Nexus Release Repository</name> <url>http://xxxx.xxxx.xxx.xxx:port/repository/maven-snapshots/</url> </snapshotRepository> </distributionManagement>
安裝mysql
代碼質量管理平台sonarQube安裝及使用
前置條件
- mysql 5.6 | 5.7
- jdk1.8
我使用的是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 ============================ <?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" 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"> <pluginGroups></pluginGroups> <proxies></proxies> <servers></servers> <mirrors> <!--maven代理開始--> <mirror> <id>huaweicloud</id> <mirrorOf>*,!HuaweiCloudSDK</mirrorOf> <url>https://mirrors.huaweicloud.com/repository/maven/</url> </mirror> <mirror> <id>aliyun</id> <name>aliyun Maven</name> <mirrorOf>*,!HuaweiCloudSDK</mirrorOf> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> </mirror> <!--maven代理結束--> </mirrors> <profiles> <!--sonar配置開始--> <profile> <id>sonar</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <sonar.jdbc.url>jdbc:mysql://192.168.199.199:3306/sonar?useUnicode=true&characterEncoding=utf8</sonar.jdbc.url> <sonar.jdbc.username>root</sonar.jdbc.username> <sonar.jdbc.password>root</sonar.jdbc.password> <sonar.host.url>http://192.168.199.199:9000/sonar</sonar.host.url> </properties> </profile> <!--sonar配置結束--> </profiles> </settings>
git init
mvn clean install
mvn sonar:sonar
忽略某一條規則,pom.xml下面追加 <properties> <sonar.exclusions> src/main/java/com/.../domain/model/**/*, src/main/java/com/.../exchange/**/* </sonar.exclusions> </properties>
Jenkins
安裝
前置條件
jenkins下載:點我直達
將jenkins放到tomcat中
問題排查(重要)
- 查看tomcat是否啟動
- 查看端口8080是否開啟:netstat -tlun
- 查看防火牆端口是否開啟,記得重啟防火牆
- 查看tomcat日志:/var/soft/apache-tomcat-9.0.38/logs/catalina.out
注:可以看到,地址被占用了!
修改tomcat的端口號,我這里修改為:9999,記得防火牆!!!
訪問
安裝推薦組件
創建用戶名密碼
實例配置
登錄
插件安裝及配置
系統配置
- jdk
- maven
- sonarqube
- 郵件
- gitlab授權
- 免密登錄
配置jdk和maven
配置郵件
配置sonarqube
繼續到全局配置里設置sonarqube
授權登錄
生成密鑰
yum -y install openssh-clients
ssh-keygen -t rsa
生成的key放到gitlab
more ~/.ssh/id_rsa.pub
創建項目
注:git方式拉代碼,直接不報紅,代表搭建成功
jenkins手動發版測試
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 &
整合sonar然后發布
剛開始的時候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自動打包發版程序,不用人工手動發版。
安裝插件(gitlab)
裝完插件后,虛擬機上的磁盤滿了,導致服務起不來,今天先到這吧,不搞這玩意了(明天要搞其他東西,搭建這一整套東西,惡心我幾百回了,處處坑~),自行去找度娘吧,只需要簡單配置2步就好,前面服務都全部搭建出來了,這個因為linux磁盤滿了,懶得搞了,有點小遺憾,拜~
安裝包
鏈接: https://pan.baidu.com/s/1OixJ3oHvjEjKLtvuvplclA 密碼: fbqs