gitlab+jenkins+tomcat CI/CD 部署


整個項目的框架為:

gitlab的安裝與使用(Centos7)

gitlab的安裝

新建yum源

vim /etc/yum.repos.d/gitlab-ce.repo
[gitlab-ce]
name=gitlab-ce
baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7
repo_gpgcheck=0
gpgcheck=0
enabled=1
gpgkey=https://packages.gitlab.com/gpg.key

安裝依賴包

yum install curl openssh-server openssh-clients postfix cronie

啟動 postfix 郵件服務

service postfix start

檢查 postfix

chkconfig postfix on

安裝 GitLab 社區版 ,安裝git,使其支持git命令

yum install gitlab-ce git

初始化 GitLab

gitlab-ctl reconfigure

添加訪問的 host

vim /etc/gitlab/gitlab.rb
external_url 'http://git.home.com'

vi /etc/hosts
本機ip git.home.com

每次修改/etc/gitlab/gitlab.rb,都要運行以下命令,讓配置生效

gitlab-ctl reconfigure

啟動gitlab

gitlab-ctl start

web界面登錄

在瀏覽器打開網址http://git.home.com,登陸。默認管理員:

用戶名: root
密碼: xxxxxx

若此時啟動gitlab后,若內存在不斷減少,訪問報502,則很可能是內存不夠,至少配置4G內存。

gitlab的漢化

對於英文還過得去的同學,可以不用漢化

關閉gitlab

gitlab-ctl stop

下載漢化包

下載最新的漢化包,並查看版本,漢化包版本要與gitlab-ce包版本一致:

git clone https://gitlab.com/xhang/gitlab.git 
cat gitlab/VERSION
10.6.1

也可指定版本下載,對於剛出來的一些新版本的gitlab-ce包,可能沒有同版本漢化包,過一段時間就會有了:

git clone https://gitlab.com/xhang/gitlab.git  -b  v10.6.1-zh

下載的文件夾內容復制到gitlab目錄下

cp -r -f ./gitlab/* /opt/gitlab/embedded/service/gitlab-rails/

復制過程中會出現以下提示,不用管

cp: cannot overwrite non-directory ‘/opt/gitlab/embedded/service/gitlab-rails/log’ with directory ‘./gitlab/log’
cp: cannot overwrite non-directory ‘/opt/gitlab/embedded/service/gitlab-rails/tmp’ with directory ‘./gitlab/tmp’

重新加載配置,啟動gitlab

gitlab-ctl reconfigure   
gitlab-ctl restart

再次訪問gitlab的web界面即變為中文。

gitlab的使用

創建項目新增文件




配置密鑰

接下來配置密鑰,實現本地工作機git pull/push gitlab的項目(ssh)
在本地工作機上生成密鑰,將公鑰復制到gitlab中

    ssh-key  一路回車
    cat ~/.ssh/id_rsa.pub


代碼pull/push測試

復制項目地址

在本地工作機上,配置域名解析

vim /etc/hosts
172.19.0.111 gitlab.home.com

將代碼clone到本機

mkdir test_repo 
cd test_repo/
git init        #初始化倉庫
git clone git@gitlab.home.com:root/test1.git

由於我之前本地hosts中配置的是另一台gitlab的相同域名不同ip,在known_hosts 文件中有屬於 該hostname 的密鑰,git clone會報錯

修改本機代碼,push到gitlab端

cd  test1
echo aaa>aaa
git add ./*
git commit -m "提交代碼"
git push

刪除該項目中的文件aaa,並同步到gitlab

git rm -r --cached aaa
git commit -m 'delete'
git push  

git pull 可以從gitlab中將文件拉到本地

jenkins的安裝 (version 2.73.3)

war包部署及web界面配置

安裝好jdk8與tomcat,下載jenkins.war包,放在tomcat的webapp下,重啟tomcat服務。配置好防火牆和selinux。

將jenkins的公鑰添加到gitlab

jenkins服務器生成密鑰

ssh-keygen
cat   ~/.ssh/id_rsa.pub

復制公鑰粘貼到gtilab 的SSH keys中
將gitlab的域名解析加到jenkins的/etc/hosts中。若后邊的url涉及到域名時,改為ip,也可以不加該域名的解析。

訪問jenkins的web界面 http://ip:8080/jenkins,cat該passwd文件,填寫到下面的框中。

安裝插件,install suggested plugins,后邊還有額外安裝一些插件.添加用戶名密碼,管理員為admin

安裝插件 Maven Integration , Publish Over SSH,Gitlab

此時沒有maven項目,需要安裝插件Maven Integration ,同時安裝Gitlab與遠程連接tomcat服務器 的插件Publish Over SSH
系統管理 ---> 管理插件 ---> 可選插件 ---> 過濾選中直接安裝

配置maven插件

jenkins安裝jdk與maven,安裝完在server命令行/root/.jenkins/tools/目錄下可以看到jdk與maven的兩個安裝目錄

可能會遇到報錯

jenkins的web界面報錯Your container doesn’t use UTF-8 to decode URLs. If you use non-ASCII ....
tomcat的字符問題,在tomcat配置文件server.xml中添加URIEncoding="UTF-8",並重啟tomcat。有些版本的tomcat不會報錯。

配置Gitlab插件

打開gitlab右上角綠色圖標設置 ---> 右邊圖標access tokens --->創建個人訪問令牌,復制訪問令牌待用


jenkins 添加gitlab的訪問令牌


Connection name 隨便起名 ---> Gitlab host URL gitlab的ip ---> Credentials 選擇Gitlab API token ---> Add ---> jenkins配置加下第二圖最后測試連接一下,是否成功


注:若此處的憑據添加不上,可在全局憑據中先添加認證內容,這里就會有選項


配置publish over SSH 插件

remote directory為war包在tomcat服務器中需要放置的路徑,普遍是放在tomcat的webapp下,我這里放到自定義的目錄下,后邊會配置腳本進行后續操作。

Passphrase:密碼(key的密碼,如果你設置了,否則不填)
Path to key:key文件(私鑰)的路徑 
Key:將私鑰復制到這個框中
Disable exec:禁止運行命令


配置jenkins免密登錄tomcat服務器
tomcat服務器:
ssh-keygen
/.ssh/id_rsa.pub放到jenkins的/.ssh/下,並改名為authorized_keys

新建maven項目


點進這個test項目 -->配置

將gitlab中該項目的地址粘貼過來到 Repository URL

這里中間出現紅色字體的報錯,排錯思路:

1.先測試jenkins與gitlab連通沒,在jenkins命令git clone 項目url 是否成功
2.確認訪問令牌配好沒
3.域名解析有沒有

此處我把域名改為ip就好了,這里的認證方式我們選用gitlab用戶名密碼的方式,也有填密鑰路徑的方式,此處就不多介紹了。下面的*/master默認對master分支進行構建。

構建觸發器

此處選擇webhook的方式(此方式依賴於Gitlab 與 Gitlab Hook插件)。復制webhook url,待用

將剛復制的url放到gitlab中,點擊下面的 “ 增加web鈎子 ”

此處構建觸發器還有其他方式Poll SCM H/1 * * * * 每隔1分鍾核對一次gitlab是否更新,若有更新就立即構建。

構建環境不用管

pre steps

Goals maven的打包命令

生成war包需要讀取pom.xml里的配置,root pom.xml默認為該項目web界面里工作空間下的相對路徑,即server里/root/.jenkins/workspace/項目名/pom.xml。這里就需要gitlab里的代碼直接在該項目下,前面沒有多余的目錄。如下圖1,而不是圖2,項目下還有一層 目錄。在jenkins上配置pom.xml時,把這個目錄加在pom.xml文件前面也是不能識別該路徑的

(注:很久之后重新編輯此博文,我想以上maven打包命令應該可以跟上-f 路徑,大家可以試試)


build

設置構建后的郵件通知

構建后操作

構建后需要將war包傳到tomcat服務器
source files  相對於工作空間的war包位置,構建完默認在target下;
remove prefix 去掉war包之前的路徑
exec command 部署好war包后,在tomcat服務器中要執行的命令,此處我寫成一個腳本在tomcat服務器中。

cat  change_war.sh
#! bin/bash
#cd /usr/share/tomcat/bin && ./shutdown.sh
systemctl stop tomcat
cd /usr/share/tomcat/webapps
rm -rf appstore.war appstore
mv /usr/share/war/appstore.war /usr/share/tomcat/webapps/ &&
systemctl start tomcat
#cd /usr/share/tomcat/bin && ./start.sh

在maven的配置文件中修改私服的服務器地址


配置完就可以構建了。

一般第一次構建會報錯,查看控制台輸出,找報錯原因。

由於部署很復雜,過程過一定會報錯,慢慢查原因,一定只有把整個過程理解后,才會部署成功。這是我的心得。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM