CentOS+Docker+Jenkins+Gradle+Github自動(dòng)部署kotlin Spring-boot項(xiàng)目

前言

  • 購(gòu)買(mǎi)服務(wù)器
  • 重做系統(tǒng) CentOS7.5
  • 遠(yuǎn)端SSH登錄服務(wù)器
  • 發(fā)車(chē)

打個(gè)廣告 ~ 移動(dòng)端離線(xiàn)鑒黃實(shí)現(xiàn),可移植到多個(gè)平臺(tái),讓鑒黃付費(fèi)不存在~ open_nsfw

更新yum源

yum update

安裝必要軟件

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

設(shè)置yum下載源為阿里倉(cāng)庫(kù)(網(wǎng)速ok的可以省略這一步)

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

查看倉(cāng)庫(kù)中所有的docker版本

yum list docker-ce --showduplicates | sort -r

選擇一個(gè)版本進(jìn)行安裝(下面的xxxx換成要安裝的docker)

sudo yum install xxxx

等待安裝結(jié)束后,啟動(dòng)docker 并設(shè)置docker開(kāi)機(jī)自啟,代碼如下

sudo systemctl start docker && sudo systemctl enable docker

查看docker版本

docker version

安裝項(xiàng)目需要的軟件,我項(xiàng)目需要redis和mysql,以下為示例命令,需要其他軟件的可參考以下命令

  • 下載redis鏡像
docker pull redis
  • 啟動(dòng)redis(--name 名稱(chēng)設(shè)置為redis,-p 映射主機(jī)端口 6379到redis容器內(nèi)部6379端口,這里注意到服務(wù)器配置頁(yè)面開(kāi)放6379端口,否則訪(fǎng)問(wèn)了容器內(nèi)部的redis,--requirepass 密碼,-d表示容器后臺(tái)運(yùn)行 ,-v掛載目錄 讓容器時(shí)間與服務(wù)器同步 )
docker run -d -v /etc/localtime:/etc/localtime --name redis -p 6379:6379 redis --requirepass 123456
  • 啟動(dòng)成功后用 docker ps 命令可以查看當(dāng)前運(yùn)行的容器

  • 同樣的方式下載安裝Mysql

docker pull mysql 
  • 啟動(dòng)mysql(服務(wù)器開(kāi)啟3306端口)
docker run -p 3306:3306 -v /etc/localtime:/etc/localtime --name mysql  -e MYSQL_ROOT_PASSWORD=123456 -d mysql
  • 啟動(dòng)成功后用 docker ps 命令可以查看當(dāng)前運(yùn)行的容器

現(xiàn)在遠(yuǎn)端可以使用響應(yīng)工具鏈接MySQL和Redis了

同上方式安裝Jenkins

  • 下載jenkins鏡像
docker pull  jenkins/jenkins:lts
  • 創(chuàng)建文件夾來(lái)掛載jenkins目錄
mkdir /home/jenkins_home
  • 啟動(dòng)jenkins并掛載目錄(-u root是以管理員模式運(yùn)行容器,因?yàn)榈葧?huì)要進(jìn)入容器內(nèi)部用到管理員命令,同樣記得開(kāi)放8080和50000端口,這里我多開(kāi)了兩個(gè)端口,因?yàn)槲覝?zhǔn)備把項(xiàng)目直接掛到j(luò)enkins所在的容器,所以項(xiàng)目用到的端口我也要開(kāi)啟一下)
docker run -u root -d  -v /etc/localtime:/etc/localtime --name jenkins -p 80:80 -p 443:443 -p 8888:8080 -p 50000:50000 -v /home/jenkins:/home/jenkins jenkins/jenkins:lts
  • 啟動(dòng)成功,在瀏覽器訪(fǎng)問(wèn)你的IP地址+端口號(hào)就可以訪(fǎng)問(wèn)到j(luò)enkins頁(yè)面了


    home.png
  • 需要一個(gè)管理員密碼,用如下命令進(jìn)入容器后獲取。

docker exec -it jenkins bash
  • 獲取管理員密碼
cat /var/jenkins_home/secrets/initialAdminPassword
  • 復(fù)制密碼并輸入密碼后進(jìn)入下一步,按照提示選擇推薦的插件基礎(chǔ)包安裝


    azcj.png
  • 讓它慢慢搞事情,我們先去搞點(diǎn)別的事情
  • 打開(kāi)github你的項(xiàng)目主頁(yè) ->>Setting ->>Webhooks ->> Add webhook 填寫(xiě)下面的地址
http://你的服務(wù)器地址:8080/jenkins/github-webhook
  • ContentType選擇application/json
  • Just the push event 打勾
  • Active打勾,保存
  • 點(diǎn)擊github右上角個(gè)人設(shè)置按鈕,以此選擇 Settings ->> Developer settings ->>Personal access tokens ->> New personal access token
  • 名字隨便起一個(gè),選擇授于的權(quán)限 repo 和 gist打勾,點(diǎn)擊生成,返回后復(fù)制生成的token備用(下次進(jìn)入頁(yè)面就看不到了,復(fù)制到安全的地方)
  • 回頭看看jenkins插件下載完了沒(méi).... 還沒(méi)完,不要著急。咱們?cè)俑牲c(diǎn)別的事,在gradle中添加幾個(gè)命令待用
bootJar {
    doFirst {
        println 'Start BootJar task...'
        baseName = 'wb-spring-boot'
        version = '1.3'
    }
    doLast {
        println 'BootJar success.'
    }
}
}
  • 再看下插件下完沒(méi),還沒(méi)下完... 我去刷一會(huì)皮皮蝦。

  • 刷不動(dòng)了,快十點(diǎn)了?;丶宜X(jué)了,明天再更。

  • 時(shí)隔一晚終于下完了,我們繼續(xù)... 設(shè)置一個(gè)管理員賬號(hào)和密碼,以后登錄就直接用設(shè)置的這個(gè)賬號(hào)和密碼了。


    szmm.png
  • 點(diǎn)擊保存并完成,一路下一步

  • 點(diǎn)擊左邊的系統(tǒng)管理 ->> Manage Jenkins ->> configure system對(duì)github進(jìn)行配置


    addgithub.png
  • 隨便起個(gè)名字,點(diǎn)擊添加,復(fù)制我們?cè)趃ithub生成的token。上面有說(shuō),往上翻翻


    addtoken.png
  • 如下圖操作,選擇剛才添加的token,點(diǎn)擊測(cè)試,出現(xiàn)下圖的字符表示添加成功


    addgsucc.png
  • 點(diǎn)擊左下角的保存

  • 接下來(lái)創(chuàng)建項(xiàng)目 ,點(diǎn)擊創(chuàng)建一個(gè)新任務(wù)

  • 輸入一個(gè)項(xiàng)目名稱(chēng),按下圖選擇后點(diǎn)擊確定

c_s.png
  • 配置倉(cāng)庫(kù) ->> 源碼管理->>Git 輸入項(xiàng)目地址 ->>添加git賬號(hào)(用戶(hù)名)和密碼
gitsp.png
  • 選擇剛才添加的賬號(hào) 選擇后會(huì)有紅色異常,稍等會(huì)鏈接到倉(cāng)庫(kù)后就沒(méi)了,如果一直紅色警告,檢查你的賬號(hào)和密碼,或者檢查你的服務(wù)器是否安裝了git。這里出問(wèn)題留言,我協(xié)助你解決。

  • 再往下走 構(gòu)建觸發(fā)器選擇 GitHub hook trigger for GITScm polling ,因?yàn)槲覀円谔峤淮a后由github通知jenkins構(gòu)建

  • 構(gòu)建環(huán)境按照下圖標(biāo)示選擇


    gj.png
  • 安裝gradle并配置環(huán)境變量

  • 進(jìn)入jenkins容器

docker exec -it jenkins bash
  • 進(jìn)入根目錄
cd /
  • 我下載4.8的gradle,你根據(jù)需要來(lái)
wget https://downloads.gradle.org/distributions/gradle-4.8-all.zip
  • 下載好了后就在當(dāng)前目錄下,我為了方便就在容器根目錄下下載的,直接解壓
unzip gradle-4.8-all.zip
  • 刪除壓縮文件
rm -rf gradle-4.8-all.zip
  • 安裝vim命令
apt-get update
apt-get install vim
  • 配置環(huán)境變量
vim /etc/profile
  • 加入下面的內(nèi)容 別想了,復(fù)制不了,手動(dòng)寫(xiě)一下吧
etc.png
  • 算了還是讓你拷貝一下吧
PATH=$PATH:/gradle-4.8/bin
export PATH
  • 按退出鍵 輸入:wq 敲回車(chē)保存
  • 讓剛才修改的環(huán)境變量生效
source /etc/profile
  • 查看gradle版本
gradle -v
  • 看到版本表示成功了

Welcome to Gradle 4.8!

Here are the highlights of this release:
 - Dependency locking
 - Maven Publish and Ivy Publish plugins improved and marked stable
 - Incremental annotation processing enhancements
 - APIs to configure tasks at creation time

For more details see https://docs.gradle.org/4.8/release-notes.html


------------------------------------------------------------
Gradle 4.8
------------------------------------------------------------

Build time:   2018-06-04 10:39:58 UTC
Revision:     9e1261240e412cbf61a5e3a5ab734f232b2f887d

Groovy:       2.4.12
Ant:          Apache Ant(TM) version 1.9.11 compiled on March 23 2018
JVM:          1.8.0_232 (Oracle Corporation 25.232-b09)
OS:           Linux 3.10.0-1062.1.1.el7.x86_64 amd64
  • 添加gradle變量進(jìn)jenkins 系統(tǒng)管理 ->>系統(tǒng)工具配置 ->> 新增gradle


    addgradle.png
  • 構(gòu)建內(nèi)容添加兩個(gè),第一個(gè)選擇invoke Gradle script 第二個(gè)選擇執(zhí)行shell,圖中的copyJavaFile可以去掉,是我自己的邏輯。


    add2.png
  • 第二個(gè)執(zhí)行shell 填寫(xiě)下面的腳本

#!/bin/bash
echo 打包成功,開(kāi)始運(yùn)行jar;
#進(jìn)程處理
/bin/fuser -k -n tcp 80
BUILD_ID=DONTKILLME
java -jar /var/jenkins_home/workspace/WB-Service/build/libs/wb-spring-boot-1.3.jar &
echo 構(gòu)建成功
  • 這里腳本中可能還需要個(gè)工具 psmisc,進(jìn)入容器后安裝
docker exec -it jenkins bash
  • 安裝psmisc
apt-get install psmisc
  • 查詢(xún)引用路徑(注意替換腳本中/bin/fuser的路徑,一般情況不用替換)
root@df727b881c6f:/# whereis fuser
fuser: /bin/fuser /usr/share/man/man1/fuser.1.gz
root@df727b881c6f:/# 
  • 回到j(luò)enkins配置頁(yè)面,點(diǎn)擊保存,立即構(gòu)建 (這里的項(xiàng)目目錄替換腳本中的jar執(zhí)行路徑)


    git_last.png
  • 我失敗三次了...兄弟你呢? 不能忍,搞點(diǎn)事情,直接把項(xiàng)目復(fù)制到j(luò)enkins工作目錄中吧..

  • 先將項(xiàng)目打包,copy到服務(wù)器的根目錄下(windows 用winscp工具蠻好的 mac的話(huà)也有類(lèi)似的,我用的SecureFX,直接拖到服務(wù)器根目錄下)

  • 將服務(wù)器根目錄下的文件copy進(jìn)容器內(nèi)部。這里需要注意,會(huì)用到容器的長(zhǎng)ID,不是短ID。首先用如下命令查看運(yùn)行的容器

docker ps
  • 根據(jù)容器名稱(chēng)查詢(xún)長(zhǎng)ID(命令:docker inspect -f '{{.ID}}' +容器名稱(chēng))
docker inspect -f '{{.ID}}' jenkins
  • copy進(jìn)容器中,(命令:docker cp + 服務(wù)器中的文件 + 剛才查詢(xún)到的容器長(zhǎng)ID + : + 容器中的路徑)容器路徑填寫(xiě)工作空間的路徑
docker cp WB-Service.zip 42b70191d27fcf0164abb36e33e223da52e306d49d6d5348e55663caac96bb82:/var/jenkins_home/workspace/
  • 進(jìn)入容器
docker exec -it jenkins bash
  • 解壓文件夾并重命名文件夾為工作空間的名稱(chēng)
cd /var/jenkins_home/workspace/
  • 解壓
unzip WB-Service.zip
  • 停止正在構(gòu)建的項(xiàng)目 刪除原工作目錄
rm -rf WB-Service
  • 將解壓出來(lái)的項(xiàng)目名稱(chēng)變更為空間名稱(chēng),就是你在新建jenkins任務(wù)的時(shí)候?qū)懙哪莻€(gè)
mv wb-spring-boot-project WB-Service
  • 進(jìn)入jenkins首頁(yè),點(diǎn)擊工作空間你就可以看到你的項(xiàng)目了


    pro.png
  • 這時(shí)候再次點(diǎn)擊立即構(gòu)建,jenkins把本地工作空間的內(nèi)容和github的一對(duì)比就好了,因?yàn)榛緵](méi)有改動(dòng)。直接進(jìn)入下一步。

  • 立即構(gòu)建

cccc.png
  • 從項(xiàng)目中提交一個(gè)改動(dòng)。這邊就自動(dòng)觸發(fā)編譯并且部署了。


    push1.png
push2.png

至此 自動(dòng)部署完成~ 來(lái)自一個(gè)入行一個(gè)月的java開(kāi)發(fā)猿... 大佬多多指教。

打個(gè)廣告 ~ 移動(dòng)端離線(xiàn)鑒黃實(shí)現(xiàn),可移植到多個(gè)平臺(tái),讓鑒黃付費(fèi)不存在~ open_nsfw

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容