jenkins流水线实现xjar加固

这篇具有很好参考价值的文章主要介绍了jenkins流水线实现xjar加固。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

jenkins流水线实现xjar加固

xjar的定义
Spring Boot JAR 安全加密运行工具,同时支持的原生JAR。
基于对JAR包内资源的加密以及拓展ClassLoader来构建的一套程序加密启动,动态解密运行的方案,避免源码泄露或反编译
功能特性
无需侵入代码,只需要把编译好的JAR包通过工具加密即可。
完全内存解密,杜绝源码以及字节码泄露或反编译。
支持所有JDK内置加解密算法。
可选择需要加解密的字节码或其他资源文件,避免计算资源浪费。xxxxxxxxxx 功能特性无需侵入代码,只需要把编译好的JAR包通过工具加密即可。完全内存解密,杜绝源码以及字节码泄露或反编译。支持所有JDK内置加解密算法。可选择需要加解密的字节码或其他资源文件,避免计算资源浪费。

xjar使用

https://github.com/core-lib/xjar-maven-plugin

jenkins流水线实现xjar加固,自动化运维专栏,CICD-jenkins技术专栏,jenkins,servlet,运维

修改项目中的pom.xml,一般都是开发改
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.3.5.RELEASE</version>
                <configuration>
                    <finalName>${project.name}</finalName>
                </configuration>
            </plugin>
            <!-- 打包时跳过test插件,不运行test测试用例 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>${maven-surefire-plugin.version}</version>
                <configuration>
                    <skipTests>true</skipTests>
                </configuration>
            </plugin>
        </plugins>
    </build>

jenkins流水线实现xjar加固,自动化运维专栏,CICD-jenkins技术专栏,jenkins,servlet,运维

jenkins流水线配置

jenkins流水线实现xjar加固,自动化运维专栏,CICD-jenkins技术专栏,jenkins,servlet,运维

pipeline {   
    agent any    
    stages {
        stage('拉取代码') {
            steps { 
                checkout([
                    $class: 'GitSCM',
                    branches: [[name: '*/yangyu']],
                    gitTool: 'Default',
                    userRemoteConfigs: [[credentialsId: '6', url: 'xxx']]
                ])
            }
        }

        stage('发布系统审核') {
            steps {
                script {
            		hook = registerWebhook(authToken: 'xxx')
            		webhookId = hook.url.substring(hook.url.lastIndexOf('/') + 1)
                		
                    dingtalk (
                        robot: 'xxx',
                        type: 'ACTION_CARD',
                        title: '确认发布',
                        text: [
                            '**是否更新安装包**',
                            '',
                            '---',
                            "- 任务名称:${JOB_NAME}",
                            "- 构建ID:[#${env.BUILD_NUMBER}](${env.BUILD_URL})",
                            "- 构建人:${env.USER}",
                            "- 持续时长:${currentBuild.durationString}",
                            "- 测试状态:<font color='${env.color == 'true' ? '#00CD00' : '#EE0000'}'>${env.SUB_JOB_STATUS}</font>",
                            "- 测试结果:[查看详情](${env.SUB_JOB_URL})"                            
                        ],
                        btns: [
                            [
                                title: '确认',
                                actionUrl: "http://xxxx:8769/jenkins/webhook?url=${webhookId}&type=confirm&jobName=${JOB_NAME}&buildNumber=${env.BUILD_NUMBER}"
                            ],
                            [
                                title: '取消',
                                actionUrl: "http://xxxxx:8769/jenkins/webhook?url=${webhookId}&type=cancel&jobName=${JOB_NAME}&buildNumber=${env.BUILD_NUMBER}"
                            ]
                        ]
                    )
                    
                    // 30秒没有确认 取消任务
                    timeout(time: 300, unit: 'SECONDS') {
                        data = waitForWebhook hook
                        // 解析 JSON 字符串
                        def json = new groovy.json.JsonSlurperClassic().parseText(data)
                        def type = json.type
                        // 判断 type 的值
                        if (type == 'cancel') {
                            currentBuild.result = 'ABORTED'
                            error('任务被取消')
                        }
                    }
                }
            }
        } 

        stage('Promote to test') {
            
            steps {
                timeout(time: 5, unit: 'MINUTES') {
                    
                    script { 
                        sh 'mvn clean package "-Dxjar.password=123456" "-Dmaven.test.skip=true" -D profiles.active=dev'
                    } 
                        
                    script {
                        def commonTransferConfig = [
                            cleanRemote: false,
                            excludes: '',
                            execCommand: 'source /etc/profile && bash /mydata/docker-up.sh ',                            
                            execTimeout: 120000,
                            flatten: false,
                            makeEmptyDirs: false,
                            noDefaultExcludes: false,
                            patternSeparator: '[, ]+',
                            remoteDirectory: '/mydata/targz',
                            remoteDirectorySDF: false,
                            removePrefix: 'target/',
                            usePty: true
                        ]
                        
                        sshPublisher(
                            publishers: [sshPublisherDesc(
                                configName: 'centos-192.168.31.254',
                                transfers: [
                                    commonTransferConfig + [sourceFiles: 'target/hik-dev-xjar.jar'],
                                    commonTransferConfig + [sourceFiles: 'target/xjar_agentable.go'],
                                    commonTransferConfig + [sourceFiles: 'target/xjar.go']
                                ]
                            )]
                        )
                    }
                }
            }      
        }
    }
}

jenkins流水线实现xjar加固,自动化运维专栏,CICD-jenkins技术专栏,jenkins,servlet,运维

查看jenkins工作目录

mvn clean package "-Dxjar.password=123456" "-Dmaven.test.skip=true" -D profiles.active=dev   #执行构建会生成这个

jenkins流水线实现xjar加固,自动化运维专栏,CICD-jenkins技术专栏,jenkins,servlet,运维

远端服务器配置–☞需要授权的服务器

获取授权服务器信息

#!/bin/bash

# 获取IP地址列表
ip_addresses=$(hostname -I)

# 获取MAC地址列表并转换为大写
mac_addresses=$(ifconfig | grep -o -E '([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}' | tr '[:lower:]' '[:upper:]' | tr '\n' ',' | sed 's/,$//')

# 获取CPU序列号
cpu_serial=$(sudo dmidecode -t processor | grep "ID" | awk -F': ' '{print $2}' | tr -d ' ')

# 获取主板序列号
mainboard_serial=$(dmidecode | grep 'Serial Number' | awk -F ':' '{print $2}' | head -n 1 )

# 输出结果
echo "IP地址:[$ip_addresses]"
echo "MAC地址:[$mac_addresses]"
echo "CPU序列号:$cpu_serial"
echo "主板序列号:$mainboard_serial"

jenkins流水线实现xjar加固,自动化运维专栏,CICD-jenkins技术专栏,jenkins,servlet,运维

执行脚本

脚本内容,
1.判断镜像是否存在
2.把xjar.go解压,需要有go环境
3.制作镜像,然后把镜像制作成tar包
4…省略,有需要这个脚本大家可以自行更改

#!/bin/bash
# 1. 判断是否存在 hik-dev:v1.0 镜像,如果存在则删除
if docker image ls | grep -q 'hik-dev:v1.0'; then
    echo "发现 hik-dev:v1.0 镜像,删除中..."
    docker image rm hik-dev:v1.0
    echo "hik-dev:v1.0 镜像删除成功"
else
    echo "hik-dev:v1.0 镜像不存在"
fi

# 2. 进入 /mydata/targz 目录
cd /mydata/targz

# 3. 使用 go 解压包
echo "使用 go 解压包..."
go build xjar.go

# 4. 使用 Docker 构建 hik-dev:v1.0 镜像
echo "使用 Docker 构建 hik-dev:v1.0 镜像..."
docker build -t hik-dev:v1.0 .

# 5. 使用 Docker save 打包 hik-dev:v1.0 镜像
echo "使用 Docker save 打包 hik-dev:v1.0 镜像..."
docker save hik-dev:v1.0 > hik-dev.tar

# 6. 删除目录中除了 docker-compose.yaml 和 Dockerfile 的其他文件和目录
shopt -s extglob # 启用扩展模式匹配
echo "删除目录中除了 docker-compose.yaml 和 Dockerfile 的其他文件和目录..."
rm -r !("docker-compose.yaml"|"Dockerfile"|"hik-dev.tar")

# 7. 打包 /mydata/targz 目录
echo "打包 /mydata/targz 目录..."
tar -cvf /mydata/targz.tar /mydata/targz

echo "脚本执行完毕"
基本xjar包加固到这里就结束了

cker-compose.yaml 和 Dockerfile 的其他文件和目录…"
rm -r !(“docker-compose.yaml”|“Dockerfile”|“hik-dev.tar”)

7. 打包 /mydata/targz 目录

echo “打包 /mydata/targz 目录…”
tar -cvf /mydata/targz.tar /mydata/targz

echo “脚本执行完毕”文章来源地址https://www.toymoban.com/news/detail-731043.html


###### 基本xjar包加固到这里就结束了

到了这里,关于jenkins流水线实现xjar加固的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • jenkins流水线

    1、 二、 三、 四、 五、 六、  

    2024年02月05日
    浏览(46)
  • Jenkins流水线怎么做?

    问CHAT:Jenkins流水线怎么做? CHAT回复:Jenkins流水线是一种创建、测试和部署应用程序的方法。以下是为Jenkins创建流水线的步骤: 1. 安装Jenkins:首先你需要在你的服务器上安装Jenkins。这个过程可能会根据你的操作系统有所不同。 2. 安装必要的插件:为了使流水线工作,你需

    2024年01月24日
    浏览(42)
  • 【Jenkins】pipeline流水线

    流水线既能作为任务的本身,也能作为jenkinsfile,使用流水线可以让我们的任务从ui手动操作,转换为代码化,像docker的dockerfile一样,从shell命令到配置文件,更适合大型项目,可以让团队其他开发者同事参与进来,同时也可以编辑开发jenkinswebui不能完成的复杂的构建逻辑,作

    2024年02月09日
    浏览(56)
  • Jenkins的流水线详解

    来源:u.kubeinfo.cn/ozoxBB 什么是流水线 声明式流水线 Jenkinsfile 的使用 jenkins 有 2 种流水线分为 声明式流水线 与 脚本化流水线 ,脚本化流水线是 jenkins 旧版本使用的流水线脚本,新版本 Jenkins 推荐使用声明式流水线。文档只介绍声明流水线。 声明式流水线 在声明式流水线语

    2024年02月11日
    浏览(35)
  • Jenkins-流水线-保姆级教程

    目录 一、Jenkins 是什么? 二、安装方式 2.1 下载并运行 Jenkins  三、什么是流水线 3.1概述 3.2声明式流水线 3.3脚本化流水线 四、声明式流水线 4.1 Sections代码区域块 4.1.1Agent指令 4.1.2agent 的配置示例 4.1.3Post代码块 4.1.4.sepes代码块 五、Jenkinsfile的使用 5.1环境变量 5.1.1静态变量

    2024年02月01日
    浏览(37)
  • Jenkins 流水线多阶段构建

    Jenkins流水线配置遇到 无法识别的。需要使用 自定义环境 项。 比如官网的在流水线中使用Docker Started by remote host 172.17.0.1 Obtained Jenkinsfile from git http://10.99.20.51:8082/root/java-devops-demo.git org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: WorkflowScript: 28: Invalid agent type “

    2024年04月22日
    浏览(28)
  • 【Jenkins】Jenkins构建后端流水线

    xxxx后端-后端cim服务测试环境-项目构建 创建人:创建者姓名 时间:创建时间 保持构建天数:2 保持最大构建个数:3 ①clean:清楚之前;package:打包 -Dmaven.test.skip=true:跳过测试;-U:强制让Maven检查所有SNAPSHOT依赖更新 这里的pom.xml文件注意: Branches to build:分支某个环境的

    2024年02月12日
    浏览(45)
  • Jenkins部署Docker与Jenkins流水线

    接上篇 1. 外挂文件的方式在docker容器中启动 2. 将构建运行放入docker容器中(不构建镜像) 修改Jenkins构建前设置 修改部署后操作 重新构建,已经成功构建在容器中 3. 将构建运行放入docker镜像中(采用dockerfile) 1.编写dockerfile,放入项目中, 注意不能和依赖的包同级 写好可

    2024年01月22日
    浏览(43)
  • docker中的jenkins之流水线构建

    创建两个参数,一个是宿主端口号,一个是docker中的端口号 其中 Dsonar.host.url=http://docker.for.mac.host.internal:9000’ 主要是docker中的jenkins访问docker中的sonarQube,详情可以看我另外推文:https://blog.csdn.net/weixin_48319193/article/details/132124664?spm=1001.2014.3001.5501 填写端口号 启动 sonarQube成功

    2024年02月13日
    浏览(37)
  • 【jenkins】jenkins流水线构建打包jar,生成docker镜像,重启docker服务的过程,在jenkins上一键完成,实现提交代码自动构建的功能

     【jenkins】jenkins流水线构建打包jar,生成docker镜像,重启docker服务的过程,在jenkins上一键完成,实现提交代码自动构建,服务重启,服务发布的功能。一键实现。非常的舒服。 这是 shell脚本  脚本名称: startup.sh   本脚本的功能是在jenkins 构建完项目后,通过jar包生成dock

    2024年02月11日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包