0


使用Jenkins部署前端Vue项目和后端Java服务

Jenkins安装相关插件,供后续使用(Dashboard - Manage Jenkins - Plugins)

Maven Integration plugin https://plugins.jenkins.io/maven-plugin

CloudBees Docker Build and Publish pluginhttps://plugins.jenkins.io/docker-build-publishNodeJS Pluginhttps://plugins.jenkins.io/nodejs

配置内置的工具及其版本 (Dashboard - Manage Jenkins - Tools)​​​​​

比如 Maven JDK Git NodeJS Docker等

添加凭据,如SSH Private Key 用于拉取远程代码(Dashboard - Manage Jenkins - Credentials)​​​​​

一、基础版本

(1)Java项目

  1. # Build
  2. # Root POM
  3. pom.xml
  4. # Goals and options
  5. clean package -U -Dmaven.test.skip=true

Post Steps - Execute shell

  1. #!/bin/bash
  2. source /etc/profile
  3. AppHome=/app/api/
  4. AppName=api.jar
  5. LogPath=logs/sys-info.log
  6. echo "应用程序 $AppName 执行停止"
  7. PID=""
  8. query(){
  9. PID=`ps -ef | grep java | grep $AppName | grep -v grep | awk '{print $2}'`
  10. }
  11. query
  12. if [ x"$PID" != x"" ]; then
  13. kill -TERM $PID
  14. while [ x"$PID" != x"" ]
  15. do
  16. echo "应用程序 $AppName (pid:$PID) 正在停止"
  17. sleep 1
  18. query
  19. done
  20. echo "应用程序 $AppName 停止成功"
  21. else
  22. echo "应用程序 $AppName 已经停止"
  23. fi
  24. sleep 1
  25. echo "应用程序 $AppName [test] 执行启动"
  26. if [ ! -d $AppHome ]; then
  27. echo "创建目录 $AppHome"
  28. mkdir $AppHome
  29. fi
  30. if [ ! -d ${AppHome}logs ]; then
  31. echo "创建目录 ${AppHome}logs"
  32. mkdir ${AppHome}logs
  33. echo "创建文件 $AppHome$LogPath"
  34. touch $AppHome$LogPath
  35. fi
  36. mv $WORKSPACE/target/*.jar $AppHome$AppName
  37. echo "正在启动"
  38. if [ -f $AppHome$AppName ]; then
  39. BUILD_ID=KeepAlive
  40. nohup java -jar $AppHome$AppName --spring.profiles.active=prod --server.port=$port > /dev/null 2>&1 &
  41. sleep 5
  42. tail -50 $AppHome$LogPath
  43. sleep 5
  44. tail -50 $AppHome$LogPath
  45. sleep 5
  46. tail -50 $AppHome$LogPath
  47. else
  48. echo "应用程序 $AppName 启动失败:文件不存在"
  49. fi

(2)Vue项目

Post Steps - Execute shell

  1. #!/bin/bash
  2. source /etc/profile
  3. AppHome=/app/ui/
  4. echo "开始重新打包"
  5. npm install
  6. echo "清理工作区缓存"
  7. rm -rf $WORKSPACE/dist/*
  8. echo "开始打包:prod"
  9. npm run build:prod
  10. echo "删除上次复制的文件"
  11. rm -rf $AppHome
  12. if [ ! -d $AppHome ]; then
  13. echo "创建目录 $AppHome"
  14. mkdir $AppHome
  15. fi
  16. echo "开始重新复制"
  17. cp -rf $WORKSPACE/dist/* $AppHome
  18. echo "部署成功"

二、使用Docker + Pipline

Dockerfile参考上文。

(1)Java项目

流水线 Pipeline script

  1. pipeline {
  2. agent any
  3. environment {
  4. // 在 Jenkins 全局工具配置中定义的插件安装的名称
  5. MAVEN_HOME = tool 'maven3.8.7'
  6. PATH="${MAVEN_HOME}/bin:${env.PATH}"
  7. GIT_SSH_COMMAND = 'ssh -i /var/lib/jenkins/.ssh/id_rsa'
  8. }
  9. stages {
  10. stage('MAVEN Versions') {
  11. steps {
  12. echo 'MAVEN version:'
  13. sh 'mvn -v'
  14. }
  15. }
  16. stage('Clone Repository') {
  17. steps {
  18. script {
  19. // 使用指定的私钥克隆仓库并切换到分支
  20. checkout([$class: 'GitSCM', branches: [[name: 'pc']], userRemoteConfigs: [[credentialsId: 'f2564736-xxxx-xx-xx', url: 'git@xxxxxx.git']]])
  21. }
  22. }
  23. }
  24. stage('Build War') {
  25. steps {
  26. sh 'mvn clean package -U -Dmaven.test.skip=true'
  27. }
  28. }
  29. stage('Docker Build and Deploy') {
  30. steps {
  31. script {
  32. def imageName = 'api'
  33. def ctName = 'api-ct'
  34. // Stop and remove the previous container
  35. sh "docker stop ${ctName} || true"
  36. sh "docker rm ${ctName} || true"
  37. sh "docker rmi ${imageName} || true"
  38. // Build Docker image
  39. sh "docker build -f Dockerfile -t ${imageName} ."
  40. // Start a new container
  41. sh "docker run --restart always -d -p 9008:9008 -e ACTIVE_PROFILE='pc' -e SERVICE_PORT='9008' --name $ctName --ulimit nofile=1024 --network host $imageName"
  42. }
  43. }
  44. }
  45. }
  46. post {
  47. success {
  48. echo 'Deployment successful!'
  49. }
  50. failure {
  51. echo 'Deployment failed!'
  52. }
  53. }
  54. }

(2)Vue项目

流水线 Pipeline script

  1. pipeline {
  2. agent any
  3. environment {
  4. // 在 Jenkins 全局工具配置中定义的 Node.js 安装的名称
  5. NODEJS_HOME = tool 'node16.3.0'
  6. PATH="${NODEJS_HOME}/bin:${env.PATH}"
  7. GIT_SSH_COMMAND = 'ssh -i /var/lib/jenkins/.ssh/id_rsa'
  8. }
  9. stages {
  10. stage('Set npm Registry') {
  11. steps {
  12. script {
  13. sh 'npm config set registry https://registry.npmmirror.com'
  14. sh 'npm config get registry'
  15. }
  16. }
  17. }
  18. stage('Node and NPM Versions') {
  19. steps {
  20. echo 'Node version:'
  21. sh 'node -v'
  22. echo 'NPM version:'
  23. sh 'npm -v'
  24. }
  25. }
  26. stage('Clone Repository') {
  27. steps {
  28. script {
  29. // 使用指定的私钥克隆仓库并切换到 pc 分支
  30. checkout([$class: 'GitSCM', branches: [[name: 'pc']], userRemoteConfigs: [[credentialsId: 'f2564736-xx-x-xx-xxx', url: 'git@xxxxx.git']]])
  31. }
  32. }
  33. }
  34. stage('Install Dependencies') {
  35. steps {
  36. sh 'npm install --verbose --legacy-peer-deps'
  37. }
  38. }
  39. stage('Build') {
  40. steps {
  41. sh 'npm run build:hylt-pc'
  42. }
  43. }
  44. stage('Docker Build and Deploy') {
  45. steps {
  46. script {
  47. def imageName = 'ui'
  48. def ctName = 'ui-ct'
  49. // Stop and remove the previous container
  50. sh "docker stop ${ctName} || true"
  51. sh "docker rm ${ctName} || true"
  52. sh "docker rmi ${imageName} || true"
  53. // Build Docker image
  54. sh "docker build -f Dockerfile -t ${imageName} ."
  55. // Start a new container
  56. sh "docker run --restart always -d -p 1908:1908 --name ${ctName} --network host ${imageName}"
  57. }
  58. }
  59. }
  60. }
  61. post {
  62. success {
  63. echo 'Deployment successful!'
  64. }
  65. failure {
  66. echo 'Deployment failed!'
  67. }
  68. }
  69. }

注意此处使用的jenkins内置的nodejs和npm,Vue项目在部署过程中使用到了项目根目录下的Dockerfile和nginx.conf两个文件

标签: 前端 jenkins vue.js

本文转载自: https://blog.csdn.net/NB_Token/article/details/136352565
版权归原作者 星三火 所有, 如有侵权,请联系我们删除。

“使用Jenkins部署前端Vue项目和后端Java服务”的评论:

还没有评论