目錄
- 安裝Jenkins
- 配置
- 1、配置工具
- 2、配置Publish over SSH
- 3、編譯構(gòu)建
- 4、推送jar包
- 構(gòu)建鏡像
老板給了兩臺服務(wù)器,一臺windows用來打包,一臺linux用于構(gòu)建鏡像 + 部署,于是有了這篇筆記
安裝Jenkins
下載地址:https://www.jenkins.io/download/
找到對應(yīng)版本下載安裝就行,裝好之后在瀏覽器輸入localhost:port(port是你安裝時設(shè)置的端口),看到如下頁面:

就說明裝好了,然后用安裝的時候設(shè)置好的賬號密碼登錄
配置
1、配置工具


進入頁面后首先是添加maven的配置文件:
maven配置文件

然后配置工具:
jdk

git

maven

配置好之后應(yīng)用保存
2、配置Publish over SSH
這一步是為了把文件推送到遠程服務(wù)器,不需要的可以跳過
首先去插件商店安裝publish over ssh

進入之后搜索publish over ssh,然后安裝
安裝完成后進入系統(tǒng)配置,拉到最下面,就可以看到publish over ssh的配置了



配置完之后同樣應(yīng)用保存
創(chuàng)建流水線打包


配置自動觸發(fā)的條件,不勾就是手動觸發(fā)咯

然后就是最重要的流水線語法了

可以點擊這里幫助生成


下拉框那里,如果是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í)行之后是這個樣子:

2、拉取代碼
credentialsId:你配置的憑證id
配置憑證





查看憑證

url:你的git項目地址
3、編譯構(gòu)建
使用maven進行打包的命令而已
4、推送jar包
我是用流水線語法生成器生成的

Source files: 要發(fā)送的源文件位置,表示當(dāng)前工作空間下的file-service\target\file-service-1.0-SNAPSHOT.jar包,\是windows上的路徑寫法,如果要發(fā)送整個文件,則使用/* *
Remove prefix: 去除的前綴,表示只要文件不要目錄,如果不去除,那么文件復(fù)制到服務(wù)器上后會生成file-service\target\目錄
Remote directory: 遠程機的路徑,這個路徑是以系統(tǒng)配置publish over ssh的Remote directory為當(dāng)前文件夾的相對路徑,開頭不寫/
Exec command文件推送完之后的命令
以上,流水線就做好了,點擊“build Now”就可以打包并且推送到服務(wù)器對應(yīng)位置上了
構(gòu)建鏡像
現(xiàn)在jar包已經(jīng)有了,并且到了它該在的位置,需要來構(gòu)建鏡像并啟動
安裝docker
使用命令:curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
或者:curl -sSL https://get.daocloud.io/docker | sh
編寫dockerfile
docker需要使用dockerfile來構(gòu)建鏡像,先新建一個dockerfile文件
#jdk基礎(chǔ)鏡像
FROM anapsix/alpine-java:8_server-jre_unlimited
#作者
MAINTAINER CarinaYang
#執(zhí)行命令,主要用來安裝相關(guān)的軟件
#RUN
#添加文件
ADD admin-service-1.0-SNAPSHOT.jar /usr/local
#使用外面的配置文件
ADD admin-service.yml /usr/local
#掛載目錄到容器
#VOLUME ["/data"]
#開放端口
EXPOSE 9000
#啟動時執(zhí)行的命令
CMD ["/bin/bash"]
ENV JAVA_OPTS="\
-Xms2048m -Xmx2048m -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M"
#啟動時執(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)建鏡像
這里我是直接使用腳本來寫的,創(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 '----刪除實例----'
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 '----啟動鏡像----'
docker run -itd -p 9000:9000 --restart=always --name ${app_name} ${group_name}/${app_name}:${app_version}
echo '----啟動完成----'
docker run 里面的 –restart=always是為了開機自啟動設(shè)置的,因為服務(wù)器每天晚上要關(guān)機,不需要可以不寫
因為沒有部署鏡像倉庫就直接啟動鏡像了,如果有的話要推到鏡像倉庫上去
啟動腳本
./start.sh
當(dāng)然,可以直接加到j(luò)enkins流水線“推送jar包”步驟的execCommand中,這樣Jenkins推送jar包過來后就會自動啟動腳本了






