* Update jenkins pipeline.
This commit is contained in:
@@ -33,3 +33,4 @@ CodeSniffer.conf
|
||||
test/runtime/*
|
||||
test/www
|
||||
!/**/.gitkeep
|
||||
build/*.gz
|
||||
|
||||
Vendored
+239
-210
@@ -20,6 +20,11 @@ pipeline {
|
||||
SRC_ZENTAOEXT_PATH = "${WORKSPACE}/zentaoext"
|
||||
|
||||
MIRROR = "true"
|
||||
|
||||
BUILD_BASIC = "true"
|
||||
PUBLISH_ZIP = "true"
|
||||
PUBLISH_IMAGE = "true"
|
||||
PUBLISH_ZBOX = "true"
|
||||
}
|
||||
|
||||
stages {
|
||||
@@ -35,6 +40,28 @@ pipeline {
|
||||
agent {
|
||||
kubernetes {
|
||||
inheritFrom "zentao-package build-docker xuanim"
|
||||
yaml '''
|
||||
spec:
|
||||
affinity:
|
||||
nodeAffinity:
|
||||
requiredDuringSchedulingIgnoredDuringExecution:
|
||||
nodeSelectorTerms:
|
||||
- matchExpressions:
|
||||
- key: kubernetes.io/hostname
|
||||
operator: In
|
||||
values:
|
||||
- "k3s-worker01"
|
||||
containers:
|
||||
- name: docker
|
||||
volumeMounts:
|
||||
- mountPath: /var/run/docker.sock
|
||||
name: docker-socket
|
||||
volumes:
|
||||
- name: docker-socket
|
||||
hostPath:
|
||||
path: /var/run/docker.sock
|
||||
type: Socket
|
||||
'''
|
||||
}
|
||||
}
|
||||
|
||||
@@ -110,6 +137,9 @@ pipeline {
|
||||
}
|
||||
|
||||
stage("Build") {
|
||||
when {
|
||||
environment name:'BUILD_BASIC', value:'true'
|
||||
}
|
||||
stages {
|
||||
stage("make ciCommon") {
|
||||
environment {
|
||||
@@ -170,6 +200,10 @@ pipeline {
|
||||
returnStdout: true,
|
||||
script: 'cat ${SRC_ZENTAOEXT_PATH}/MAXVERSION'
|
||||
).trim()}"""
|
||||
IPD_VERSION = """${sh(
|
||||
returnStdout: true,
|
||||
script: 'cat ${SRC_ZENTAOEXT_PATH}/IPDVERSION'
|
||||
).trim()}"""
|
||||
|
||||
GIT_URL = """${sh(
|
||||
returnStdout: true,
|
||||
@@ -224,7 +258,9 @@ pipeline {
|
||||
|
||||
stages {
|
||||
stage("Merge and Upload") {
|
||||
|
||||
when {
|
||||
environment name:'PUBLISH_ZIP', value:'true'
|
||||
}
|
||||
matrix {
|
||||
agent {
|
||||
kubernetes {
|
||||
@@ -274,6 +310,7 @@ pipeline {
|
||||
returnStdout: true,
|
||||
script: 'test ${ZLANG} = cn && echo -n "int." || echo -n ""'
|
||||
).trim()}"""
|
||||
DOWNGRADE_ENABLED = "true"
|
||||
}
|
||||
|
||||
stages {
|
||||
@@ -305,51 +342,56 @@ pipeline {
|
||||
type: 'zip']
|
||||
]
|
||||
)
|
||||
nexusArtifactUploader(
|
||||
nexusVersion: 'nexus3',
|
||||
protocol: env.ARTIFACT_PROTOCOL,
|
||||
nexusUrl: env.ARTIFACT_HOST,
|
||||
groupId: 'zentao.bizPack' + '.' + env.GIT_TAG_BUILD_GROUP,
|
||||
version: env.BIZ_VERSION,
|
||||
repository: env.ARTIFACT_REPOSITORY,
|
||||
credentialsId: env.ARTIFACT_CRED_ID,
|
||||
artifacts: [
|
||||
[artifactId: env.ARTIFACT_NAME,
|
||||
classifier: env.PHPVERSION,
|
||||
file: env.ZENTAO_RELEASE_PATH + '/biz.zip',
|
||||
type: 'zip'],
|
||||
[artifactId: env.ARTIFACT_NAME + '.update',
|
||||
classifier: env.PHPVERSION,
|
||||
file: env.ZENTAO_RELEASE_PATH + '/biz.update.zip',
|
||||
type: 'zip']
|
||||
]
|
||||
)
|
||||
nexusArtifactUploader(
|
||||
nexusVersion: 'nexus3',
|
||||
protocol: env.ARTIFACT_PROTOCOL,
|
||||
nexusUrl: env.ARTIFACT_HOST,
|
||||
groupId: 'zentao.maxPack' + '.' + env.GIT_TAG_BUILD_GROUP,
|
||||
version: env.MAX_VERSION,
|
||||
repository: env.ARTIFACT_REPOSITORY,
|
||||
credentialsId: env.ARTIFACT_CRED_ID,
|
||||
artifacts: [
|
||||
[artifactId: env.ARTIFACT_NAME,
|
||||
classifier: env.PHPVERSION,
|
||||
file: env.ZENTAO_RELEASE_PATH + '/max.zip',
|
||||
type: 'zip'],
|
||||
[artifactId: env.ARTIFACT_NAME + '.update',
|
||||
classifier: env.PHPVERSION,
|
||||
file: env.ZENTAO_RELEASE_PATH + '/max.update.zip',
|
||||
type: 'zip']
|
||||
]
|
||||
)
|
||||
|
||||
sh 'mkdir ${OUTPUT_PKG_PATH}/${PMS_VERSION} ${OUTPUT_PKG_PATH}/${BIZ_VERSION} ${OUTPUT_PKG_PATH}/${MAX_VERSION}'
|
||||
sh 'cp ${ZENTAO_RELEASE_PATH}/base.zip ${OUTPUT_PKG_PATH}/${PMS_VERSION}/${ARTIFACT_NAME}.${PMS_VERSION}.${INT_FLAG}${PHPVERSION}.zip'
|
||||
sh 'mv ${ZENTAO_RELEASE_PATH}/biz.zip ${OUTPUT_PKG_PATH}/${BIZ_VERSION}/${ARTIFACT_NAME}.${BIZ_VERSION}.${INT_FLAG}${PHPVERSION}.zip'
|
||||
sh 'mv ${ZENTAO_RELEASE_PATH}/biz.update.zip ${OUTPUT_PKG_PATH}/${BIZ_VERSION}/${ARTIFACT_NAME}.${BIZ_VERSION}.${INT_FLAG}update.${PHPVERSION}.zip'
|
||||
sh 'mv ${ZENTAO_RELEASE_PATH}/max.zip ${OUTPUT_PKG_PATH}/${MAX_VERSION}/${ARTIFACT_NAME}.${MAX_VERSION}.${INT_FLAG}${PHPVERSION}.zip'
|
||||
sh 'mv ${ZENTAO_RELEASE_PATH}/max.update.zip ${OUTPUT_PKG_PATH}/${MAX_VERSION}/${ARTIFACT_NAME}.${MAX_VERSION}.${INT_FLAG}update.${PHPVERSION}.zip'
|
||||
sh 'mkdir ${OUTPUT_PKG_PATH}/${PMS_VERSION}'
|
||||
sh 'cp ${ZENTAO_RELEASE_PATH}/base.zip ${OUTPUT_PKG_PATH}/${PMS_VERSION}/${ARTIFACT_NAME}-${PMS_VERSION}-${PHPVERSION}.zip'
|
||||
|
||||
script {
|
||||
sh 'env | grep VERSION'
|
||||
def pkgVersionMap = [
|
||||
"biz": ["bizPack", env.BIZ_VERSION],
|
||||
"max": ["maxPack", env.MAX_VERSION],
|
||||
"ipd": ["ipdPack", env.IPD_VERSION]
|
||||
]
|
||||
|
||||
for (entry in pkgVersionMap.entrySet()) {
|
||||
echo "set ExtName to ${entry.key}"
|
||||
def ExtName = entry.key
|
||||
echo "set SubGroup to ${entry.value[0]}"
|
||||
def SubGroup = entry.value[0]
|
||||
echo "set Zversion to ${entry.value[1]}"
|
||||
def Zversion = entry.value[1]
|
||||
|
||||
nexusArtifactUploader(
|
||||
nexusVersion: 'nexus3',
|
||||
protocol: env.ARTIFACT_PROTOCOL,
|
||||
nexusUrl: env.ARTIFACT_HOST,
|
||||
groupId: 'zentao.' + SubGroup + '.' + env.GIT_TAG_BUILD_GROUP,
|
||||
version: Zversion,
|
||||
repository: env.ARTIFACT_REPOSITORY,
|
||||
credentialsId: env.ARTIFACT_CRED_ID,
|
||||
artifacts: [
|
||||
[artifactId: env.ARTIFACT_NAME,
|
||||
classifier: env.PHPVERSION,
|
||||
file: env.ZENTAO_RELEASE_PATH + '/' + ExtName + '.zip',
|
||||
type: 'zip'],
|
||||
[artifactId: env.ARTIFACT_NAME,
|
||||
classifier: 'update.' + env.PHPVERSION,
|
||||
file: env.ZENTAO_RELEASE_PATH + '/' + ExtName + '.update.zip',
|
||||
type: 'zip']
|
||||
]
|
||||
)
|
||||
sh 'mkdir ${OUTPUT_PKG_PATH}/' + Zversion
|
||||
def moveCmd1 = String.format('mv ${ZENTAO_RELEASE_PATH}/%s.zip ${OUTPUT_PKG_PATH}/%s/${ARTIFACT_NAME}-%s-${PHPVERSION}.zip', ExtName, Zversion, Zversion)
|
||||
sh moveCmd1
|
||||
|
||||
def moveCmd2 = String.format('mv ${ZENTAO_RELEASE_PATH}/%s.update.zip ${OUTPUT_PKG_PATH}/%s/${ARTIFACT_NAME}-%s-update.${PHPVERSION}.zip', ExtName, Zversion, Zversion)
|
||||
sh moveCmd2
|
||||
|
||||
} // End for loop
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
} // End upload zip
|
||||
|
||||
@@ -373,8 +415,8 @@ pipeline {
|
||||
}
|
||||
|
||||
steps {
|
||||
sh 'mv ${ZENTAO_RELEASE_PATH}/zentao.rpm ${OUTPUT_PKG_PATH}/${PMS_VERSION}/${ARTIFACT_NAME}.${PMS_VERSION}.${PHPVERSION}.1.noarch.rpm'
|
||||
sh 'mv ${ZENTAO_RELEASE_PATH}/zentao.deb ${OUTPUT_PKG_PATH}/${PMS_VERSION}/${ARTIFACT_NAME}.${PMS_VERSION}.${PHPVERSION}.1.all.deb'
|
||||
sh 'mv ${ZENTAO_RELEASE_PATH}/zentao.rpm ${OUTPUT_PKG_PATH}/${PMS_VERSION}/${ARTIFACT_NAME}-${PMS_VERSION}-${PHPVERSION}-1.noarch.rpm'
|
||||
sh 'mv ${ZENTAO_RELEASE_PATH}/zentao.deb ${OUTPUT_PKG_PATH}/${PMS_VERSION}/${ARTIFACT_NAME}_${PMS_VERSION}-${PHPVERSION}-1_all.deb'
|
||||
}
|
||||
} // End upload syspack cn
|
||||
|
||||
@@ -407,6 +449,9 @@ pipeline {
|
||||
} // End Merge and Upload Max
|
||||
|
||||
stage("Notice ZIP") {
|
||||
when {
|
||||
environment name:'PUBLISH_ZIP', value:'true'
|
||||
}
|
||||
steps {
|
||||
container('xuanimbot') {
|
||||
sh 'env | grep GIT'
|
||||
@@ -418,14 +463,32 @@ pipeline {
|
||||
}
|
||||
|
||||
stage("Docker Image") {
|
||||
when {
|
||||
environment name:'PUBLISH_IMAGE', value:'true'
|
||||
}
|
||||
|
||||
agent {
|
||||
kubernetes {
|
||||
inheritFrom "dind xuanim"
|
||||
}
|
||||
}
|
||||
|
||||
environment {
|
||||
REGISTRY_HOST="hub.zentao.net"
|
||||
CI_BUILD_PUBLIC_IMAGE="""${sh(
|
||||
returnStdout: true,
|
||||
script: 'test "$GIT_TAG_BUILD_TYPE" = release && echo true || echo false'
|
||||
).trim()}"""
|
||||
CI_PUBLIC_IMAGE_NAMESPACE="""${sh(
|
||||
returnStdout: true,
|
||||
script: "echo $GIT_URL | grep demo/zentao >/dev/null && echo test || echo app"
|
||||
).trim()}"""
|
||||
}
|
||||
|
||||
stages() {
|
||||
stage("prepare") {
|
||||
steps {
|
||||
sh 'env'
|
||||
checkout scmGit(branches: [[name: "master"]],
|
||||
extensions: [cloneOption(depth: 2, noTags: false, reference: '', shallow: true)],
|
||||
userRemoteConfigs: [[credentialsId: 'git-zcorp-cc-jenkins-bot-http', url: 'https://git.zcorp.cc/app/zentao.git']]
|
||||
@@ -433,9 +496,6 @@ pipeline {
|
||||
container('docker') {
|
||||
sh "sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories"
|
||||
sh "apk --no-cache add make bash jq git"
|
||||
sh "docker run --privileged --rm tonistiigi/binfmt --install all"
|
||||
sh "docker buildx create --name mybuilder --driver docker-container --bootstrap"
|
||||
sh "docker buildx use mybuilder"
|
||||
sh "make markdown-init"
|
||||
}
|
||||
}
|
||||
@@ -448,9 +508,13 @@ pipeline {
|
||||
).trim()}"""
|
||||
}
|
||||
steps {
|
||||
sh 'echo ${ZENTAO_URL}'
|
||||
container('docker') {
|
||||
sh 'env | grep ZENTAO'
|
||||
sh 'make build'
|
||||
withDockerRegistry(credentialsId: 'hub-qucheng-push', url: 'https://' + env.REGISTRY_HOST) {
|
||||
sh "docker buildx create --name mybuilder --driver docker-container --bootstrap"
|
||||
sh "docker buildx use mybuilder"
|
||||
sh 'make build'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -464,9 +528,14 @@ pipeline {
|
||||
}
|
||||
steps {
|
||||
container('docker') {
|
||||
sh 'make build-biz'
|
||||
sh 'make build-biz-k8s'
|
||||
withDockerRegistry(credentialsId: 'hub-qucheng-push', url: 'https://' + env.REGISTRY_HOST) {
|
||||
sh "docker buildx create --name mybuilder --driver docker-container --bootstrap"
|
||||
sh "docker buildx use mybuilder"
|
||||
sh 'make build-biz'
|
||||
sh 'make build-biz-k8s'
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -479,8 +548,31 @@ pipeline {
|
||||
}
|
||||
steps {
|
||||
container('docker') {
|
||||
sh 'make build-max'
|
||||
sh 'make build-max-k8s'
|
||||
withDockerRegistry(credentialsId: 'hub-qucheng-push', url: 'https://' + env.REGISTRY_HOST) {
|
||||
sh "docker buildx create --name mybuilder --driver docker-container --bootstrap"
|
||||
sh "docker buildx use mybuilder"
|
||||
sh 'make build-max'
|
||||
sh 'make build-max-k8s'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage("docker ipd") {
|
||||
environment {
|
||||
ZENTAO_URL = """${sh(
|
||||
returnStdout: true,
|
||||
script: "echo ${ARTIFACT_PROTOCOL}://${ARTIFACT_HOST}/repository/${ARTIFACT_REPOSITORY}/zentao/ipdPack/`echo ${GIT_TAG_BUILD_GROUP} | tr . /`/ZenTaoPMS"
|
||||
).trim()}"""
|
||||
}
|
||||
steps {
|
||||
container('docker') {
|
||||
withDockerRegistry(credentialsId: 'hub-qucheng-push', url: 'https://' + env.REGISTRY_HOST) {
|
||||
sh "docker buildx create --name mybuilder --driver docker-container --bootstrap"
|
||||
sh "docker buildx use mybuilder"
|
||||
sh 'make build-ipd'
|
||||
sh 'make build-ipd-k8s'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -500,7 +592,12 @@ pipeline {
|
||||
}
|
||||
} // End Docker Image
|
||||
|
||||
|
||||
stage("Zbox") {
|
||||
when {
|
||||
environment name:'PUBLISH_ZBOX', value:'true'
|
||||
}
|
||||
|
||||
agent {
|
||||
kubernetes {
|
||||
inheritFrom "xuanim"
|
||||
@@ -553,78 +650,48 @@ pipeline {
|
||||
steps {
|
||||
container('docker') {
|
||||
|
||||
sh 'bash build-zbox.sh en win $PMS_VERSION $BIZ_VERSION $MAX_VERSION'
|
||||
sh 'bash build-zbox.sh zh-cn win $PMS_VERSION $BIZ_VERSION $MAX_VERSION'
|
||||
sh 'bash build-zbox.sh en win $PMS_VERSION $BIZ_VERSION $MAX_VERSION $IPD_VERSION'
|
||||
sh 'bash build-zbox.sh zh-cn win $PMS_VERSION $BIZ_VERSION $MAX_VERSION $IPD_VERSION'
|
||||
sh 'tree ./release'
|
||||
|
||||
sh 'cd ./release/zh-cn/$PMS_VERSION/; zip ZenTaoPMS.$PMS_VERSION.zbox.win64.zip ZenTaoPMS.$PMS_VERSION.zbox.win64.exe'
|
||||
sh 'cd ./release/en/$PMS_VERSION/; zip ZenTaoALM.$PMS_VERSION.int.zbox.win64.zip ZenTaoALM.$PMS_VERSION.int.zbox.win64.exe'
|
||||
sh 'cd ./release/zh-cn/$BIZ_VERSION/; zip ZenTaoPMS.$BIZ_VERSION.zbox.win64.zip ZenTaoPMS.$BIZ_VERSION.zbox.win64.exe'
|
||||
sh 'cd ./release/en/$BIZ_VERSION/; zip ZenTaoALM.$BIZ_VERSION.int.zbox.win64.zip ZenTaoALM.$BIZ_VERSION.int.zbox.win64.exe'
|
||||
sh 'cd ./release/zh-cn/$MAX_VERSION/; zip ZenTaoPMS.$MAX_VERSION.zbox.win64.zip ZenTaoPMS.$MAX_VERSION.zbox.win64.exe'
|
||||
sh 'cd ./release/en/$MAX_VERSION/; zip ZenTaoALM.$MAX_VERSION.int.zbox.win64.zip ZenTaoALM.$MAX_VERSION.int.zbox.win64.exe'
|
||||
|
||||
}
|
||||
|
||||
nexusArtifactUploader(
|
||||
nexusVersion: 'nexus3',
|
||||
protocol: env.ARTIFACT_PROTOCOL,
|
||||
nexusUrl: env.ARTIFACT_HOST,
|
||||
groupId: 'zentao.pmsPack' + '.' + env.GIT_TAG_BUILD_GROUP,
|
||||
version: env.PMS_VERSION,
|
||||
repository: env.ARTIFACT_REPOSITORY,
|
||||
credentialsId: env.ARTIFACT_CRED_ID,
|
||||
artifacts: [
|
||||
[artifactId: 'ZenTaoPMS',
|
||||
classifier: 'zbox.win64',
|
||||
file: './release/zh-cn/' + PMS_VERSION + '/ZenTaoPMS.' + PMS_VERSION + '.zbox.win64.zip',
|
||||
type: 'zip'],
|
||||
[artifactId: 'ZenTaoALM',
|
||||
classifier: 'zbox.win64',
|
||||
file: './release/en/' + PMS_VERSION + '/ZenTaoALM.' + PMS_VERSION + '.int.zbox.win64.zip',
|
||||
type: 'zip']
|
||||
script {
|
||||
def pkgVersionMap = [
|
||||
"pms": ["pmsPack", "${env.PMS_VERSION}"],
|
||||
"biz": ["bizPack", "${env.BIZ_VERSION}"],
|
||||
"max": ["maxPack", "${env.MAX_VERSION}"],
|
||||
"ipd": ["ipdPack", "${env.IPD_VERSION}"]
|
||||
]
|
||||
)
|
||||
|
||||
nexusArtifactUploader(
|
||||
nexusVersion: 'nexus3',
|
||||
protocol: env.ARTIFACT_PROTOCOL,
|
||||
nexusUrl: env.ARTIFACT_HOST,
|
||||
groupId: 'zentao.bizPack' + '.' + env.GIT_TAG_BUILD_GROUP,
|
||||
version: env.BIZ_VERSION,
|
||||
repository: env.ARTIFACT_REPOSITORY,
|
||||
credentialsId: env.ARTIFACT_CRED_ID,
|
||||
artifacts: [
|
||||
[artifactId: 'ZenTaoPMS',
|
||||
classifier: 'zbox.win64',
|
||||
file: './release/zh-cn/' + BIZ_VERSION + '/ZenTaoPMS.' + BIZ_VERSION + '.zbox.win64.zip',
|
||||
type: 'zip'],
|
||||
[artifactId: 'ZenTaoALM',
|
||||
classifier: 'zbox.win64',
|
||||
file: './release/en/' + BIZ_VERSION + '/ZenTaoALM.' + BIZ_VERSION + '.int.zbox.win64.zip',
|
||||
type: 'zip']
|
||||
]
|
||||
)
|
||||
for (entry in pkgVersionMap.entrySet()) {
|
||||
echo "key is ${entry.key}"
|
||||
def ExtName = entry.key
|
||||
def SubGroup = entry.value[0]
|
||||
def Zversion = entry.value[1]
|
||||
|
||||
|
||||
nexusArtifactUploader(
|
||||
nexusVersion: 'nexus3',
|
||||
protocol: env.ARTIFACT_PROTOCOL,
|
||||
nexusUrl: env.ARTIFACT_HOST,
|
||||
groupId: 'zentao.' + SubGroup + '.' + env.GIT_TAG_BUILD_GROUP,
|
||||
version: Zversion,
|
||||
repository: env.ARTIFACT_REPOSITORY,
|
||||
credentialsId: env.ARTIFACT_CRED_ID,
|
||||
artifacts: [
|
||||
[artifactId: 'ZenTaoPMS',
|
||||
classifier: 'zbox.win64',
|
||||
file: './release/zh-cn/' + Zversion + '/ZenTaoPMS-' + Zversion + '-zbox.win64.tar.gz',
|
||||
type: 'tar.gz'],
|
||||
[artifactId: 'ZenTaoALM',
|
||||
classifier: 'zbox.win64',
|
||||
file: './release/en/' + Zversion + '/ZenTaoALM-' + Zversion + '-zbox.win64.tar.gz',
|
||||
type: 'tar.gz']
|
||||
]
|
||||
)
|
||||
} // End for loop
|
||||
}
|
||||
|
||||
nexusArtifactUploader(
|
||||
nexusVersion: 'nexus3',
|
||||
protocol: env.ARTIFACT_PROTOCOL,
|
||||
nexusUrl: env.ARTIFACT_HOST,
|
||||
groupId: 'zentao.maxPack' + '.' + env.GIT_TAG_BUILD_GROUP,
|
||||
version: env.MAX_VERSION,
|
||||
repository: env.ARTIFACT_REPOSITORY,
|
||||
credentialsId: env.ARTIFACT_CRED_ID,
|
||||
artifacts: [
|
||||
[artifactId: 'ZenTaoPMS',
|
||||
classifier: 'zbox.win64',
|
||||
file: './release/zh-cn/' + MAX_VERSION + '/ZenTaoPMS.' + MAX_VERSION + '.zbox.win64.zip',
|
||||
type: 'zip'],
|
||||
[artifactId: 'ZenTaoALM',
|
||||
classifier: 'zbox.win64',
|
||||
file: './release/en/' + MAX_VERSION + '/ZenTaoALM.' + MAX_VERSION + '.int.zbox.win64.zip',
|
||||
type: 'zip']
|
||||
]
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -641,11 +708,12 @@ pipeline {
|
||||
|
||||
steps {
|
||||
container('docker') {
|
||||
sh 'mkdir -pv ./release/upload && cd ./release/upload && mkdir $PMS_VERSION $BIZ_VERSION $MAX_VERSION'
|
||||
sh 'mkdir -pv ./release/upload && cd ./release/upload && mkdir $PMS_VERSION $BIZ_VERSION $MAX_VERSION $IPD_VERSION'
|
||||
sh 'tree ./release'
|
||||
sh "mv `find release/zh-cn/$PMS_VERSION release/en/$PMS_VERSION -type f -name 'ZenTao*.zip'` release/upload/$PMS_VERSION"
|
||||
sh "mv `find release/zh-cn/$BIZ_VERSION release/en/$BIZ_VERSION -type f -name 'ZenTao*.zip'` release/upload/$BIZ_VERSION"
|
||||
sh "mv `find release/zh-cn/$MAX_VERSION release/en/$MAX_VERSION -type f -name 'ZenTao*.zip'` release/upload/$MAX_VERSION"
|
||||
sh "mv `find release/zh-cn/$PMS_VERSION release/en/$PMS_VERSION -type f -name 'ZenTao*.tar.gz'` release/upload/$PMS_VERSION"
|
||||
sh "mv `find release/zh-cn/$BIZ_VERSION release/en/$BIZ_VERSION -type f -name 'ZenTao*.tar.gz'` release/upload/$BIZ_VERSION"
|
||||
sh "mv `find release/zh-cn/$MAX_VERSION release/en/$MAX_VERSION -type f -name 'ZenTao*.tar.gz'` release/upload/$MAX_VERSION"
|
||||
sh "mv `find release/zh-cn/$IPD_VERSION release/en/$IPD_VERSION -type f -name 'ZenTao*.tar.gz'` release/upload/$IPD_VERSION"
|
||||
}
|
||||
container('jnlp') {
|
||||
sh 'qshell account $QINIU_ACCESS_KEY $QINIU_SECRET_KEY uploader'
|
||||
@@ -690,94 +758,54 @@ pipeline {
|
||||
stage("Build") {
|
||||
steps {
|
||||
container('docker') {
|
||||
sh 'bash build-zbox.sh zh-cn linux $PMS_VERSION $BIZ_VERSION $MAX_VERSION'
|
||||
sh 'bash build-zbox.sh en linux $PMS_VERSION $BIZ_VERSION $MAX_VERSION'
|
||||
sh 'bash build-zbox.sh zh-cn linux $PMS_VERSION $BIZ_VERSION $MAX_VERSION $IPD_VERSION'
|
||||
sh 'bash build-zbox.sh en linux $PMS_VERSION $BIZ_VERSION $MAX_VERSION $IPD_VERSION'
|
||||
sh 'tree ./release'
|
||||
}
|
||||
|
||||
nexusArtifactUploader(
|
||||
nexusVersion: 'nexus3',
|
||||
protocol: env.ARTIFACT_PROTOCOL,
|
||||
nexusUrl: env.ARTIFACT_HOST,
|
||||
groupId: 'zentao.pmsPack' + '.' + env.GIT_TAG_BUILD_GROUP,
|
||||
version: env.PMS_VERSION,
|
||||
repository: env.ARTIFACT_REPOSITORY,
|
||||
credentialsId: env.ARTIFACT_CRED_ID,
|
||||
artifacts: [
|
||||
[artifactId: 'ZenTaoPMS',
|
||||
classifier: 'zbox_amd64',
|
||||
file: './release/zh-cn/' + PMS_VERSION + '/amd64/ZenTaoPMS.' + PMS_VERSION + '.zbox_amd64.tar.gz',
|
||||
type: 'tar.gz'],
|
||||
[artifactId: 'ZenTaoPMS',
|
||||
classifier: 'zbox_arm64',
|
||||
file: './release/zh-cn/' + PMS_VERSION + '/arm64/ZenTaoPMS.' + PMS_VERSION + '.zbox_arm64.tar.gz',
|
||||
type: 'tar.gz'],
|
||||
[artifactId: 'ZenTaoALM',
|
||||
classifier: 'zbox_amd64',
|
||||
file: './release/en/' + PMS_VERSION + '/amd64/ZenTaoALM.' + PMS_VERSION + '.int.zbox_amd64.tar.gz',
|
||||
type: 'tar.gz'],
|
||||
[artifactId: 'ZenTaoALM',
|
||||
classifier: 'zbox_arm64',
|
||||
file: './release/en/' + PMS_VERSION + '/arm64/ZenTaoALM.' + PMS_VERSION + '.int.zbox_arm64.tar.gz',
|
||||
type: 'tar.gz']
|
||||
script {
|
||||
def pkgVersionMap = [
|
||||
"pms": ["pmsPack", "${env.PMS_VERSION}"],
|
||||
"biz": ["bizPack", "${env.BIZ_VERSION}"],
|
||||
"max": ["maxPack", "${env.MAX_VERSION}"],
|
||||
"ipd": ["ipdPack", "${env.IPD_VERSION}"]
|
||||
]
|
||||
)
|
||||
|
||||
nexusArtifactUploader(
|
||||
nexusVersion: 'nexus3',
|
||||
protocol: env.ARTIFACT_PROTOCOL,
|
||||
nexusUrl: env.ARTIFACT_HOST,
|
||||
groupId: 'zentao.bizPack' + '.' + env.GIT_TAG_BUILD_GROUP,
|
||||
version: env.BIZ_VERSION,
|
||||
repository: env.ARTIFACT_REPOSITORY,
|
||||
credentialsId: env.ARTIFACT_CRED_ID,
|
||||
artifacts: [
|
||||
[artifactId: 'ZenTaoPMS',
|
||||
classifier: 'zbox_amd64',
|
||||
file: './release/zh-cn/' + BIZ_VERSION + '/amd64/ZenTaoPMS.' + BIZ_VERSION + '.zbox_amd64.tar.gz',
|
||||
type: 'tar.gz'],
|
||||
[artifactId: 'ZenTaoPMS',
|
||||
classifier: 'zbox_arm64',
|
||||
file: './release/zh-cn/' + BIZ_VERSION + '/arm64/ZenTaoPMS.' + BIZ_VERSION + '.zbox_arm64.tar.gz',
|
||||
type: 'tar.gz'],
|
||||
[artifactId: 'ZenTaoALM',
|
||||
classifier: 'zbox_amd64',
|
||||
file: './release/en/' + BIZ_VERSION + '/amd64/ZenTaoALM.' + BIZ_VERSION + '.int.zbox_amd64.tar.gz',
|
||||
type: 'tar.gz'],
|
||||
[artifactId: 'ZenTaoALM',
|
||||
classifier: 'zbox_arm64',
|
||||
file: './release/en/' + BIZ_VERSION + '/arm64/ZenTaoALM.' + BIZ_VERSION + '.int.zbox_arm64.tar.gz',
|
||||
type: 'tar.gz']
|
||||
]
|
||||
)
|
||||
for (entry in pkgVersionMap.entrySet()) {
|
||||
echo "key is ${entry.key}"
|
||||
def ExtName = entry.key
|
||||
def SubGroup = entry.value[0]
|
||||
def Zversion = entry.value[1]
|
||||
|
||||
nexusArtifactUploader(
|
||||
nexusVersion: 'nexus3',
|
||||
protocol: env.ARTIFACT_PROTOCOL,
|
||||
nexusUrl: env.ARTIFACT_HOST,
|
||||
groupId: 'zentao.maxPack' + '.' + env.GIT_TAG_BUILD_GROUP,
|
||||
version: env.MAX_VERSION,
|
||||
repository: env.ARTIFACT_REPOSITORY,
|
||||
credentialsId: env.ARTIFACT_CRED_ID,
|
||||
artifacts: [
|
||||
[artifactId: 'ZenTaoPMS',
|
||||
classifier: 'zbox_amd64',
|
||||
file: './release/zh-cn/' + MAX_VERSION + '/amd64/ZenTaoPMS.' + MAX_VERSION + '.zbox_amd64.tar.gz',
|
||||
type: 'tar.gz'],
|
||||
[artifactId: 'ZenTaoPMS',
|
||||
classifier: 'zbox_arm64',
|
||||
file: './release/zh-cn/' + MAX_VERSION + '/arm64/ZenTaoPMS.' + MAX_VERSION + '.zbox_arm64.tar.gz',
|
||||
type: 'tar.gz'],
|
||||
[artifactId: 'ZenTaoALM',
|
||||
classifier: 'zbox_amd64',
|
||||
file: './release/en/' + MAX_VERSION + '/amd64/ZenTaoALM.' + MAX_VERSION + '.int.zbox_amd64.tar.gz',
|
||||
type: 'tar.gz'],
|
||||
[artifactId: 'ZenTaoALM',
|
||||
classifier: 'zbox_arm64',
|
||||
file: './release/en/' + MAX_VERSION + '/arm64/ZenTaoALM.' + MAX_VERSION + '.int.zbox_arm64.tar.gz',
|
||||
type: 'tar.gz']
|
||||
]
|
||||
)
|
||||
nexusArtifactUploader(
|
||||
nexusVersion: 'nexus3',
|
||||
protocol: env.ARTIFACT_PROTOCOL,
|
||||
nexusUrl: env.ARTIFACT_HOST,
|
||||
groupId: 'zentao.' + SubGroup + '.' + env.GIT_TAG_BUILD_GROUP,
|
||||
version: Zversion,
|
||||
repository: env.ARTIFACT_REPOSITORY,
|
||||
credentialsId: env.ARTIFACT_CRED_ID,
|
||||
artifacts: [
|
||||
[artifactId: 'ZenTaoPMS',
|
||||
classifier: 'zbox_amd64',
|
||||
file: './release/zh-cn/' + Zversion + '/amd64/ZenTaoPMS-' + Zversion + '-zbox_amd64.tar.gz',
|
||||
type: 'tar.gz'],
|
||||
[artifactId: 'ZenTaoPMS',
|
||||
classifier: 'zbox_arm64',
|
||||
file: './release/zh-cn/' + Zversion + '/arm64/ZenTaoPMS-' + Zversion + '-zbox_arm64.tar.gz',
|
||||
type: 'tar.gz'],
|
||||
[artifactId: 'ZenTaoALM',
|
||||
classifier: 'zbox_amd64',
|
||||
file: './release/en/' + Zversion + '/amd64/ZenTaoALM-' + Zversion + '-zbox_amd64.tar.gz',
|
||||
type: 'tar.gz'],
|
||||
[artifactId: 'ZenTaoALM',
|
||||
classifier: 'zbox_arm64',
|
||||
file: './release/en/' + Zversion + '/arm64/ZenTaoALM-' + Zversion + '-zbox_arm64.tar.gz',
|
||||
type: 'tar.gz']
|
||||
]
|
||||
)
|
||||
} // End for loop
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -794,11 +822,12 @@ pipeline {
|
||||
|
||||
steps {
|
||||
container('docker') {
|
||||
sh 'mkdir -pv ./release/upload && cd ./release/upload && mkdir $PMS_VERSION $BIZ_VERSION $MAX_VERSION'
|
||||
sh 'mkdir -pv ./release/upload && cd ./release/upload && mkdir $PMS_VERSION $BIZ_VERSION $MAX_VERSION $IPD_VERSION'
|
||||
sh 'tree ./release'
|
||||
sh "mv `find release/zh-cn/$PMS_VERSION release/en/$PMS_VERSION -type f -name 'ZenTao*'` release/upload/$PMS_VERSION"
|
||||
sh "mv `find release/zh-cn/$BIZ_VERSION release/en/$BIZ_VERSION -type f -name 'ZenTao*'` release/upload/$BIZ_VERSION"
|
||||
sh "mv `find release/zh-cn/$MAX_VERSION release/en/$MAX_VERSION -type f -name 'ZenTao*'` release/upload/$MAX_VERSION"
|
||||
sh "mv `find release/zh-cn/$IPD_VERSION release/en/$IPD_VERSION -type f -name 'ZenTao*'` release/upload/$IPD_VERSION"
|
||||
}
|
||||
container('jnlp') {
|
||||
sh 'qshell account $QINIU_ACCESS_KEY $QINIU_SECRET_KEY uploader'
|
||||
@@ -808,6 +837,7 @@ pipeline {
|
||||
} // End Upload Qiniu
|
||||
}
|
||||
} // End Zbox linux
|
||||
|
||||
} // End parallel
|
||||
}
|
||||
|
||||
@@ -827,7 +857,6 @@ pipeline {
|
||||
}
|
||||
|
||||
} // End Zbox
|
||||
|
||||
}
|
||||
|
||||
post {
|
||||
|
||||
@@ -272,12 +272,17 @@ ciCommon:
|
||||
make cleanAssets
|
||||
zip -rq -9 ZenTaoPMS.$(VERSION).zip zentaopms
|
||||
# en
|
||||
cd zentaopms/; grep -rl 'zentao.net'|xargs sed -i 's/zentao.net/zentao.pm/g';
|
||||
cd zentaopms/; grep -rl 'http://www.zentao.pm'|xargs sed -i 's/http:\/\/www.zentao.pm/https:\/\/www.zentao.pm/g';
|
||||
cd zentaopms/config/; echo >> config.php; echo '$$config->isINT = true;' >> config.php
|
||||
mv zentaopms zentaoalm
|
||||
zip -r -9 ZenTaoALM.$(VERSION).int.zip zentaoalm
|
||||
rm -fr zentaoalm
|
||||
cp -a zentaopms zentaoalm
|
||||
cd zentaoalm/; grep -rl 'zentao.net'|xargs sed -i 's/zentao.net/zentao.pm/g';
|
||||
cd zentaoalm/; grep -rl 'http://www.zentao.pm'|xargs sed -i 's/http:\/\/www.zentao.pm/https:\/\/www.zentao.pm/g';
|
||||
cd zentaoalm/config/; echo >> config.php; echo '$$config->isINT = true;' >> config.php
|
||||
zip -rq -9 ZenTaoALM.$(VERSION).int.zip zentaoalm
|
||||
|
||||
# downgrade
|
||||
./misc/downgrade.sh -p 7.2,7.1,7.0,5.4 -i -r zentaopms framework/ module/*
|
||||
cp zentaopms/build/downgrade-*.tar.gz $(RELEASE_PATH)
|
||||
rm -fr zentaopms zentaoalm
|
||||
|
||||
# move pms zip to build and release path.
|
||||
rm -f $(BUILD_PATH)/ZenTao*.zip $(RELEASE_PATH)/ZenTaoPMS.$(VERSION).zip $(RELEASE_PATH)/ZenTaoALM.$(VERSION).int.zip
|
||||
cp ZenTaoPMS.$(VERSION).zip $(BUILD_PATH)
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"require-dev": {
|
||||
"rector/rector": "0.15.*"
|
||||
},
|
||||
"scripts": {
|
||||
"rector": [
|
||||
"Composer\\Config::disableProcessTimeout",
|
||||
"rector process --no-diffs --no-progress-bar"
|
||||
],
|
||||
"rector-nocache": [
|
||||
"Composer\\Config::disableProcessTimeout",
|
||||
"rector process --no-diffs --no-progress-bar --clear-cache"
|
||||
]
|
||||
}
|
||||
}
|
||||
Executable
+313
@@ -0,0 +1,313 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
phpVer="7.4"
|
||||
installRector="false"
|
||||
codeRootDir=$PWD
|
||||
composerDir="$(dirname "$(realpath "$0")")"
|
||||
|
||||
helper() {
|
||||
cat << EOF
|
||||
Usage: $0 -p version dirs...
|
||||
Arguments:
|
||||
-p php版本号,如 7.4
|
||||
可以指定多个版本,用逗号分隔,如 7.4,7.0,5.4
|
||||
-i 在 misc 目录执行 composer install, 安装 rector
|
||||
-r 指定要降级的代码根目录, 默认为当前目录
|
||||
EOF
|
||||
}
|
||||
|
||||
# 处理命令行参数, 获取要降级的目录
|
||||
[ $# -eq 0 ] && helper
|
||||
while getopts "ir:p:" opt; do
|
||||
case $opt in
|
||||
"p")
|
||||
phpVer=$OPTARG
|
||||
;;
|
||||
"r")
|
||||
codeRootDir=$(realpath "$OPTARG")
|
||||
;;
|
||||
"i")
|
||||
installRector="true"
|
||||
;;
|
||||
*)
|
||||
helper
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
shift $((OPTIND - 1))
|
||||
|
||||
if [ "$#" -eq 0 ];then
|
||||
echo "need at least one file or directory"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
# 处理降级目录路径
|
||||
downGradeDirs=()
|
||||
for d in "$@"
|
||||
do
|
||||
targetDir="$codeRootDir/$d"
|
||||
test -d "$targetDir" || (echo "$d ($targetDir) is not a directory, abort."; exit 2)
|
||||
downGradeDirs+=("${targetDir}")
|
||||
done
|
||||
# 结束命令行参数处理
|
||||
|
||||
excludeRegexList=(
|
||||
module/holiday/ext/
|
||||
lib/purifier/HTMLPurifier.autoload-legacy.php
|
||||
lib/sqlparser/vendor/
|
||||
)
|
||||
|
||||
##################################
|
||||
# 在非容器环境,返回 cpu 核数减一
|
||||
# 在容器环境,如未对 cpu 做限制,返回宿主机核数减一,否则按实际限制的 cpu 核数
|
||||
##################################
|
||||
quotaFile="/sys/fs/cgroup/cpu.max"
|
||||
getCpuQuota() {
|
||||
if [ -f $quotaFile ];then
|
||||
quota=$(cut -d ' ' -f 1 $quotaFile)
|
||||
period=$(cut -d ' ' -f 2 $quotaFile)
|
||||
if [ "$quota" = "max" ];then
|
||||
echo $(($(nproc)-1))
|
||||
return
|
||||
else
|
||||
echo $((quota/period))
|
||||
return
|
||||
fi
|
||||
else
|
||||
echo $(($(nproc)-1))
|
||||
return
|
||||
fi
|
||||
}
|
||||
|
||||
# 检查要降级版本的 php 命令行是否存在,将用于校验语法
|
||||
existsPHPCli() {
|
||||
phpVersion="$1"
|
||||
which php"${phpVersion}" >/dev/null
|
||||
}
|
||||
|
||||
#########################################
|
||||
# 执行降级命令
|
||||
# 参数:
|
||||
# 1. 降级版本, 如 7.4, 7.0
|
||||
# 2. 关闭缓存 (可选项), nocache
|
||||
# 3. 并行执行 (可选项), parallel
|
||||
# * 降级目录列表
|
||||
# 说明
|
||||
# 1. 由于降级命令有可能会发生异常,故设置了重试,
|
||||
# 在函数运行时,缓存目录不变,故重试时会减少部分时间
|
||||
# 2. 并行执行的个数,根据 cpu 最大核数减一处理,如果是容器环境,按分配的核数
|
||||
# 并行执行需要安装 parallel 包
|
||||
##########################################
|
||||
maxRectorRetries=3
|
||||
downGradeDir() {
|
||||
rectorCmd="rector"
|
||||
|
||||
export PHP_VERSION=${1/./}
|
||||
shift
|
||||
|
||||
if [ "$1" = "nocache" ];then
|
||||
rectorCmd="rector-nocache"
|
||||
shift
|
||||
fi
|
||||
|
||||
withParallel="false"
|
||||
if [ "$1" = "parallel" ];then
|
||||
withParallel="true"
|
||||
shift
|
||||
fi
|
||||
|
||||
downDirs=("$@")
|
||||
echo "set PHP_VERSION to $PHP_VERSION"
|
||||
echo "do downgrade on dir ${downDirs[*]}"
|
||||
|
||||
lastDir=$PWD
|
||||
cd "$composerDir" || exit
|
||||
rectorResult=0
|
||||
|
||||
set +e
|
||||
for ((i=0;i<maxRectorRetries;i++)) {
|
||||
if [ "$withParallel" = "true" ];then
|
||||
quotaCpu=$(getCpuQuota)
|
||||
parallel -j "$quotaCpu" -k composer "${rectorCmd}" ::: "${downDirs[@]}"
|
||||
else
|
||||
composer ${rectorCmd} -- "${downDirs[@]}"
|
||||
fi
|
||||
|
||||
rectorResult="$?"
|
||||
if [ "$rectorResult" -eq 0 ];then
|
||||
break
|
||||
fi
|
||||
}
|
||||
set -e
|
||||
|
||||
if [ "$rectorResult" -ne 0 ];then
|
||||
echo "Rector failed"
|
||||
return $rectorResult
|
||||
fi
|
||||
|
||||
cd "$lastDir" || exit
|
||||
}
|
||||
|
||||
############################
|
||||
# 校验单个 php 文件语法
|
||||
# 返回值
|
||||
# 0 没有语法错误
|
||||
# 1 语法异常,或是执行时异常
|
||||
############################
|
||||
syntaxCheck() {
|
||||
phpVersion="$1"
|
||||
phpFilePath="$2"
|
||||
|
||||
phpCli=$(which php"${phpVersion}")
|
||||
|
||||
$phpCli -l "$phpFilePath" | grep -v 'No syntax errors detected' && return 1 || return 0
|
||||
}
|
||||
|
||||
########################################
|
||||
# 确保php文件语法正确
|
||||
# 第一次校验失败后,对文件所在目录执行一次降级
|
||||
# 再做第二次校验,如继续失败,返回错误
|
||||
########################################
|
||||
ensureSyntaxPassed() {
|
||||
phpVersion="$1"
|
||||
phpFilePath="$2"
|
||||
beforeMD5=$(md5sum "$phpFilePath" | awk '{print $1}')
|
||||
|
||||
if syntaxCheck "$phpVersion" "$phpFilePath";then
|
||||
echo "Syntax OK, $phpFilePath"
|
||||
else
|
||||
downGradeDir "$phpVersion" "nocache" "$(dirname "$phpFilePath")"
|
||||
afterMD5=$(md5sum "$phpFilePath" | awk '{print $1}')
|
||||
if ! syntaxCheck "$phpVersion" "$phpFilePath";then
|
||||
echo "downgrade failed"
|
||||
echo "md5 compare (before:$beforeMD5) (after:$afterMD5)"
|
||||
return 1
|
||||
else
|
||||
echo "Syntax OK, $phpFilePath"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
#########################################
|
||||
# 将变更的文件打包
|
||||
# 判断条件为文件修改时间晚于脚本开始执行的时间
|
||||
#########################################
|
||||
archiveChangedFiles() {
|
||||
phpVersion="$1"
|
||||
pointTime=$2
|
||||
archiveDir=$3
|
||||
|
||||
find "$archiveDir" -type f -newermt "$pointTime" -printf "%P\n" > /tmp/changedFiles
|
||||
|
||||
lastDir=$PWD
|
||||
cd "$archiveDir" || exit 1
|
||||
mkdir -p build/
|
||||
|
||||
downPatchFile="${archiveDir}/build/downgrade-php$phpVersion.tar.gz"
|
||||
tar zcf "$downPatchFile" --files-from=/tmp/changedFiles
|
||||
echo "Release downgrade patch file: $downPatchFile"
|
||||
|
||||
cd "$lastDir"
|
||||
}
|
||||
|
||||
# 正则匹配要排除的文件,跳过校验
|
||||
matchExclude() {
|
||||
filePath="$1"
|
||||
for reg in "${excludeRegexList[@]}"
|
||||
do
|
||||
if [[ "$filePath" =~ $reg ]];then
|
||||
echo "true"
|
||||
return
|
||||
fi
|
||||
done
|
||||
echo "false"
|
||||
}
|
||||
|
||||
#############################
|
||||
# 对单个 php 版本降级的主函数
|
||||
# 参数:
|
||||
# 1. php 版本
|
||||
# 2. 起始时间, 用于比较降级后变更的文件
|
||||
# * 降级目录列表
|
||||
# 步骤:
|
||||
# 设置临时缓存目录,执行降级
|
||||
# 对降级目录里所有 php 文件校验语法,确保通过
|
||||
# 打包变更文件
|
||||
########################################
|
||||
DownGrade() {
|
||||
phpVersion="$1"
|
||||
pointTime="$2"
|
||||
shift 2
|
||||
|
||||
downDirs=("$@")
|
||||
RECTOR_CACHE_DIR=$(mktemp -d)
|
||||
export RECTOR_CACHE_DIR
|
||||
|
||||
startTime="$(date +%s)"
|
||||
|
||||
if which parallel >/dev/null ;then
|
||||
downGradeDir "$phpVersion" parallel "${downDirs[@]}"
|
||||
else
|
||||
for d in "${downDirs[@]}"
|
||||
do
|
||||
downGradeDir "$phpVersion" "$d"
|
||||
done
|
||||
fi
|
||||
|
||||
for f in $(find "${downGradeDirs[@]}" -type f -name '*.php')
|
||||
do
|
||||
shouldIgnore=$(matchExclude "$f")
|
||||
if [ "$shouldIgnore" = "true" ];then
|
||||
echo "$f is excluded"
|
||||
continue
|
||||
fi
|
||||
ensureSyntaxPassed "$phpVersion" "$f"
|
||||
done
|
||||
|
||||
archiveChangedFiles "$phpVersion" "$pointTime" "$codeRootDir"
|
||||
test -d "$RECTOR_CACHE_DIR" && rm -rf "$RECTOR_CACHE_DIR"
|
||||
|
||||
endTime="$(date +%s)"
|
||||
echo "downgrade to ${phpVersion} cost $((endTime-startTime)) seconds"
|
||||
echo
|
||||
}
|
||||
|
||||
# 设置脚本启动时间
|
||||
startPointTime=$(date +'%Y-%m-%d %H:%M:%S')
|
||||
|
||||
# 执行 composer 组件安装
|
||||
if [ "$installRector" = "true" ];then
|
||||
lastDir=$PWD
|
||||
cd "$composerDir" || exit 1
|
||||
|
||||
composer config -g repo.packagist composer https://mirrors.cloud.tencent.com/composer/
|
||||
composer install
|
||||
|
||||
cd "$lastDir" || exit 1
|
||||
fi
|
||||
|
||||
# 检查 -p 参数, 执行多版本降级或是单版本降级
|
||||
if [[ "$phpVer" =~ ^.*, ]];then
|
||||
IFS=',' read -r -a verList <<< "$phpVer"
|
||||
for v in "${verList[@]}"
|
||||
do
|
||||
existsPHPCli "$v" || (echo "php${v} is not found, abort."; exit 3)
|
||||
done
|
||||
|
||||
for v in "${verList[@]}"
|
||||
do
|
||||
DownGrade "$v" "$startPointTime" "${downGradeDirs[@]}"
|
||||
done
|
||||
else
|
||||
existsPHPCli "$phpVer" || (echo "php${phpVer} is not found, abort."; exit 3)
|
||||
DownGrade "$phpVer" "$startPointTime" "${downGradeDirs[@]}"
|
||||
fi
|
||||
|
||||
|
||||
|
||||
# syntaxCheck "$phpVer" /code/module/pipeline/model.php
|
||||
# downGradeDir "$phpVer" "${downGradeDirs[@]}"
|
||||
# archiveChangedFiles "$t" "$codeRootDir"
|
||||
+11
-11
@@ -58,30 +58,30 @@ blankLine
|
||||
subGroupPath=`echo $GIT_TAG_BUILD_GROUP | sed 's/\./\//'`
|
||||
|
||||
outputLine "#### 下载地址"
|
||||
|
||||
outputLine "##### 开源版"
|
||||
outputFrame "[${PMS_VERSION} (中文)](${ARTIFACT_PROTOCOL}://${ARTIFACT_HOST}/service/rest/repository/browse/${ARTIFACT_REPOSITORY}/zentao/pmsPack/$subGroupPath/ZenTaoPMS/${PMS_VERSION}/)"
|
||||
outputFrame "\t\t"
|
||||
outputLine "[${PMS_VERSION} (English)](${ARTIFACT_PROTOCOL}://${ARTIFACT_HOST}/service/rest/repository/browse/${ARTIFACT_REPOSITORY}/zentao/pmsPack/$subGroupPath/ZenTaoALM/${PMS_VERSION}/)"
|
||||
|
||||
outputLine "##### 企业版"
|
||||
|
||||
outputFrame "[${BIZ_VERSION:3} (中文)](${ARTIFACT_PROTOCOL}://${ARTIFACT_HOST}/service/rest/repository/browse/${ARTIFACT_REPOSITORY}/zentao/bizPack/$subGroupPath/ZenTaoPMS/${BIZ_VERSION}/)"
|
||||
outputFrame "\t\t"
|
||||
outputLine "[${BIZ_VERSION:3} 升级包 (中文)](${ARTIFACT_PROTOCOL}://${ARTIFACT_HOST}/service/rest/repository/browse/${ARTIFACT_REPOSITORY}/zentao/bizPack/$subGroupPath/ZenTaoPMS.update/${BIZ_VERSION}/)"
|
||||
outputLine "[${BIZ_VERSION:3} (English)](${ARTIFACT_PROTOCOL}://${ARTIFACT_HOST}/service/rest/repository/browse/${ARTIFACT_REPOSITORY}/zentao/bizPack/$subGroupPath/ZenTaoALM/${BIZ_VERSION}/)"
|
||||
|
||||
outputFrame "[${BIZ_VERSION:3} (English)](${ARTIFACT_PROTOCOL}://${ARTIFACT_HOST}/service/rest/repository/browse/${ARTIFACT_REPOSITORY}/zentao/bizPack/$subGroupPath/ZenTaoALM/${BIZ_VERSION}/)"
|
||||
outputFrame "\t"
|
||||
outputLine "[${BIZ_VERSION:3} 升级包 (English)](${ARTIFACT_PROTOCOL}://${ARTIFACT_HOST}/service/rest/repository/browse/${ARTIFACT_REPOSITORY}/zentao/bizPack/$subGroupPath/ZenTaoALM.update/${BIZ_VERSION}/)"
|
||||
|
||||
outputLine "##### 旗舰版"
|
||||
|
||||
outputFrame "[${MAX_VERSION:3} (中文)](${ARTIFACT_PROTOCOL}://${ARTIFACT_HOST}/service/rest/repository/browse/${ARTIFACT_REPOSITORY}/zentao/maxPack/$subGroupPath/ZenTaoPMS/${MAX_VERSION}/)"
|
||||
outputFrame "\t\t"
|
||||
outputLine "[${MAX_VERSION:3} 升级包 (中文)](${ARTIFACT_PROTOCOL}://${ARTIFACT_HOST}/service/rest/repository/browse/${ARTIFACT_REPOSITORY}/zentao/maxPack/$subGroupPath/ZenTaoPMS.update/${MAX_VERSION}/)"
|
||||
outputLine "[${MAX_VERSION:3} (English)](${ARTIFACT_PROTOCOL}://${ARTIFACT_HOST}/service/rest/repository/browse/${ARTIFACT_REPOSITORY}/zentao/maxPack/$subGroupPath/ZenTaoALM/${MAX_VERSION}/)"
|
||||
|
||||
outputFrame "[${MAX_VERSION:3} (English)](${ARTIFACT_PROTOCOL}://${ARTIFACT_HOST}/service/rest/repository/browse/${ARTIFACT_REPOSITORY}/zentao/maxPack/$subGroupPath/ZenTaoALM/${MAX_VERSION}/)"
|
||||
outputFrame "\t"
|
||||
outputLine "[${MAX_VERSION:3} 升级包 (English)](${ARTIFACT_PROTOCOL}://${ARTIFACT_HOST}/service/rest/repository/browse/${ARTIFACT_REPOSITORY}/zentao/maxPack/$subGroupPath/ZenTaoALM.update/${MAX_VERSION}/)"
|
||||
|
||||
if [ -n "$IPD_VERSION" ];then
|
||||
outputLine "##### IPD版"
|
||||
outputFrame "[${IPD_VERSION:3} (中文)](${ARTIFACT_PROTOCOL}://${ARTIFACT_HOST}/service/rest/repository/browse/${ARTIFACT_REPOSITORY}/zentao/ipdPack/$subGroupPath/ZenTaoPMS/${IPD_VERSION}/)"
|
||||
outputFrame "\t\t"
|
||||
outputLine "[${IPD_VERSION:3} (English)](${ARTIFACT_PROTOCOL}://${ARTIFACT_HOST}/service/rest/repository/browse/${ARTIFACT_REPOSITORY}/zentao/ipdPack/$subGroupPath/ZenTaoALM/${IPD_VERSION}/)"
|
||||
fi
|
||||
|
||||
outputLine "##### 历史版本"
|
||||
outputLine "[查看历史版本](${ARTIFACT_PROTOCOL}://${ARTIFACT_HOST}/#browse/browse:easycorp-snapshot)"
|
||||
outputLine "[查看历史版本](${ARTIFACT_PROTOCOL}://${ARTIFACT_HOST}/#browse/browse:${ARTIFACT_REPOSITORY})"
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
use Rector\Config\RectorConfig;
|
||||
use Rector\Set\ValueObject\DowngradeLevelSetList;
|
||||
use Rector\Set\ValueObject\DowngradeSetList;
|
||||
use Rector\Core\ValueObject\PhpVersion;
|
||||
use Rector\Caching\ValueObject\Storage\FileCacheStorage;
|
||||
|
||||
$version = getenv('PHP_VERSION');
|
||||
$version = $version ?: '72';
|
||||
$cacheDir = getenv('RECTOR_CACHE_DIR');
|
||||
$cacheDir = $cacheDir ?: '/tmp/rector_cached_files';
|
||||
|
||||
return static function (RectorConfig $rectorConfig) use ($version,$cacheDir): void {
|
||||
$rectorConfig->skip([
|
||||
'test/*',
|
||||
]);
|
||||
$rectorConfig->phpVersion(constant(PhpVersion::class . '::PHP_' . $version));
|
||||
$rectorConfig->sets([constant(DowngradeLevelSetList::class . '::DOWN_TO_PHP_' . $version)]);
|
||||
// $rectorConfig->sets([constant(DowngradeSetList::class . '::PHP_' . $version)]);
|
||||
$rectorConfig->cacheClass(FileCacheStorage::class);
|
||||
$rectorConfig->cacheDirectory($cacheDir);
|
||||
};
|
||||
Reference in New Issue
Block a user