443 lines
17 KiB
Plaintext
443 lines
17 KiB
Plaintext
pipeline {
|
|
agent {
|
|
kubernetes {
|
|
inheritFrom "xuanim"
|
|
yamlFile 'misc/ci/normal.yaml'
|
|
}
|
|
}
|
|
|
|
options {
|
|
skipDefaultCheckout()
|
|
}
|
|
|
|
environment {
|
|
TZ="Asia/Shanghai"
|
|
|
|
ZENTAO_RELEASE_PATH = "${WORKSPACE}/release"
|
|
XUANXUAN_SRC_PATH = "${WORKSPACE}/xuansrc"
|
|
SRC_ZDOO_PATH = "${WORKSPACE}/zdoo"
|
|
SRC_ZDOOEXT_PATH = "${WORKSPACE}/zdooext"
|
|
SRC_ZENTAOEXT_PATH = "${WORKSPACE}/zentaoext"
|
|
|
|
MIDDLE_IMAGE_REPO = "hub.qc.oop.cc/zentao-package-ext"
|
|
MIDDLE_IMAGE_TAG = """${sh(
|
|
returnStdout: true,
|
|
script: 'date +%Y%m%d%H%M-${BUILD_ID}'
|
|
).trim()}"""
|
|
|
|
MIRROR = "true"
|
|
|
|
BUILD_BASIC = "true"
|
|
PUBLISH_ZIP = "true"
|
|
PUBLISH_IMAGE = "true"
|
|
PUBLISH_ZBOX = "true"
|
|
|
|
// set to blank for auto-detect from ci.json
|
|
DOWNGRADE_ENABLED = "false"
|
|
DOWNGRADE_VERSIONS = ""
|
|
}
|
|
|
|
stages {
|
|
|
|
stage("Basic Build") {
|
|
|
|
agent {
|
|
kubernetes {
|
|
inheritFrom "zentao-package build-docker xuanim"
|
|
yamlFile 'misc/ci/basic-build.yaml'
|
|
}
|
|
}
|
|
|
|
stages {
|
|
stage("Pull") {
|
|
steps {
|
|
checkout scm
|
|
script {
|
|
env.XUANVERSION = sh(returnStdout: true,script: 'jq -r .pkg.xuanxuan.gitVersion < ci.json').trim()
|
|
env.ZENTAOEXT_VERSION = sh(returnStdout: true,script: 'jq -r .pkg.zentaoext.gitVersion < ci.json').trim()
|
|
env.ZENTAOEXT_GIT_REPO = sh(returnStdout: true,script: 'jq -r .pkg.zentaoext.gitRepo < ci.json').trim()
|
|
env.ZDOO_VERSION = sh(returnStdout: true,script: 'jq -r .pkg.zdoo.gitVersion < ci.json').trim()
|
|
env.ZDOOEXT_VERSION = sh(returnStdout: true,script: 'jq -r .pkg.zdooext.gitVersion < ci.json').trim()
|
|
|
|
}
|
|
|
|
dir('xuansrc') {
|
|
checkout scmGit(branches: [[name: "${env.XUANVERSION}"]],
|
|
userRemoteConfigs: [[credentialsId: 'git-zcorp-cc-jenkins-bot-http', url: 'https://git.zcorp.cc/easycorp/xuanxuan.git']]
|
|
)
|
|
}
|
|
|
|
dir('zdoo') {
|
|
checkout scmGit(branches: [[name: "${env.ZDOO_VERSION}"]],
|
|
extensions: [cloneOption(depth: 2, noTags: false, reference: '', shallow: true)],
|
|
userRemoteConfigs: [[credentialsId: 'git-zcorp-cc-jenkins-bot-http', url: 'https://git.zcorp.cc/easycorp/zdoo.git']]
|
|
)
|
|
}
|
|
|
|
dir('zdooext') {
|
|
checkout scmGit(branches: [[name: "${env.ZDOOEXT_VERSION}"]],
|
|
extensions: [cloneOption(depth: 2, noTags: false, reference: '', shallow: true)],
|
|
userRemoteConfigs: [[credentialsId: 'git-zcorp-cc-jenkins-bot-http', url: 'https://git.zcorp.cc/easycorp/zdooext.git']]
|
|
)
|
|
}
|
|
|
|
dir('zentaoext') {
|
|
checkout scmGit(branches: [[name: "${env.ZENTAOEXT_VERSION}"]],
|
|
extensions: [cloneOption(depth: 2, noTags: false, reference: '', shallow: true)],
|
|
userRemoteConfigs: [[credentialsId: 'git-zcorp-cc-jenkins-bot-http', url: "${env.ZENTAOEXT_GIT_REPO}"]]
|
|
)
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
stage("Setup Global Env") {
|
|
steps {
|
|
script {
|
|
env.GIT_URL = sh(returnStdout: true, script: 'git config --get remote.origin.url').trim()
|
|
env.GIT_COMMIT = sh(returnStdout: true, script: 'git rev-parse HEAD').trim()
|
|
env.GIT_TAG_BUILD_TYPE = 'snapshot'
|
|
env.GIT_TAG_BUILD_GROUP = sh(returnStdout: true, script: 'echo `date +%Y%m%d`.devops').trim()
|
|
env.GIT_TAGGER_NAME = sh(returnStdout: true, script: 'git show -s --format=%an').trim()
|
|
|
|
env.CI_PUBLIC_IMAGE_NAMESPACE = sh(returnStdout: true,script: 'jq -r .image.public.namespace.' + env.GIT_TAG_BUILD_TYPE + ' < ci.json').trim()
|
|
env.CI_INTERNAL_IMAGE_NAMESPACE = sh(returnStdout: true,script: 'jq -r .image.internal.namespace.' + env.GIT_TAG_BUILD_TYPE + ' < ci.json').trim()
|
|
|
|
// def ximUsers = sh(returnStdout: true,script: 'jq -r .notice.users < ci.json').trim()
|
|
env.XIM_USERS = 'qishiyao,zhaoke,zhengyuansheng'
|
|
// env.XIM_GROUPS = sh(returnStdout: true,script: 'jq -r .notice.groups < ci.json').trim()
|
|
|
|
env.PMS_VERSION = sh(returnStdout: true, script: 'cat ${SRC_ZENTAOEXT_PATH}/VERSION').trim()
|
|
env.BIZ_VERSION = sh(returnStdout: true, script: 'cat ${SRC_ZENTAOEXT_PATH}/BIZVERSION').trim()
|
|
env.MAX_VERSION = sh(returnStdout: true, script: 'cat ${SRC_ZENTAOEXT_PATH}/MAXVERSION').trim()
|
|
env.IPD_VERSION = sh(returnStdout: true, script: 'cat ${SRC_ZENTAOEXT_PATH}/IPDVERSION').trim()
|
|
|
|
env.CI_DOWNGRADE_ENABLED = sh(returnStdout: true, script: 'test -n "${DOWNGRADE_ENABLED}" && echo ${DOWNGRADE_ENABLED} || (jq -r .downgrade.enabled < ci.json)').trim()
|
|
env.ARTIFACT_REPOSITORY = sh(returnStdout: true, script: 'misc/parse_tag.sh $TAG_NAME type | grep release >/dev/null && echo easycorp || echo easycorp-snapshot').trim()
|
|
env.ARTIFACT_HOST = "nexus.qc.oop.cc"
|
|
env.ARTIFACT_PROTOCOL = "https"
|
|
env.ARTIFACT_CRED_ID = "nexus-jenkins"
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
stage("Build") {
|
|
when {
|
|
environment name:'BUILD_BASIC', value:'true'
|
|
}
|
|
stages {
|
|
stage("make ciCommon") {
|
|
steps {
|
|
container('xuanimbot') {
|
|
sh 'git config --global --add safe.directory $(pwd)'
|
|
sh '/usr/local/bin/xuanimbot --title "`echo -n 5byA5aeL5p6E5bu656aF6YGT | base64 --decode`" --url "${BUILD_URL}" --content "Build by Tag ${TAG_NAME}" --debug --custom'
|
|
}
|
|
withCredentials([gitUsernamePassword(credentialsId: 'git-zcorp-cc-jenkins-bot-http',gitToolName: 'git-tool')]) {
|
|
container('package') {
|
|
sh 'mkdir ${ZENTAO_RELEASE_PATH} && chown 1000:1000 ${ZENTAO_RELEASE_PATH}'
|
|
sh 'git config --global pull.ff only'
|
|
sh 'cp -av ${ZENTAO_BUILD_PATH}/adminer www/'
|
|
sh 'pwd && ls -l && make ciCommon'
|
|
sh 'ls -l ${ZENTAO_RELEASE_PATH}'
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
stage("zentaoext") {
|
|
steps {
|
|
container('package') {
|
|
sh 'cd $SRC_ZENTAOEXT_PATH && make'
|
|
sh 'cp ${ZENTAO_BUILD_PATH}/zentao*.zip ./'
|
|
sh 'cp ${ZENTAO_BUILD_PATH}/docker/Dockerfile.release.ext ./Dockerfile.release.ext'
|
|
}
|
|
container('docker') {
|
|
sh 'docker build --pull -t ${MIDDLE_IMAGE_REPO}:${MIDDLE_IMAGE_TAG} -f Dockerfile.release.ext ${ZENTAO_RELEASE_PATH}'
|
|
sh 'docker push ${MIDDLE_IMAGE_REPO}:${MIDDLE_IMAGE_TAG}'
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
} // End Build
|
|
}
|
|
}
|
|
|
|
stage("Publish") {
|
|
environment {
|
|
OUTPUT_PKG_PATH = "${ZENTAO_RELEASE_PATH}/output"
|
|
}
|
|
|
|
stages {
|
|
stage("Merge and Upload") {
|
|
when {
|
|
environment name:'PUBLISH_ZIP', value:'true'
|
|
}
|
|
matrix {
|
|
agent {
|
|
kubernetes {
|
|
containerTemplate {
|
|
name "package"
|
|
image "${MIDDLE_IMAGE_REPO}:${MIDDLE_IMAGE_TAG}"
|
|
command "sleep"
|
|
args "99d"
|
|
}
|
|
}
|
|
}
|
|
options {
|
|
skipDefaultCheckout()
|
|
}
|
|
|
|
axes {
|
|
axis {
|
|
name "ZLANG"
|
|
values "cn"
|
|
}
|
|
axis {
|
|
name "PHPVERSION"
|
|
values "k8s.php8.1"
|
|
}
|
|
}
|
|
excludes {
|
|
exclude {
|
|
axis {
|
|
name 'ZLANG'
|
|
values 'en'
|
|
}
|
|
axis {
|
|
name "PHPVERSION"
|
|
values "k8s.php7.2_7.4", "k8s.php8.1"
|
|
}
|
|
}
|
|
}
|
|
|
|
stages {
|
|
|
|
stage("ZIP") {
|
|
environment {
|
|
ARTIFACT_NAME = """${sh(
|
|
returnStdout: true,
|
|
script: 'test ${ZLANG} = cn && echo -n ZenTaoPMS || echo -n ZenTaoALM'
|
|
).trim()}"""
|
|
INT_FLAG = """${sh(
|
|
returnStdout: true,
|
|
script: 'test ${ZLANG} = cn && echo -n "int." || echo -n ""'
|
|
).trim()}"""
|
|
}
|
|
|
|
stages {
|
|
stage("package zip") {
|
|
steps{
|
|
echo "${env.ZLANG} <=> ${env.PHPVERSION}"
|
|
container('package') {
|
|
sh 'mkdir $ZENTAO_RELEASE_PATH'
|
|
sh '${ZENTAO_BUILD_PATH}/package.sh zip'
|
|
sh 'mkdir $OUTPUT_PKG_PATH'
|
|
}
|
|
}
|
|
}
|
|
|
|
stage("upload zip") {
|
|
steps {
|
|
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: env.ARTIFACT_NAME,
|
|
classifier: env.PHPVERSION,
|
|
file: env.ZENTAO_RELEASE_PATH + '/base.zip',
|
|
type: '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 {
|
|
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
|
|
|
|
stage("syspack") {
|
|
when {
|
|
// buildingTag()
|
|
environment name: 'GIT_TAG_BUILD_TYPE', value: 'release'
|
|
}
|
|
steps{
|
|
sh 'env | grep GIT_TAG'
|
|
container('package') {
|
|
sh '${ZENTAO_BUILD_PATH}/package.sh deb'
|
|
sh '${ZENTAO_BUILD_PATH}/package.sh rpm'
|
|
}
|
|
}
|
|
}
|
|
|
|
stage("upload syspack") {
|
|
when {
|
|
environment name: 'GIT_TAG_BUILD_TYPE', value: 'release'
|
|
}
|
|
|
|
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'
|
|
}
|
|
} // End upload syspack cn
|
|
} // end stages
|
|
} // end stage frame
|
|
|
|
} // End matrix stages
|
|
} // End matrix
|
|
|
|
} // End Merge and Upload Max
|
|
|
|
stage("Notice ZIP") {
|
|
when {
|
|
environment name:'PUBLISH_ZIP', value:'true'
|
|
}
|
|
steps {
|
|
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/devops/zentao-package.git']]
|
|
)
|
|
container('xuanimbot') {
|
|
sh 'env | grep GIT'
|
|
sh 'git config --global --add safe.directory $(pwd)'
|
|
sh './gen_build_report.sh > success.md'
|
|
sh '/usr/local/bin/xuanimbot --title "`echo -n 56aF6YGT5rqQ56CB5YyF5p6E5bu65oiQ5Yqf | base64 --decode`" --url "${RUN_DISPLAY_URL}" --content-file success.md --debug --custom'
|
|
}
|
|
}
|
|
}
|
|
|
|
stage("Docker Image") {
|
|
when {
|
|
environment name:'PUBLISH_IMAGE', value:'true'
|
|
}
|
|
|
|
agent {
|
|
kubernetes {
|
|
inheritFrom "dind xuanim"
|
|
yamlFile 'misc/ci/publish-image.yaml'
|
|
}
|
|
}
|
|
|
|
environment {
|
|
REGISTRY_HOST="hub.zentao.net"
|
|
CI_BUILD_PUBLIC_IMAGE="true"
|
|
CI_PHP_VER="8.1.23"
|
|
}
|
|
|
|
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']]
|
|
)
|
|
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 tzdata"
|
|
sh "make markdown-init"
|
|
}
|
|
}
|
|
}
|
|
|
|
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-k8s'
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
stage("Notice Image") {
|
|
steps {
|
|
container('docker') {
|
|
sh 'make markdown-render > ./report.md'
|
|
}
|
|
container('xuanimbot') {
|
|
sh 'git config --global --add safe.directory $(pwd)'
|
|
sh '/usr/local/bin/xuanimbot --title "`echo -n 56aF6YGT6ZWc5YOP5p6E5bu65oiQ5Yqf | base64 --decode`" --url "${RUN_DISPLAY_URL}" --content-file ./report.md --debug --custom'
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
} // End Docker Image
|
|
|
|
}
|
|
|
|
post {
|
|
failure {
|
|
container('xuanimbot') {
|
|
sh 'git config --global --add safe.directory $(pwd)'
|
|
sh '/usr/local/bin/xuanimbot --title "zentaopms build failed" --url "${BUILD_URL}" --content "" --debug --custom'
|
|
}
|
|
}
|
|
}
|
|
} // end publish
|
|
|
|
}
|
|
|
|
}
|
|
|