git版本控制的使用
鏈接地址:https://www.cnblogs.com/Mercury-linux/p/12623343.html
Jenkins官方:https://jenkins.io/
GitLab概述:是一個利用 Ruby on Rails 開發的開源應用程序,實現一個自托管的Git項目倉庫,可通過Web界面進行訪問公開或者私人項目。Ruby on Rails 是一個可以使開發、部署、維護 web應用程序變得簡單的框架。
GitLab擁有與Github類似的功能,能夠瀏覽源代碼,管理缺陷和注釋。可以管理團體對倉庫的訪問,它非常易於瀏覽提交過的版本並提供一個文件歷史庫。它提供一個代碼收集功能可以輕松實現代碼復用,便於日后需要的時候進行查找。
GitLab官網:
二者都是基於web的Git倉庫,在很大程度上GitLab是仿照GitHub來做的,他們都提供了分享開源項目的平台,為開發團隊提供了存儲、分享、發布和合作開發項目的中心化雲存儲的場所。
-
不同點:
GitHub 如果要使用私有倉庫,是需要付費的。 GitLab 可以在上面創建私人的免費倉庫。
git 是一種版本控制系統,是一個命令,是一種工具
gitlib 是用於實現git功能的開發庫
github 是一個基於git實現的在線代碼托管倉庫,包含一個網站頁面,向互聯網開放
gitlab
持續集成系統的工作流程大概分為以下幾步:
-
-
Gitlab 隨后觸發 Jenkins master 節點進行一次 build。(通過 web hook 或者定時檢測)
-
Jenkins master 結點將這個 build 人為分配給若干注冊的 slave結點中的一個,這個 slave結點根據一個事先設置號的腳本進行 build。這個腳本可以做的事情很多,比如編譯,測試、生成測試報告等等。這些原本需要手動完成的任務都可以交給Jenkins 來做。
-
整體實驗環境部署:
主機名 | 公網ip | 內存 | 服務 |
lb01 | 10.0.0.5 | 2G | 數據庫、負載均衡、Jenkins上線 |
web01 | 10.0.0.7 | 1G | tomcat |
web02 | 10.0.0.8 | 1G | tomcat |
es01 | 10.0.0.240 | 3G |
#配置擴展源 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo #安裝gitlab和依賴包 wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.3.5-ce.0.el7.x86_64.rpm yum localinstall gitlab-ce-12.3.5-ce.0.el7.x86_64.rpm -y
- gitlab配置文件
vim /etc/gitlab/gitlab.rb #設置訪問url和關閉prometheus external_url 'http://gitlab.oldqiang.com' #如果安裝普羅米修斯全家桶需要4G內存 prometheus_monitoring['enable'] = false #配置gitlab通過smtp發送郵件 gitlab_rails['gitlab_email_enabled'] = true gitlab_rails['gitlab_email_from'] = '1354586675@qq.com' gitlab_rails['gitlab_email_display_name'] = 'china' gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.qq.com" gitlab_rails['smtp_port'] = 465 gitlab_rails['smtp_user_name'] = "1354586675@qq.com" gitlab_rails['smtp_password'] = "xxxxxx" gitlab_rails['smtp_domain'] = "qq.com" gitlab_rails['smtp_authentication'] = "login" gitlab_rails['smtp_enable_starttls_auto'] = true gitlab_rails['smtp_tls'] = true #應用重新配好的配置並重啟gitlab gitlab-ctl reconfigure
注:重新配置應用程序。修改gitlab服務配置文件后,都需要重啟執行gitlab-ctl reconfigure
命令。讓各個服務的配置文件,重新加載一下配置文件
unzip AEIOUAEIOU-xhang_gitlab-v12.3.5-zh.zip #查看當前漢化版本,如果gitlab版本太新部分不能漢化 cat xhang_gitlab/VERSION 12.3.5 gitlab-ctl stop \cp -a xhang_gitlab/* /opt/gitlab/embedded/service/gitlab-rails/ #這里會有兩個報錯,因為這里兩個軟連接 gitlab-ctl start netstat -lntup tcp 0 0 127.0.0.1:9229 0.0.0.0:* LISTEN 10859/gitlab-workho tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN 10916/unicorn maste tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 10877/nginx: master tcp 0 0 127.0.0.1:8082 0.0.0.0:* LISTEN 10895/sidekiq 5.2.7 tcp 0 0 127.0.0.1:9236 0.0.0.0:* LISTEN 10846/gitaly tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 6693/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 7128/master tcp 0 0 0.0.0.0:8060 0.0.0.0:* LISTEN 10877/nginx: master
注:這里需要等待!8080端口起不來會出現 502 報錯
主頁面漢化完成:
徹底漢化:
根據配置推送代碼項目,將項目推送到倉庫
#進行解析 vim /etc/hosts 10.0.0.88 class.com #准備目錄和項目 mkdir /opt/shop cd /opt/shop 2000.png 21.js icon.png img index.html sound1.mp3 #上傳倉庫 git config --global user.name "Administrator" git config --global user.email "admin@example.com" git init git add . git commit -m "Initial commit" git remote add origin http://class.com/shop/shop.git git push -u origin master #輸入用戶名和密碼
推送結果:
- ssh推送:
#主機創建密鑰 ssh-keygen <--一路回車 cat /root/.ssh/id_rsa.pub 將內容添加到gitlab倉庫的SSH密鑰 #配置倉庫 git init git remote add origin git@class.com:root/bbs.git git add . git commit -m "Initial commit" git push -u origin maste
加入用戶:
#備份 gitlab-rake gitlab:backup:create #這里有些敏感文件不會去備份,需要手動備份 #刪一個庫在恢復 gitlab-ctl stop unicorn gitlab-ctl stop sidekiq #注:執行下面一條命令會刪除庫中的表和數據 #BACKUP內容:時間戳+時間+版本 gitlab-rake gitlab:backup:restore BACKUP=1585361881_2020_03_28_12.3.5 gitlab-ctl start unicorn gitlab-ctl start sidekiq vim /etc/gitlab/gitlab.rb gitlab_rails['manage_backup_path'] = true gitlab_rails['backup_path'] = "/var/opt/gitlab/backups" gitlab_rails['backup_keep_time'] = 604800 gitlab-ctl reconfigure netstat -lntup #遷移雲主機 先備份,雲主機安裝相同版本,恢復
#升級: wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.3.9-ce.0.el7.x86_64.rpm yum localinstall gitlab-ce-12.9.1-ce.0.el7.x86_64.rpm -y #gitlab會備份數據並重啟 ll /var/opt/gitlab/backups/ -rw------- 1 git git 1781760 Mar 28 10:18 1585361881_2020_03_28_12.3.5_gitlab_backup.tar -rw------- 1 git git 133120 Mar 28 10:56 1585364188_2020_03_28_12.3.5_gitlab_backup.tar drwx------ 7 git git 131 Mar 28 10:30 tmp #查看當前gitlab版本: rpm -qa | grep gitlab gitlab-ce-12.9.1-ce.0.el7.x86_64 #如果設置漢化不徹底可以在漢化一次
注:這里gitlab需要啟動一會出現8080端口在查看網頁
推薦參考地址:http://john.albin.net/git/convert-subversion-to-git
svn教程地址:https://www.runoob.com/svn/svn-intro.html
安裝svn客戶端
yum install subversion -y svn --version
初始化倉庫
#手動新建版本庫目錄 mkdir /svn/repo -p #創建版本庫 svnadmin create /svn/repo
svn服務配置文件svnserver.conf,該文件僅由一個[general]配置段組成。
cd /svn/repo/conf vim svnserve.conf [general] anon-access = none auth-access = write password-db = passwd authz-db = authz realm = /svn/repo [sasl]
-
-
auth-access: “用戶”,取值范圍為:“write (可讀可寫)”、“read (只讀)”和“none (無訪問權限)”,默認值:write 。
-
authz-db: 指定權限配置文件名,通過該文件可以實現以路徑為基礎的訪問控制。這里使用相對路徑
-
realm:
用戶名口令文件passwd
#用戶名口令文件由svnserve.conf的配置項password-db指定,默認為conf目錄中的passwd。由[users]配置段組成。 vim passwd [users] admin = 123456 <-- 授權用的 test = 123456 <-- 賬戶密碼
權限配置文件authz
#由svnserve.conf的配置項authz-db指定,默認為conf目錄中的authz。該配置文件由一個[groups]配置段和若干個版本庫路徑權限段組成。 vim authz [/] admin = rw test = r
注:[/]
,則表示所有庫的根目錄
svnserve -d -r /svn/repo #創建git倉庫 mkdir /opt/git git svn clone svn://10.0.0.100 --username=admin --no-metadata --authors-file=/opt/git/password.txt /opt/git/ cat password.txt admin=zhangsan<296917342@qq.com>
-
-
--authors-file:svn用戶列表
-
/opt/class:
jdk下載地址:https://www.oracle.com/java/technologies/javase-jdk8-downloads.html
jdkrpm包網盤鏈接:https://pan.baidu.com/s/1zyFC-mTVqFPfFnTJQXaa4g
yum localinstall jdk-8u102-linux-x64.rpm -y java -version
#安裝tomcat mkdir /app wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.53/bin/apache-tomcat-8.5.53.tar.gz tar xf apache-tomcat-8.5.53.tar.gz -C /app/ ln -s /app/apache-tomcat-8.5.53/ /app/tomcat cd /app/tomcat/webapps/ rm -rf ROOT wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/latest/jenkins.war mv jenkins.war ROOT.war /app/tomcat/bin/startup.sh netstat -lntup | grep 8080
注:這里Jenkins的信息都放在了root目錄下的.Jenkins
下。
- 訪問加速設置,插件安裝將指向清華源
注:只有頁面插件安裝才會出現updates
這個目錄。
cd /root/.jenkins/updates/ sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json #重啟tomcat
rm -rf /root/.jenkins tar xf jenkins-data.tar.gz -C /root/ #登錄: admin 123456
概述:一個項目,創建一個job,一個job就是一個自動化上線的流程(拉取-html-打包-scp-tar)
構建job:
源碼管理 | 構建觸發器 | 構建環境 | 構建 | 構建后操作 | |
關閉job | 對接代碼倉庫 | gitlab代碼倉庫 | 構建前准備操作 | shell腳本 |
構建任務:
用戶和密碼添加:
密鑰添加:
cat /root/.ssh/id_rsa #內容添加到憑證
#Jenkins主機創建並分發密鑰實現免輸入傳輸 ssh-keygen ssh-copy-id root@10.0.0.7 ssh-copy-id root@10.0.0.8
#負載均衡主機配置文件 vim /etc/nginx/nginx.conf worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream java { server 10.0.0.7:80; server 10.0.0.8:80; } server { listen 80; server_name zrlog.oldedu.com; root html; index index.html index.htm; location / { proxy_pass http://java; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } } #網站主機07,08 yum install nginx -y systemctl start nginx systemctl enable nginx #刪除默認網頁修改首頁文件 rm -rf /usr/share/nginx/html/* echo "web01" > index.html echo "web02" > index.html #刷新查看
- 腳本思路
#Jenkins主機將源碼壓縮到 mkdir /data <--壓縮文件目錄 cd /root/.jenkins/workspace/shop tar zcf /opt/data/shop.tar.gz * scp -rp /opt/data/shop.tar.gz 10.0.0.8:/opt/data/ #網站主機 mkdir /jenkins_data <--存放壓縮包目錄 mkdir /code/shop -p <--網站代碼目錄 chmod 755 -R /code/ /usr/share/nginx/html <--nginx默認網站目錄,code目錄軟鏈接地址 #解壓 tar xf /opt/data/shop.tar.gz -C /code/shop rm -rf /usr/share/nginx/html ln -s /code/shop /usr/share/nginx/html <--代碼更新方式目錄直接軟連接 ll /usr/share/nginx <--查看軟鏈接情況
mkdir /server/scripts -p vim auto_code_update_html.sh #!/bin/bash #執行腳本默在這個目錄下 # cd /root/.jenkins/workspace/shops/shop project=$1 tag=$2 #mkdir /data tar zcf /data/${project}-${tag}.tar.gz * IP="10.0.0.7 10.0.0.8" #web主機操作 for n in `echo $IP` do #mkdir /data scp -rp /data/${project}-${tag}.tar.gz root@${n}:/data ssh root@$n " mkdir -p /code/${project}-${tag} && \ tar xf /data/${project}-${tag}.tar.gz -C /code/${project}-${tag} && \ rm -rf /usr/share/nginx/html && \ chmod 755 -R /code/ && \ ln -s /code/${project}-${tag} /usr/share/nginx/html" done #執行腳本測試 sh -x /server/scripts/auto_code_update_html.sh
- Jenkins構建
vim /server/scripts/auto_code_undo_html.sh #!/bin/bash # cd /root/.jenkins/workspace/shops/shop project=$1 tag=$2 IP="10.0.0.7 10.0.0.8" for n in `echo $IP` do ssh root@$n "rm -rf /usr/share/nginx/html && \ ln -s /code/${project}-${tag} /usr/share/nginx/html" done
- 添加文本參數,選擇版本號
- 構建時執行的shell
- 構建
注:這里如果項回退版本,之前的版本目錄都必須要有
配置集成:
修改文件:
查看結果:
rpm -ivh jdk-8u102-linux-x64.rpm mkdir /app wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.53/bin/apache-tomcat-8.5.53.tar.gz tar xf apache-tomcat-8.5.53.tar.gz -C /app/ ln -s /app/apache-tomcat-8.5.53/ /app/tomcat /app/tomcat/bin/startup.sh
- maven環境
maven下載地址:https://maven.apache.org/download.cgi
wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz tar xf apache-maven-3.6.3-bin.tar.gz -C /usr/local ll /usr/local/apache-maven-3.6.3/ ln -s /usr/local/apache-maven-3.6.3/ /usr/local/maven ll /usr/local/maven/ vim /etc/profile #文件結尾添加兩行 export M2_HOME=/usr/local/maven export PATH=${M2_HOME}/bin:$PATH source /etc/profile mvn -v #更新源為阿里源 vim /usr/local/maven/conf/settings.xml #將所有內容復制到<mirrors>之間 <mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror>
- 創建碼雲倉庫並將java代碼上傳上去
mkdir /opt/java_git tar xf SpringBootWeb.tar.gz -C /opt/java_git cd /opt/java_git <--將需要上傳的源碼放在這里--> #創建碼雲倉庫並將信息信息和地址寫在目錄 git config --global user.name "weijixiang" git config --global user.email "1354586675@qq.com" git init git add . git commit -m "first commit" git remote add origin git@gitee.com:weijixiang_god/java.git git push -u origin master
注:這里主機的ssh要在碼雲上的ssh公鑰配置好,后去拉取不用輸入密碼,碼雲打上標簽
- jenkins安裝maven插件
配置maven
正在構建
#編譯文件地址 /root/.jenkins/workspace/springBoot/target/SpringBootWeb.war #tomcat配置文件允許使用軟連接 vim /app/tomcat/conf/context.xml <Context> <Resources allowLinking="true" /> </Context> #重啟
- 測試腳本
注:此腳本為了驗證是否可行,結合Jenkins需要修改參數
vim auto_code_update_java.sh #!/bin/bash #project=$1 tag=v1.0 packname="SpringBootWeb" dir="/root/.jenkins/workspace/springBoot/target/SpringBootWeb.war" IP="10.0.0.7 10.0.0.8" for n in `echo $IP` do scp -rp $dir root@${n}:/data ssh root@$n "mkdir -p /code/$packname-$tag && \ unzip -d /code/$packname-$tag /data/${packname}.war && \ rm -rf /app/tomcat/webapps/class && \ ln -s /code/$packname-$tag /app/tomcat/webapps/class && \ /app/tomcat/bin/shutdown.sh && \ /app/tomcat/bin/startup.sh" done
vim /server/scripts/auto_code_update_java.sh #!/bin/bash project=$1 tag=$2 dir=$(find `pwd` -name "*.war") IP="10.0.0.7 10.0.0.8" for n in `echo $IP` do scp -rp $dir root@${n}:/data/${project}.war-$tag ssh root@$n "mkdir -p /code/$project-$tag && \ unzip -d /code/$project-$tag /data/${project}.war-$tag && \ rm -rf /app/tomcat/webapps/${project} && \ ln -s /code/$project-$tag /app/tomcat/webapps/${project} && \ /app/tomcat/bin/shutdown.sh && \ /app/tomcat/bin/startup.sh" done
項目構建
3. 立即構建
4. 查看效果
vim /server/scripts/auto_code_undo_java.sh #!/bin/bash project=$1 tag=$2 IP="10.0.0.7 10.0.0.8" for n in `echo $IP` do ssh root@$n "rm -rf /app/tomcat/webapps/${project} && \ ln -s /code/$project-$tag /app/tomcat/webapps/${project} && \ /app/tomcat/bin/shutdown.sh && \ /app/tomcat/bin/startup.sh" done
- 創建一個回滾job
添加文本參數:
選擇版本進行構建:
構建結果:
項目思路:
-
創建項目倉庫
-
解壓文件並將源碼推到碼雲指定倉庫
-
編寫自動部署腳本,並進行驗證
-
Jenkins創建job添加git倉庫地址,shell執行腳本
-
驗證
#創建數據庫,創建用戶和權限 create database jeesns; grant all on jeesns.* to 'jeesns'@'10.0.0.%' identified by '123456'; #導入項目sql文件 cd /opt/jeesns/jeesns-web/database mysql -ujeesns -p123456 -h 10.0.0.5 jeesns <jeesns.sql #修改數據庫連接地址 vim /opt/jeesns/jeesns-web/src/main/resources/jeesns.properties 地址:10.0.0.5 jdbc.user=jeesns jdbc.password=123456 #這里修改完了文件需要重新git倉庫一下在上傳到碼雲 #編譯測試 mvn clean package
unzip -d /opt/jeesns.zip cd /opt/jeesns <--將需要上傳的源碼放在這里--> #創建碼雲倉庫並將信息信息和地址寫在目錄 git config --global user.name "weijixiang" git config --global user.email "1354586675@qq.com" git init git add . git commit -m "first commit" git remote add origin git@gitee.com:weijixiang_god/jeesns.git git push -u origin master
添加git倉庫地址:
編譯項目時清空緩存編譯:
執行腳本: