179 lines
5.9 KiB
Groovy
179 lines
5.9 KiB
Groovy
def depots = [
|
||
[
|
||
name: "${PROJECT_NAME}",
|
||
origin: "${GIT_SSH_URL}",
|
||
]
|
||
]
|
||
def getCheckoutJob(depot) {
|
||
return {
|
||
dir(path: "./modules/${depot.get('name')}") {
|
||
checkout([$class: 'GitSCM', branches: [[name: env.GIT_BUILD_REF]],
|
||
userRemoteConfigs: [[url: depot.get('origin'), credentialsId: env.CREDENTIALS_ID]]])
|
||
script {
|
||
if (depot.get('name') == 'coding-artifacts') {
|
||
sh 'git submodule sync'
|
||
sh 'git submodule update --init --recursive'
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
def application_name = env.APPLICATION_NAME.split(",")
|
||
def ports = env.PROTOCOL_PORTS.split(",")
|
||
def jobs = []
|
||
application_name.eachWithIndex{
|
||
it,i -> jobs[i]=[application_name[i],ports[i]]
|
||
|
||
}
|
||
|
||
def parallelStagesMap = jobs.collectEntries {
|
||
["检测tsf应用${it[0]}" : generateStage(it)]
|
||
}
|
||
def generateStage(jdata) {
|
||
echo '${project_pub_name}'
|
||
return {
|
||
stage("stage: ${project_pub_name}") {
|
||
echo "${jdata[0]}"
|
||
checkTsfApplication secretId: "${env.SECRET_ID}", secretKey: "${env.SECRET_KEY}", applicationName: "${project_pub_name}", applicationType: "${env.APPLICATION_TYPE}", endpoint: "${env.TSF_ENDPOINT}", microserviceType: "${env.MICROSERVICE_TYPE}"
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
def parallelStagesMap2 = jobs.collectEntries {
|
||
["部署tsf应用${it[0]}" : generateStage2(it)]
|
||
}
|
||
def generateStage2(jdata) {
|
||
echo '${project_pub_name}'
|
||
return {
|
||
stage("stage: ${project_pub_name}") {
|
||
echo "${jdata[0]}"
|
||
deployTsf secretId: "${env.SECRET_ID}", secretKey: "${env.SECRET_KEY}", endpoint: "${env.TSF_ENDPOINT}", applicationName: "${project_pub_name}", clusterName: "${env.CLUSTER_NAME}", namespace: "${DEPLOY_ENV}", groupName: "${project_pub_name}-${DY_ENV}", pkgVersion: "${VERSION}-${DEPLOY_ENV}", protocolPorts: "[{Protocol:\"TCP\",Port:"+"${jdata[1]}"+",TargetPort:" +"${jdata[1]}"+"}]", accessType: "${env.ACCESS_TYPE}", updateType: "${env.UPDATE_TYPE}", businessLogNames: "${logpath}"
|
||
}
|
||
}
|
||
}
|
||
def deploy_env = "${DEPLOY_ENV}"
|
||
def createDY_ENV() {
|
||
return deploy_env.split("-")[1]
|
||
}
|
||
|
||
def createName() {
|
||
return deploy_env.split("-")[0]
|
||
}
|
||
|
||
// TODO: 这里应该要根据实际的运行域决定,待整理规范
|
||
def getClusterName() {
|
||
if (env.DEPLOY_ENV.contains("dev") ){
|
||
return "IPC-public-开发环境"
|
||
}
|
||
else if (env.DEPLOY_ENV.contains("test") ){
|
||
return "IPC-public-测试环境"
|
||
}
|
||
else {
|
||
return "IPC-public-演示环境"
|
||
}
|
||
}
|
||
|
||
|
||
pipeline {
|
||
agent any
|
||
|
||
stages {
|
||
stage("检出项目代码仓库") {
|
||
steps {
|
||
checkout([$class: 'GitSCM', branches: [[name: env.SUB_BRANCH]],
|
||
userRemoteConfigs: [[url: "${env.SUB_GIT_REPO_URL}/${project_name}.git", credentialsId: env.SUB_CREDENTIALS_ID]]])
|
||
script {
|
||
sh """
|
||
echo "machine git.code.tencent.com" > ~/.netrc
|
||
echo "login ${GIT_USERNAME}" >> ~/.netrc
|
||
echo "password ${GIT_PASSWORD}" >> ~/.netrc
|
||
"""
|
||
sh 'cat ~/.netrc'
|
||
sh 'git submodule sync'
|
||
sh 'git submodule update --init --recursive'
|
||
|
||
}
|
||
}
|
||
}
|
||
stage('检出子仓库') {
|
||
steps {
|
||
script {
|
||
checkoutJobs = [:]
|
||
depots.findAll{
|
||
depot -> (depot.get('origin') != '')
|
||
}.each { depot ->
|
||
echo "submodule > ${depot}"
|
||
checkoutJobs[depot.get('name')] = getCheckoutJob(depot)
|
||
checkoutJobs['failFast'] = false
|
||
}
|
||
parallel checkoutJobs
|
||
}
|
||
}
|
||
}
|
||
stage('校验tsf环境') {
|
||
steps{
|
||
script {
|
||
parallel parallelStagesMap
|
||
}
|
||
}
|
||
}
|
||
stage('编译构建') {
|
||
|
||
agent {
|
||
docker {
|
||
image 'ipcmaven.pdcts.com.cn:8082/npm:tsf'
|
||
args '-u root --network=host -v /var/run/docker.sock:/var/run/docker.sock --add-host=raw.githubusercontent.com:199.232.28.133 -v /usr/bin/docker:/usr/bin/docker -v /etc/hosts:/etc/hosts'
|
||
reuseNode true
|
||
}
|
||
}
|
||
steps {
|
||
script {
|
||
withCredentials([usernamePassword(credentialsId: "${DOCKER_REGISTRY_CREDENTIALS_ID}", usernameVariable: 'REGISTRY_USER', passwordVariable: 'REGISTRY_PASS')]) {
|
||
sh """
|
||
pwd
|
||
ls -ls .
|
||
ls -ls ./modules
|
||
npm config ls
|
||
mv ./modules/${DEPOT_NAME}/build .
|
||
# 编译构建
|
||
bash -e build/build.sh ${TSF_REPO} ${project_pub_name} ${HARBOR_ACCOUNT_NAME} ${HARBOR_PASSWORD} ${image_version} ${BUILD_TYPE} ${NPM_BUILD_SCRIPT}
|
||
"""
|
||
}
|
||
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
stage('触发tsf部署') {
|
||
when {
|
||
environment name:'DEPLOY_ENABLE', value:'true'
|
||
}
|
||
steps {
|
||
script {
|
||
parallel parallelStagesMap2
|
||
}
|
||
sh """
|
||
# 如果还要执行别的一些sh命令,可在此添加,比如企业微信的通知机器人
|
||
"""
|
||
}
|
||
}
|
||
}
|
||
environment {
|
||
PROTOCOL = 'http' // 系统预留参数
|
||
APPLICATION_TYPE = 'C' // 项目类型,系统预留参数
|
||
MICROSERVICE_TYPE = 'N' // 系统预留参数
|
||
DY_ENV = createDY_ENV() // 环境
|
||
PName = createName() // 项目组名passid和里约网关passid一致
|
||
image_version = "${VERSION}-${DEPLOY_ENV}" // 镜像版本
|
||
project_name = "${APPLICATION_NAME}" // 项目工程名称
|
||
project_pub_name = "${PName}-${GIT_PROJECT_NAME ? GIT_PROJECT_NAME : project_name}" // TSF 项目名称
|
||
UPDATE_TYPE = "1" // 更新类型,运维预留参数,暂时未启用
|
||
ACCESS_TYPE = "2" // 制品类型,运维预留参数,暂时未启用
|
||
BUILD_TYPE = "${BUILD_TYPE}" // 编译类型
|
||
CLUSTER_NAME = getClusterName() // 部署组名称
|
||
logpath = "${PName}-web-logs" // 日志名称
|
||
}
|
||
}
|