使用Jenkins發佈項目已經4年多,作過屢次改進,儘可能減小Jenkins的配置和發佈腳本的書寫。從最初的構建一個自由風格的軟件項目
到流水線項目
到如今的流水線+docker
,流水線可讓項目發佈流程更加清晰,docker
能夠大大減小Jenkins
配置。java
下面帶你們使用最簡單,最快速的方式使用Jenkins,無需配置git、maven、jdk、node等環境,一切用docker搞定,只須要寫腳本,其餘無需配置node
此教程僅爲進階教程,具體的jenkins安裝,git憑據配置,郵件發送等須要自行查找教程進行配置。git
yum install docker-ce
web
不少廠商都提供docker加速服務,好比阿里雲,騰訊雲 詳情請自行百度。不配置國內加速器,下載鏡像可能很緩慢。
spring
docker pull jenkins/jenkins,切勿docker pull jenkins已經廢棄
docker
Jenkins docker hub地址centos
docker run -u root -itd --name jenkins -p 6001:8080 -v $(which docker):/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock -e TZ="Asia/Shanghai" -v /etc/localtime:/etc/localtime:ro -v /volume1/docker/jenkins:/var/jenkins_home jenkins/jenkins
複製代碼
-p 6001:8080
Jenkins默認網頁訪問端口爲8080,將端口映射到外部主機api
-v $(which docker):/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock
使Jenkins內部可使用docker命令bash
-e TZ="Asia/Shanghai" -v /etc/localtime:/etc/localtime:ro
配置Jenkins容器的時區服務器
-v /volume1/docker/jenkins:/var/jenkins_home
將Jenkins的配置映射到外部主機卷,容器刪除仍可保留配置
docker exec -it jenkins bash
docker info
可能須要安裝libltdl7,若是須要執行如下命令
apt-get update
apt-get install -y libltdl7
http://主機IP:6001
可訪問Jenkins網頁端,其餘流程忽略,所有默認就能夠。
無需配置git、maven、jdk、node等環境,咱們使用docker解決
Using Docker with Pipeline,官方文檔
import java.text.SimpleDateFormat
node {
try {
//名字這麼寫是爲了能夠發佈到騰訊docker倉庫,可隨意更改
def dockerId='tengxun'
def dockerUrl='ccr.ccs.tencentyun.com'
def dockerNamespace='esms'
def dockerName='esms-api'
def env='test'
def dateFormat = new SimpleDateFormat("yyyyMMddHHmm")
def dockerTag = dateFormat.format(new Date())
stage('git pull'){
sh 'pwd'
git credentialsId: '此處填寫git憑證,須要在Jenkins憑據中配置', url: '此處填寫git地址'
}
stage('mvn install') {
sh 'pwd'
docker.image('maven:3.6.0-jdk-8-alpine').inside('-v /volume1/docker/.m2:/root/.m2') {
sh 'mvn --version'
sh 'mvn clean install'
}
}
stage('docker run') {
dir("esms-main") {
sh 'pwd'
def imageUrl = "${dockerUrl}/${dockerNamespace}/${dockerName}:${dockerTag}"
def customImage = docker.build(imageUrl)
sh "docker rm -f ${dockerName} | true"
//--network esms-net配置網絡信息,須要先docker network create esms-net,用於多個服務交互,可選
customImage.run("-it -d --name ${dockerName} -p 8090:8090 --network esms-net -e SPRING_PROFILES_ACTIVE=${env}")
//only retain last 3 images,自動刪除老的容器,只保留最近3個
sh """docker rmi \$(docker images | grep ${dockerName} | sed -n '4,\$p' | awk '{print \$3}') || true"""
}
}
currentBuild.result="SUCCESS"
} catch (e) {
currentBuild.result="FAILURE"
throw e
} finally {
//此處若想發佈郵件,須要在系統管理-系統設置中配置郵件服務器
mail to: 'xxxx@qq.com',subject: "Jenkins: ${currentBuild.fullDisplayName},${currentBuild.result}",body:"${currentBuild.result}"
}
}
複製代碼
ccr.ccs.tencentyun.com/esms/esms-api
FROM openjdk:8-jdk-alpine
MAINTAINER liunewshine@qq.com
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && mkdir -p /esms
WORKDIR /esms
EXPOSE 8090
ADD ./target/esms.jar ./
CMD java -Djava.security.egd=file:/dev/./urandom -jar esms.jar
複製代碼
直接構建便可,未作git的webhook,不能聯動git push等,有需求的能夠本身加上
整體過程很簡單,主要就是安裝Jenkins->編寫pipeline腳本->編寫Dockerfile腳本。