使用Jenkins+docker打包部署后端服務(wù)的實(shí)現(xiàn)
老板給了兩臺(tái)服務(wù)器,一臺(tái)windows用來(lái)打包,一臺(tái)linux用于構(gòu)建鏡像 + 部署,于是有了這篇筆記
安裝Jenkins
下載地址:https://www.jenkins.io/download/
找到對(duì)應(yīng)版本下載安裝就行,裝好之后在瀏覽器輸入localhost:port(port是你安裝時(shí)設(shè)置的端口),看到如下頁(yè)面:
就說(shuō)明裝好了,然后用安裝的時(shí)候設(shè)置好的賬號(hào)密碼登錄
配置
1、配置工具
進(jìn)入頁(yè)面后首先是添加maven的配置文件:
maven配置文件
然后配置工具:
jdk
git
maven
配置好之后應(yīng)用保存
2、配置Publish over SSH
這一步是為了把文件推送到遠(yuǎn)程服務(wù)器,不需要的可以跳過(guò)
首先去插件商店安裝publish over ssh
進(jìn)入之后搜索publish over ssh
,然后安裝
安裝完成后進(jìn)入系統(tǒng)配置,拉到最下面,就可以看到publish over ssh的配置了
配置完之后同樣應(yīng)用保存
創(chuàng)建流水線打包
配置自動(dòng)觸發(fā)的條件,不勾就是手動(dòng)觸發(fā)咯
然后就是最重要的流水線語(yǔ)法了
可以點(diǎn)擊這里幫助生成
下拉框那里,如果是linux命令選擇sh:xxx
window命令選擇bat:xxx
git命令選擇git:xxx
publishSSH選擇SSH Publishers:XXX
以下是我流水線示例:
pipeline { agent any stages { stage('拉取代碼') { steps { checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: 'xxx', url: 'http://XXX.git']]]) echo '拉取代碼成功' } } stage('編譯構(gòu)建') { steps { //輸出當(dāng)前jenkins的工作目錄 echo "${env.WORKSPACE}" //僅打包file-service模塊 bat 'mvn clean package -pl file-service -am' echo '編譯成功' } } stage('推送jar包') { steps { sshPublisher(publishers: [sshPublisherDesc( configName: 'ssh253', transfers: [sshTransfer( cleanRemote: false, excludes: '', execCommand: '''cd local/file ./start.sh''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: 'file', remoteDirectorySDF: false, removePrefix: 'file-service\\target\\', sourceFiles: 'file-service\\target\\file-service-1.0-SNAPSHOT.jar' )], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false )]) } } } }
1、stage表示流水線每一步的名字,執(zhí)行之后是這個(gè)樣子:
2、拉取代碼
credentialsId:你配置的憑證id
配置憑證
查看憑證
url:你的git項(xiàng)目地址
3、編譯構(gòu)建
使用maven進(jìn)行打包的命令而已
4、推送jar包
我是用流水線語(yǔ)法生成器生成的
Source files: 要發(fā)送的源文件位置,表示當(dāng)前工作空間下的file-service\target\file-service-1.0-SNAPSHOT.jar包,\是windows上的路徑寫法,如果要發(fā)送整個(gè)文件,則使用/* *
Remove prefix: 去除的前綴,表示只要文件不要目錄,如果不去除,那么文件復(fù)制到服務(wù)器上后會(huì)生成file-service\target\目錄
Remote directory: 遠(yuǎn)程機(jī)的路徑,這個(gè)路徑是以系統(tǒng)配置publish over ssh的Remote directory為當(dāng)前文件夾的相對(duì)路徑,開(kāi)頭不寫/
Exec command文件推送完之后的命令
以上,流水線就做好了,點(diǎn)擊“build Now”就可以打包并且推送到服務(wù)器對(duì)應(yīng)位置上了
構(gòu)建鏡像
現(xiàn)在jar包已經(jīng)有了,并且到了它該在的位置,需要來(lái)構(gòu)建鏡像并啟動(dòng)
安裝docker
使用命令:curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
或者:curl -sSL https://get.daocloud.io/docker | sh
編寫dockerfile
docker需要使用dockerfile來(lái)構(gòu)建鏡像,先新建一個(gè)dockerfile文件
#jdk基礎(chǔ)鏡像 FROM anapsix/alpine-java:8_server-jre_unlimited #作者 MAINTAINER CarinaYang #執(zhí)行命令,主要用來(lái)安裝相關(guān)的軟件 #RUN #添加文件 ADD admin-service-1.0-SNAPSHOT.jar /usr/local #使用外面的配置文件 ADD admin-service.yml /usr/local #掛載目錄到容器 #VOLUME ["/data"] #開(kāi)放端口 EXPOSE 9000 #啟動(dòng)時(shí)執(zhí)行的命令 CMD ["/bin/bash"] ENV JAVA_OPTS="\ -Xms2048m -Xmx2048m -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M" #啟動(dòng)時(shí)執(zhí)行的命令 ENTRYPOINT java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar -Dspring.config.location=/usr/local/admin-service.yml /usr/local/admin-service-1.0-SNAPSHOT.jar
構(gòu)建鏡像
這里我是直接使用腳本來(lái)寫的,創(chuàng)建腳本start.sh
#!/bin/bash # 定義應(yīng)用組名 group_name='springcloud' # 定義應(yīng)用名稱 app_name='admin-service' # 定義應(yīng)用版本 app_version='1.0-SNAPSHOT' echo '----停止消息服務(wù) ----' docker stop ${app_name} echo '----刪除實(shí)例----' docker rm ${app_name} echo '----刪除舊鏡像----' docker rmi ${group_name}/${app_name}:${app_version} echo '----打包鏡像----' # 打包編譯docker鏡像 docker build -t ${group_name}/${app_name}:${app_version} . echo '----啟動(dòng)鏡像----' docker run -itd -p 9000:9000 --restart=always --name ${app_name} ${group_name}/${app_name}:${app_version} echo '----啟動(dòng)完成----'
docker run 里面的 --restart=always是為了開(kāi)機(jī)自啟動(dòng)設(shè)置的,因?yàn)榉?wù)器每天晚上要關(guān)機(jī),不需要可以不寫
因?yàn)闆](méi)有部署鏡像倉(cāng)庫(kù)就直接啟動(dòng)鏡像了,如果有的話要推到鏡像倉(cāng)庫(kù)上去
啟動(dòng)腳本
./start.sh
當(dāng)然,可以直接加到j(luò)enkins流水線“推送jar包”步驟的execCommand中,這樣Jenkins推送jar包過(guò)來(lái)后就會(huì)自動(dòng)啟動(dòng)腳本了
到此這篇關(guān)于使用Jenkins+docker打包部署后端服務(wù)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Jenkins docker打包部署內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 利用docker-compsoe部署前后端分離的項(xiàng)目方法
- Docker部署前后端分離項(xiàng)目的實(shí)現(xiàn)示例
- docker-compose+nginx部署前后端分離的項(xiàng)目實(shí)踐
- Docker+Nginx打包部署前后端分離步驟實(shí)現(xiàn)
- 教你使用Docker?Compose一鍵部署前后端分離項(xiàng)目
- 使用Docker部署前后端分離項(xiàng)目的完整步驟
- 手把手帶大家通過(guò)Docker部署前后端分離項(xiàng)目(親測(cè)可用)
- Docker部署前后端分離項(xiàng)目的三種方式小結(jié)
- 用docker一鍵部署前后端分離項(xiàng)目的詳細(xì)流程
- Docker部署后端項(xiàng)目的實(shí)現(xiàn)步驟
相關(guān)文章
解決docker加載新的鏡像后repository和tag名稱都為none的問(wèn)題
這篇文章主要介紹了解決docker加載新的鏡像后repository和tag名稱都為none的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11Docker 部署單機(jī)版 Pulsar 和集群架構(gòu) Redis(開(kāi)發(fā)神器)的方法
這篇文章主要介紹了Docker 部署單機(jī)版 Pulsar 和集群架構(gòu) Redis(開(kāi)發(fā)神器)的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10docker啟動(dòng)mysql并映射數(shù)據(jù)目錄(含備份腳本)
本文主要介紹了docker啟動(dòng)mysql并映射數(shù)據(jù)目錄(含備份腳本),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-01-01Linux系統(tǒng)通過(guò)Docker安裝SQL?Server數(shù)據(jù)庫(kù)
這篇文章介紹了Linux系統(tǒng)通過(guò)Docker安裝SQL?Server數(shù)據(jù)庫(kù)的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-03-03Windows使用docker打開(kāi)新窗口error解決辦法
這篇文章主要介紹了Windows使用docker打開(kāi)新窗口error解決辦法,十分簡(jiǎn)單,需要的朋友可以參考下。2017-09-09