目录

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

# 安装使用的插件

默认推荐安装,安装使用的插件

  • Maven Integration plugin
  • NodeJS Plugin
  • Publish Over SSH
  • Gitee Plugin
  • Git plugin
  • Role-based Authorization Strategy

# 安装所需环境

# 全局工具配置

这里使用了JDK、Maven、NodeJS

image-20211227092546261

image-20211227093428847

image-20211227093451916

# 系统配置->环境变量设置

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

# 设置Publish over SSH

image-20211227104516689

测试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

# 远程启动脚本

#!/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

# 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
更新时间: 2024/01/17, 05:48:13
最近更新
01
JVM调优
12-10
02
Arthas
12-10
03
centos
12-10
更多文章>