准备一个简单的 Spring Boot 项目
是不是 Spring Boot 项目无所谓,只要是使用 Maven 的项目都可以完全按照来,其它项目除了编译都几乎一样
https://github.com/belier-cn/spring-boot-docker.git
Jenkins 安装
使用 Docker Compose 运行 Jenkins
不用安装默认推荐插件,太多了,没有必要
Jenkins 汉化和加速插件下载
Jenkins 安装所需插件
- Pipeline
Pipeline 介绍 - Blue Ocean
Blue Ocean 介绍 - Git Plugin
Git Plugin Github 地址 - SSH Pipeline Steps
SSH Pipeline Steps Github 地址
创建 Pipeline 项目
编写 Pipeline 脚本
pipeline {
agent none
// 定义环境变量
environment {
// 根据 id 获取配置在 Jenkins 中的凭证 参考文档:https://jenkins.io/zh/doc/book/pipeline/jenkinsfile/#%E5%A4%84%E7%90%86%E5%87%AD%E6%8D%AE
DOCKER_REGISTRY = credentials('aliyun-docker-registry')
REGISTRY_URL = 'registry.cn-shanghai.aliyuncs.com'
IMAGE_NAME = 'registry.cn-shanghai.aliyuncs.com/belier/test'
CONTAINER_NAME = 'test'
REMOTE_HOST = '192.168.56.11'
GIT_URL = 'https://github.com/belier-cn/spring-boot-docker.git'
}
stages {
stage('Checkout') {
agent any
steps {
// 拉取代码,参考文档:https://jenkins.io/doc/pipeline/steps/workflow-scm-step/
checkout([$class: 'GitSCM', branches: [[name: '*/master']], userRemoteConfigs: [[url: GIT_URL]]])
}
}
stage('Build Jar') {
agent {
// 参考文档:https://jenkins.io/zh/doc/book/pipeline/docker/
docker {
image 'maven:3-alpine'
// 挂载目录,如果要配置 maven 的阿里云仓库地址,在 /usr/local/src/maven 下放一个配置好的 settings.xml 文件即可
args '-v /usr/local/src/maven:/root/.m2'
}
}
steps {
// 打包
sh 'mvn clean -Dmaven.test.skip=true package'
}
}
stage('Build Image') {
agent any
steps {
// 构建镜像
sh "docker build -t ${IMAGE_NAME} ."
}
}
stage('Push Image') {
agent any
steps {
// 登陆到阿里云镜像仓库
sh "docker login -u=${DOCKER_REGISTRY_USR} -p=${DOCKER_REGISTRY_PSW} ${REGISTRY_URL}"
// 推送镜像到阿里云镜像仓库
sh "docker push ${IMAGE_NAME}"
}
}
stage('Deploy') {
agent any
steps {
script {
// 登陆远程服务器,拉取镜像并运行,参考文档:https://github.com/jenkinsci/ssh-steps-plugin#withcredentials
def remote = [:]
remote.name = "centos7-11"
remote.host = REMOTE_HOST
remote.allowAnyHosts = true
withCredentials([sshUserPrivateKey(credentialsId: REMOTE_HOST, keyFileVariable: 'identity', passphraseVariable: '', usernameVariable: 'userName')]) {
remote.user = userName
remote.identityFile = identity
// 登陆到阿里云镜像仓库
sshCommand remote: remote, command: "docker login -u=${DOCKER_REGISTRY_USR} -p=${DOCKER_REGISTRY_PSW} ${REGISTRY_URL}"
try {
// 删除已经存在的容器
sshCommand remote: remote, command: "docker rm -f ${CONTAINER_NAME}"
} catch (e) {
echo '容器不存在'
}
// 运行容器
sshCommand remote: remote, command: "docker run --name ${CONTAINER_NAME} -p 8080:8080 -d ${IMAGE_NAME}"
}
}
}
}
}
}
集成 Sonarqube
参考:Maven 项目 Jenkins Pipeline 使用 SonarQube
写的不好,仅供参考