首页 > 其他分享 >Docker+Jenkins+Pipline实现Vue项目input选择不同差异性config文件并修改文件内容后打包、执行sh打包压缩包、使用archiveArtifacts下载制品(jar包、压缩

Docker+Jenkins+Pipline实现Vue项目input选择不同差异性config文件并修改文件内容后打包、执行sh打包压缩包、使用archiveArtifacts下载制品(jar包、压缩

时间:2024-06-18 10:57:57浏览次数:8  
标签:文件 ruoyi sh ui 压缩包 env println 打包

场景

Docker+Jenkins+Pipline实现SpringBoot项目input选择不同差异性yml文件打包、执行sh打包压缩包、使用archiveArtifacts下载制品(jar包、压缩包):

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/139748758

DockerCompose+Jenkins+Pipeline流水线打包Vue项目(解压安装配置Node)入门:

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/139653367

上面分别讲了对Vue项目中使用Jenkins的配置以及打包SpringBoot项目时选择差异性文件打包的流程。

如果同理前端Vue项目也需要在打包时选择不同的差异性配置文件,比如每个配置文件中标题名称不一样,并且需要对配置文件

中的文本内容进行修改,比如需要修改时间戳字符串。

注:

博客:
https://blog.csdn.net/badao_liumang_qizhi

实现

1、首先在前端项目目录下新建diff差异性文件目录,并在该目录下新建各种环境下的配置文件,这里使用config目录下的config.js

然后再在前端代码根目录下新建Jenkinsfile文件。

注意前端代码在git仓库根目录下/ruoyi-ui目录下

 

差异性文件config.js的内容为

module.exports = {
    titleName: '本地测试系统',
    version: '202406181345',
};

所以这里在新建流水线项目时要注意脚本路径为代码仓库根路径下的ruoyi-ui目录下的Jenkinsfile

将脚本路径配置为

ruoyi-ui/Jenkinsfile

 

2、整体步骤是获取git提交信息并输出,然后扫描diff目录下所有差异性文件目录并作为input的选项进行选择

然后删除上次打包的dist目录,然后将上次打包的tar.gz包删掉,然后将选择的差异性文件替换到现有的差异性文件

然后使用sed命令获取当前时间戳,并对配置文件的version进行修改

然后执行npm打包命令以及tar压缩命令

最后使用archiveArtifacts实现压缩包制品下载

第一步编辑Jenkinsfile文件首先实现获取提交信息

      stage('获取提交信息') {
          steps {
              script {
                  try {
                      def gitPreviousCommit = env.GIT_PREVIOUS_COMMIT
                      println("gitPreviousCommit: ${gitPreviousCommit}")
                      def gitCommit = env.GIT_COMMIT
                      println("gitCommit: ${gitCommit}")
                      def gitBranch = env.GIT_BRANCH
                      println("gitBranch: ${gitBranch}")
                      def commit = sh(returnStdout: true, script: "git log -1 --pretty=format:'%h - %an, %ar : %s'").trim()
                      println("获取提交信息: ${commit}")
                  } catch (Exception ex) {
                      println("获取提交信息异常: ${ex}")
                  }
              }
          }
      }

然后第二步选择差异性文件实现

                 script {
                      //获取所有子目录
                      diffFile = sh([script: "cd $WORKSPACE/ruoyi-ui/diff&&ls -d *", returnStdout: true])
                      println(diffFile)
                      //选择使用哪个子目录的差异文件
                      env.DIFF = input(id: 'diff', message: '选择差异文件', parameters: [choice(name: 'diff', choices: diffFile, description: '差异文件')])
                      println(env.DIFF)
                      //要删除的dist目录的路径
                      dirToDelete = env.WORKSPACE+'/ruoyi-ui/dist'
                      // 判断目录是否存在
                      exists = sh([script: "if [ -d '${dirToDelete}' ]; then echo 'true'; else echo 'false'; fi", returnStdout: true]).trim()
                      println(exists)
                      if (exists == 'true') {
                          // 目录存在,删除目录
                          sh "rm -rf ${dirToDelete}"
                      }
                 }

此步骤具体指令解析可参考上面博客。

然后第三步通过sh命令块实现复制替换修改配置文件

                 sh '''
                     cd ${WORKSPACE}/ruoyi-ui
                     find . -type f -name "*.tar.gz" | xargs rm -f
                     cp -r ${WORKSPACE}/ruoyi-ui/diff/$DIFF/* ./public/
                     sed -i \"s/version:.*/version: \'$(date \'+%Y%m%d%H%M\')\',/\" ./public/config/config.js
                 '''

首先删除掉所有.tar.gz结尾的文件

然后将选择对应的差异新文件进行替换

然后Jenkinsfile中使用sh命令实现修改文件中的内容可通过sed命令实现,即这里的

sed -i \"s/version:.*/version: \'$(date \'+%Y%m%d%H%M\')\',/\" ./public/config/config.js

sed -i命令的使用格式

sed -i 's/原字符串/新字符串/' 文件路径

上面\使用的事转义符,因为整个是在sh命令块的引号中包裹的

然后替换完version字符串之后继续添加逗号和换行

第四步执行npm打包命令并进行tar打包压缩包

      stage('编译构建') {
          steps {
           nodejs(nodeJSInstallationName: 'node', configId: '14997e88-6fc1-42bb-b9e8-bc54fe8aff81') {
                  sh 'cd ${WORKSPACE}/ruoyi-ui && npm install && npm run build:prod'
                  sh 'cd ${WORKSPACE}/ruoyi-ui && tar zcvf ./web-dist-$DIFF-$(date \'+%Y%m%d%H%M\').tar.gz ./dist'
              }
          }
      }

最后一步使用archiveArtifacts进行成品制作下载

 post {
    always {
        echo '构建结束,结果:'
    }
  success {
            echo '构建成功'
            //制品归档
            archiveArtifacts artifacts: '*/*.gz', followSymlinks: false
        }
  failure {
            echo '构建失败'
        }
    }

完整Jenkinsfile文件

pipeline {
    agent any
 tools {
        nodejs 'node'
    }
    stages {
      stage('获取提交信息') {
          steps {
              script {
                  try {
                      def gitPreviousCommit = env.GIT_PREVIOUS_COMMIT
                      println("gitPreviousCommit: ${gitPreviousCommit}")
                      def gitCommit = env.GIT_COMMIT
                      println("gitCommit: ${gitCommit}")
                      def gitBranch = env.GIT_BRANCH
                      println("gitBranch: ${gitBranch}")
                      def commit = sh(returnStdout: true, script: "git log -1 --pretty=format:'%h - %an, %ar : %s'").trim()
                      println("获取提交信息: ${commit}")
                  } catch (Exception ex) {
                      println("获取提交信息异常: ${ex}")
                  }
              }
          }
      }
      stage('选择差异性文件') {
          steps {
                 script {
                      //获取所有子目录
                      diffFile = sh([script: "cd $WORKSPACE/ruoyi-ui/diff&&ls -d *", returnStdout: true])
                      println(diffFile)
                      //选择使用哪个子目录的差异文件
                      env.DIFF = input(id: 'diff', message: '选择差异文件', parameters: [choice(name: 'diff', choices: diffFile, description: '差异文件')])
                      println(env.DIFF)
                      //要删除的dist目录的路径
                      dirToDelete = env.WORKSPACE+'/ruoyi-ui/dist'
                      // 判断目录是否存在
                      exists = sh([script: "if [ -d '${dirToDelete}' ]; then echo 'true'; else echo 'false'; fi", returnStdout: true]).trim()
                      println(exists)
                      if (exists == 'true') {
                          // 目录存在,删除目录
                          sh "rm -rf ${dirToDelete}"
                      }
                 }
                 sh '''
                     cd ${WORKSPACE}/ruoyi-ui
                     find . -type f -name "*.tar.gz" | xargs rm -f
                     cp -r ${WORKSPACE}/ruoyi-ui/diff/$DIFF/* ./public/
                     sed -i \"s/version:.*/version: \'$(date \'+%Y%m%d%H%M\')\',/\" ./public/config/config.js
                 '''
          }
      }
      stage('编译构建') {
          steps {
           nodejs(nodeJSInstallationName: 'node', configId: '14997e88-6fc1-42bb-b9e8-bc54fe8aff81') {
                  sh 'cd ${WORKSPACE}/ruoyi-ui && npm install && npm run build:prod'
                  sh 'cd ${WORKSPACE}/ruoyi-ui && tar zcvf ./web-dist-$DIFF-$(date \'+%Y%m%d%H%M\').tar.gz ./dist'
              }
          }
      }
    }
 post {
    always {
        echo '构建结束,结果:'
    }
  success {
            echo '构建成功'
            //制品归档
            archiveArtifacts artifacts: '*/*.gz', followSymlinks: false
        }
  failure {
            echo '构建失败'
        }
    }
}

3、立即构建运行

选择差异性文件步骤日志正常

 

打包步骤日志正常

 

制品压缩包下载正常

 

 

标签:文件,ruoyi,sh,ui,压缩包,env,println,打包
From: https://www.cnblogs.com/badaoliumangqizhi/p/18253886

相关文章

  • docker镜像压缩包加载到镜像系统 docker load、将已拉取的镜像打包下载到本地docker
    当系统无法连接外网去拉取镜像的时候可以将下载好的镜像压缩包 *.tgz 、*.tar.gz 等上传至系统里、再经过docker指令加载到镜像镜像加载指令: dockerload-i 镜像压缩包名    # -i 指定要加载的镜像包#这个指令只是加载镜像文件不会启动镜像容器 ......
  • 多种总部文件下发方式比较,哪一种既相应业务效率又保证安全?
    大型企业在全国甚至全球都会设有分公司、办事处、生产工厂、研发中心等不同形式的分支机构,在日常经营中,存在多种总部文件下发的场景,如将公司战略规划与考核、规章制度、新产品信息及定价策略、业务培训指导材料、客户数据及资料、内部通知,红头文件、合同协议等。总部文件下发包......
  • Mac常用sh文件
    压缩多个文件夹到一个ZIP#!/bin/bash#定义目标目录target_dir="/Users/yuqiu/****/"output_dir="$target_dir/ZIPDIR"#获取当前日期current_date=$(date+"%Y-%m-%d")#定义压缩文件名zip_filename="XX_${current_date}.zip"#检查目标目录是否存在if[!-d......
  • HPC环境下文件流转最容易忽视的安全问题是什么?
    半导体芯片设计企业将IC设计、仿真、验证过程上云,已成为越来越广泛的共识。企业使用HPC环境能满足EDA工作负载前端仿真百万随机IO小文件,后端仿真海量顺序读写大文件的高并发访问需求,简化EDA的工作流程,降低了仿真作业的时间。  此外,HPC环境可以提供近乎无瓶颈的计算性......
  • 如何将keil5中的bin文件合并
    前言    最近有个需求,需要把单片机中的两个bin文件合并成一个bin文件,方便板子在生产烧录代码阶段可以节约烧录次数,这两个文件一般指的是BOOT+APP文件,bin文件里面没带有地址信息,但是在单片机中的烧录文件需要定位起始地址,所以就需要特别注意它们的偏移地址。因为可能会......
  • 【漏洞情报】泛微 E-Cology KtreeUploadAction 文件上传漏洞
    声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。如有侵权烦请告知,我们会立即删除并致歉。谢谢!01漏洞描述泛微OAE-CologyKtreeUploadAction存在文件上传漏洞......
  • (slam工具)1文件读取和保存
     1代码库https://github.com/Dongvdong/v1_1_slam_tool #-*-coding:utf-8-*-#condaactivatepy37gaosi#服务器#activatepy38#笔记本importosimportnumpyasnp'''#原始gnss输入四个数据名字纬度经度高度DJI_0002.JPG34.032505638888885......
  • 文件拆分脚本 && powershell移动文件脚本
    文件拆分脚本每隔两行拆分成一个新文件。importoswithopen('Main.java','r',encoding='UTF-8')asfile:file_content=file.read()file_parts=file_content.split('\n\n')foriinrange(len(file_parts)):fp=o......
  • 实验7 文件应用编程
    task4.c1#include<stdio.h>23intmain(){4intcount=0;5charch;6FILE*fp;78fp=fopen("data4.txt","r");9if(fp==NULL){10printf("failtoopenfile\n");11......
  • c++万能头文件
    一、问题出现c/C++使用首先就是要开头头文件的引用,没有写头文件的程序基本都不会成功运行得到想要的结果,因为每个程序基本都避免不了一定的输入与输出,而输入与输出却在头文件#include/#include<stdio.h>中大量的库函数扑面而来,随之产生了一个很令人头疼的问题,每一种类型的函......