jenkins
# 安装jenkins
这里用docker-compose安装
version: '3'
services:
jenkins:
image: 'jenkins/jenkins:lts'
container_name: jenkins
restart: always
environment:
- TZ=Asia/Shanghai
ports:
- '8929:8080'
# - '50000:50000'
volumes:
- '/etc/localtime:/etc/localtime'
- './data:/var/jenkins_home'
- './maven:/usr/local/maven'
- './node:/usr/local/node'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 安装使用的插件
默认推荐安装,安装使用的插件
- Maven Integration plugin
- NodeJS Plugin
- Publish Over SSH
- Gitee Plugin
- Git plugin
- Role-based Authorization Strategy
# 安装所需环境
# 全局工具配置
这里使用了JDK、Maven、NodeJS
# 系统配置->环境变量设置
键 | 值 |
JAVA_HOME | /opt/java/openjdk |
M2_HOME | /usr/local/maven |
NODE_HOME | /usr/local/node |
PATH+EXTRA | $M2_HOME/bin:$NODE_HOME/bin |
# 新建一个工程测试
java -version
mvn -version
node -v
1
2
3
2
3
# 设置Publish over SSH
测试Success即可
# 创建一个流水线
pipeline {
agent any
options {
//设置管道运行的超时时间,在此之后,Jenkins将中止管道
timeout(time: 20, unit: 'MINUTES')
// 失败重试次数
retry(1)
//输出时间戳
timestamps()
}
environment {
//构建分支 master、test
// Brand='test'
//定义Maven编译环境 dev/test/prod
ACTIVE = "dev"
//jar备份目录
JAR_BAK= "/var/jenkins_home/code/backup"
PROJECT_DIR = "rich-chat"
//jar包名称
JAR_NAME = 'rich-chat.jar'
//JOB所在根目录,JOB_NAME
WORKSPACE_PATH = "/var/jenkins_home/code/rich/rich-chat"
}
stages {
stage('Get Code'){
steps{
dir("${WORKSPACE_PATH}") {
echo "拉取代码......"
git credentialsId: 'b0f840cf-4f01-4a8e-b6c9-d044346fdefd', url: 'https://gitee.com/rich-tm/rich-chat.git'
}
}
}
stage('Build Package') {
steps {
dir("${WORKSPACE_PATH}") {
echo "开始执行打包操作......."
//利用maven对项目进行build
echo "${JAVA_HOME}"
sh "java -version"
sh "mvn -version"
sh "node -v"
sh "mvn -U -Dmaven.test.skip=true clean package"
}
}
}
stage('Run Deploy') {
steps {
dir("${WORKSPACE_PATH}") {
echo "开始执行Deploy操作......."
sshPublisher(publishers: [sshPublisherDesc(configName: '176.1.14.23', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''cd /home/app
sh rich-chat.sh''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/home/app', remoteDirectorySDF: false, removePrefix: 'target/', sourceFiles: 'target/rich-chat.jar')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
}
}
}
}
post {
success {
echo "'${env.JOB_NAME} [${env.BUILD_NUMBER}]' 构建成功"
}
failure {
echo "'${env.JOB_NAME} [${env.BUILD_NUMBER}]' 构建失败"
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# 远程启动脚本
#!/bin/bash
ps -ef |grep rich-chat.jar | grep -v grep |awk '{print $2}'|xargs kill -9
echo "进程终止成功"
sleep 2
echo '开始启动此程序...'
# 启动jar包,指向日志文件,2>&1 & 表示打开或指向同一个日志文件
nohup java -jar rich-chat.jar > logs/rich-chat.log 2>&1 &
echo 'richChat 启动成功...'
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# Pipeline Demo
pipeline {
agent any
options {
//设置管道运行的超时时间,在此之后,Jenkins将中止管道
timeout(time: 20, unit: 'MINUTES')
// 失败重试次数
retry(1)
//输出时间戳
timestamps()
}
environment {
//构建分支 master、test
// Brand='test'
//定义Maven编译环境 dev/test/prod
ACTIVE = "dev"
//jar备份目录
JAR_BAK= "/var/jenkins_home/code/backup"
PROJECT_DIR = "lucky-app"
//jar包名称
JAR_NAME = 'lucky-app.jar'
//JOB所在根目录,JOB_NAME
WORKSPACE_PATH = "/var/jenkins_home/code/edu/04-Development/0402-Source/trunk/edu-admin/"
}
stages {
stage('Get Code'){
steps{
dir("${WORKSPACE_PATH}") {
echo "拉取代码......"
sh 'git pull'
}
}
}
stage('Build Package') {
steps {
dir("${WORKSPACE_PATH}") {
echo "开始执行打包操作......."
//利用maven对项目进行build
sh "mvn -U -Dmaven.test.skip=true clean package"
sh "mv ${PROJECT_DIR}/target/*.jar ${PROJECT_DIR}/target/${JAR_NAME}"
}
}
}
stage('Backup Jar'){
steps{
dir("${WORKSPACE_PATH}") {
sh '''
if [ -f "${PROJECT_DIR}/target/${JAR_NAME}" ];then
cp -r ${PROJECT_DIR}/target/${JAR_NAME} ${JAR_BAK}/$(date +%Y%m%d.%H:%M:%S)-${JAR_NAME}
echo "jar包备份成功..."
else
echo "备份的jar包不存在!"
fi
'''
sh '''
result=`find ${JAR_BAK}/ -mtime +10 -name "*-${JAR_NAME}"`
if [ -z "$result" ]
then
echo '不存在大于10天的 jar 包'
else
rm -rf $result
fi
'''
}
}
}
stage('Run Deploy') {
steps {
dir("${WORKSPACE_PATH}") {
echo "开始执行Deploy操作......."
sshPublisher(publishers: [sshPublisherDesc(configName: 'lucky', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/home', remoteDirectorySDF: false, removePrefix: 'lucky-app/target/', sourceFiles: 'lucky-app/target/*.jar')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
}
}
}
}
post {
success {
echo "'${env.JOB_NAME} [${env.BUILD_NUMBER}]' 构建成功"
}
failure {
echo "'${env.JOB_NAME} [${env.BUILD_NUMBER}]' 构建失败"
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
更新时间: 2024/01/17, 05:48:13