//gitlab凭据
def git_auth='8c8a0774-7d4c-48a9-8f52-dd1a04f71320'
//sonar token凭据
def sonar_token='869f9770-0467-496a-84f9-d7b2c729fd8f'
//构建版本的名称
def tag = "latest"
//Harbor私服地址
def harbor_url = '192.168.137.130'
//Harbor项目名称
def harbor_project_name = 'tensquare'
//Harbor凭据
def harbor_auth = 'e70d6e6b-5c46-4dd4-b96a-fb59f6d2443c'
node {
//把选择的项目信息转换为数组
def selectedProjects = "${project_name}".split(',')
//把选择的服务信息转换为数组
def selectedServers = "${publish_server}".split(',')
stage('拉取代码') {
checkout scmGit(branches: [[name: "*/${branch}"]],
extensions: [cleanBeforeCheckout()],
userRemoteConfigs: [[credentialsId: "${git_auth}",
url: 'http://192.168.137.129/root/tensquare_backend.git']])
}
stage('代码审查') {
def scannerHome = tool 'sonar-scanner'
withSonarQubeEnv(credentialsId: "${sonar_token}") {
for (int i=0;i<selectedProjects.size();i++){
//取出每个项目的名称和端口
def currentProject = selectedProjects[i]
//项目名称
def currentProjectName = currentProject.split('@')[0]
//项目端口
def currentProjectPort = currentProject.split('@')[1]
sh """
cd ${currentProjectName}
sed -i "s#project_name#${currentProjectName}#g" sonar-project.properties
${scannerHome}/bin/sonar-scanner
"""
echo "${currentProjectName} 完成代码审查"
}
}
}
stage('整体构建') {
def mvnHome = tool 'M2'
//编译、整体构建,每个stage都会重新回到${WORKSPACE}
sh " ${mvnHome}/bin/mvn clean package "
}
stage('构建镜像、推送harbor') {
for (int i=0;i<selectedProjects.size();i++){
//取出每个项目的名称和端口
def currentProject = selectedProjects[i]
//项目名称
def currentProjectName = currentProject.split('@')[0]
//项目端口
def currentProjectPort = currentProject.split('@')[1]
def imageName = "${harbor_url}/${harbor_project_name}/${currentProjectName}:${tag}"
//生成镜像
sh " cd ${currentProjectName} && docker build -t ${imageName} --build-arg JAR_FILE=target/${currentProjectName}-1.0-SNAPSHOT.jar . "
//登录harbor并上传镜像
withCredentials([usernamePassword(credentialsId: "${harbor_auth}", passwordVariable: 'password', usernameVariable: 'username')]) {
//登录
sh " docker login -u ${username} -p ${password} ${harbor_url} "
//上传镜像
sh " docker push ${imageName} "
}
//删除本地镜像
sh " docker rmi ${imageName} "
for (int j=0;j<selectedServers.size();j++){
//服务名称
def currentServer = selectedServers[j]
//添加微服务运行时的参数:spring.profiles.active
def activeProfile = '--spring.profiles.active='
if(currentServer=='master_server'){
activeProfile = activeProfile + 'eureka-server1'
}else if(currentServer=='slave_server'){
activeProfile = activeProfile + 'eureka-server2'
}
//远程调用进行项目部署
sshPublisher(publishers: [sshPublisherDesc(configName: "${currentServer}",
transfers: [sshTransfer(cleanRemote: false, excludes: '',
execCommand: "/opt/jenkins_shell/deployCluster.sh ${harbor_url} ${harbor_project_name} ${currentProjectName} ${tag} ${currentProjectPort} ${activeProfile}",
execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+',
remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false,
useWorkspaceInPromotion: false, verbose: false)])
}
echo "${currentProjectName} 完成编译,构建镜像"
}
}
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
- 48.
- 49.
- 50.
- 51.
- 52.
- 53.
- 54.
- 55.
- 56.
- 57.
- 58.
- 59.
- 60.
- 61.
- 62.
- 63.
- 64.
- 65.
- 66.
- 67.
- 68.
- 69.
- 70.
- 71.
- 72.
- 73.
- 74.
- 75.
- 76.
- 77.
- 78.
- 79.
- 80.
- 81.
- 82.
- 83.
- 84.
- 85.
- 86.
- 87.
- 88.
- 89.
- 90.
- 91.