jenkins流水線實現(xiàn)xjar加固
xjar的定義
Spring Boot JAR 安全加密運行工具,同時支持的原生JAR。
基于對JAR包內(nèi)資源的加密以及拓展ClassLoader來構(gòu)建的一套程序加密啟動,動態(tài)解密運行的方案,避免源碼泄露或反編譯
功能特性
無需侵入代碼,只需要把編譯好的JAR包通過工具加密即可。
完全內(nèi)存解密,杜絕源碼以及字節(jié)碼泄露或反編譯。
支持所有JDK內(nèi)置加解密算法。
可選擇需要加解密的字節(jié)碼或其他資源文件,避免計算資源浪費。xxxxxxxxxx 功能特性無需侵入代碼,只需要把編譯好的JAR包通過工具加密即可。完全內(nèi)存解密,杜絕源碼以及字節(jié)碼泄露或反編譯。支持所有JDK內(nèi)置加解密算法??蛇x擇需要加解密的字節(jié)碼或其他資源文件,避免計算資源浪費。
xjar使用
https://github.com/core-lib/xjar-maven-plugin
修改項目中的pom.xml,一般都是開發(fā)改
<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流水線配置
pipeline {
agent any
stages {
stage('拉取代碼') {
steps {
checkout([
$class: 'GitSCM',
branches: [[name: '*/yangyu']],
gitTool: 'Default',
userRemoteConfigs: [[credentialsId: '6', url: 'xxx']]
])
}
}
stage('發(fā)布系統(tǒng)審核') {
steps {
script {
hook = registerWebhook(authToken: 'xxx')
webhookId = hook.url.substring(hook.url.lastIndexOf('/') + 1)
dingtalk (
robot: 'xxx',
type: 'ACTION_CARD',
title: '確認發(fā)布',
text: [
'**是否更新安裝包**',
'',
'---',
"- 任務(wù)名稱:${JOB_NAME}",
"- 構(gòu)建ID:[#${env.BUILD_NUMBER}](${env.BUILD_URL})",
"- 構(gòu)建人:${env.USER}",
"- 持續(xù)時長:${currentBuild.durationString}",
"- 測試狀態(tài):<font color='${env.color == 'true' ? '#00CD00' : '#EE0000'}'>${env.SUB_JOB_STATUS}</font>",
"- 測試結(jié)果:[查看詳情](${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秒沒有確認 取消任務(wù)
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('任務(wù)被取消')
}
}
}
}
}
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工作目錄
mvn clean package "-Dxjar.password=123456" "-Dmaven.test.skip=true" -D profiles.active=dev #執(zhí)行構(gòu)建會生成這個
遠端服務(wù)器配置–?需要授權(quán)的服務(wù)器
獲取授權(quán)服務(wù)器信息
#!/bin/bash
# 獲取IP地址列表
ip_addresses=$(hostname -I)
# 獲取MAC地址列表并轉(zhuǎn)換為大寫
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 )
# 輸出結(jié)果
echo "IP地址:[$ip_addresses]"
echo "MAC地址:[$mac_addresses]"
echo "CPU序列號:$cpu_serial"
echo "主板序列號:$mainboard_serial"
執(zhí)行腳本
腳本內(nèi)容,
1.判斷鏡像是否存在
2.把xjar.go解壓,需要有g(shù)o環(huán)境
3.制作鏡像,然后把鏡像制作成tar包
4…省略,有需要這個腳本大家可以自行更改
#!/bin/bash
# 1. 判斷是否存在 hik-dev:v1.0 鏡像,如果存在則刪除
if docker image ls | grep -q 'hik-dev:v1.0'; then
echo "發(fā)現(xiàn) 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 構(gòu)建 hik-dev:v1.0 鏡像
echo "使用 Docker 構(gòu)建 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 "腳本執(zhí)行完畢"
基本xjar包加固到這里就結(jié)束了
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文章來源:http://www.zghlxwxcb.cn/news/detail-731043.html
echo “腳本執(zhí)行完畢”文章來源地址http://www.zghlxwxcb.cn/news/detail-731043.html
###### 基本xjar包加固到這里就結(jié)束了
到了這里,關(guān)于jenkins流水線實現(xiàn)xjar加固的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!