前置准备:jenkins所在宿主服务器首先安装好jdk、maven
一、创建jenkins (使用docker-compose)
services:
jenkins:
image: jenkins/jenkins:latest
container_name: jenkins
user: root
volumes:
# 挂载工作目录
- /mnt/jenkins-data:/var/jenkins_home
- /usr/local/m2repository:/usr/local/m2repository
# java 路径
- /usr/local/java/jdk1.8.0_231:/usr/local/java/jdk1.8.0_231
# mvn 路径
- /usr/local/apache-maven-3.6.2:/usr/local/apache-maven-3.6.2
- /usr/bin/docker:/usr/bin/docker
- /usr/bin/docker-compose:/usr/bin/docker-compose
- /var/run/docker.sock:/var/run/docker.sock
networks:
- jenkins
ports:
- 9090:8080
- 50000:50000
restart: always
environment:
- JAVA_OPTS=-Duser.timezone=Asia/Shanghai
networks:
jenkins:
容器运行之后根据提示操作。
二、安装插件Maven Integration,
2.1 配置JDK和Maven: 点击:系统管理 -> 全局工具配置 -> 找到JDK和Maven
2.2 配置环境变量:系统管理 -> 系统配置 -> 全局属性(勾选环境变量)
三、创建流水线
def remote = [:]
remote.name = 'neo4j'
remote.host = 'ip地址'
remote.user = 'root'
remote.password = '密码'
remote.allowAnyHosts = true
pipeline {
environment {
// 定义你的阿里云镜像仓库信息
REGISTRYURL = '阿里云镜像仓库信息'
//命名空间
REPOSITORYNAME = '命名空间'
}
agent any
tools {
maven 'maven' ////工具名称必须在Jenkins 全局工具配置中预配置。
jdk 'jdk1.8'
}
stages {
stage('git clone') {
steps {
// 从git仓库拉取代码
git branch: 'master-jdsz', credentialsId: '2653be50-4100-4ef6-8d49-f091612ac091', url: 'git地址'
script {
//获取git版本
build_tag = sh(returnStdout: true, script: 'git rev-parse --short HEAD').trim()
//Groovy中使用变量时应该使用双引号
echo "${build_tag}"
}
}
}
stage('mvn打包') {
steps {
sh 'whereis java'
sh 'java -version'
sh 'mvn -v'
sh 'mvn -Dmaven.test.failure.ignore=true clean package'
sh 'ls'
}
}
stage('docker Build'){
steps {
sh "docker build -t ${REGISTRYURL}/${REPOSITORYNAME}/end-safety-monitor:${build_tag} ."
}
}
stage('docker login and push'){
steps {
withCredentials([usernamePassword(credentialsId: '367233f7-e1ca-4eaa-837f-37ad1ea20700', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) {
sh "echo ${PASSWORD} | docker login $registryUrl -u ${USERNAME} --password-stdin"
sh "docker push ${REGISTRYURL}/${REPOSITORYNAME}/end-safety-monitor:${build_tag}"
}
}
}
stage('删除旧镜像并重启容器') {
steps {
script() {
sshCommand remote: remote, command: "docker rm -f 容器名"
// 使用'{print $3}' 需要使用“\” 来转义
sshCommand remote: remote, command: 'docker rmi $(docker images | grep end-safety-monitor | awk \'{print $3}\')'
sshCommand remote: remote, command: "docker run -d -p 17008:17008 --name end-safety-monitor ${REGISTRYURL}/${REPOSITORYNAME}/end-safety-monitor:${build_tag}"
}
}
}
}
}