1
This commit is contained in:
138
deploy-tools/Jenkinsfile.back
Normal file
138
deploy-tools/Jenkinsfile.back
Normal file
@@ -0,0 +1,138 @@
|
||||
|
||||
node("slave") {
|
||||
|
||||
def project = 'city-zhxy-front' //镜像名称
|
||||
def gitSource = 'ssh://git@code.cyweb.top:30033/scj/zhxy-city/backend-front.git' //代码地址
|
||||
def toEmail = '493840844@qq.com,374362909@qq.com' //需要接收邮件提醒的
|
||||
// def namespace = "fund" //k8snamespaces
|
||||
|
||||
/******* 自定义变量,在jenkins必须对应设置 start *********/
|
||||
def namespace = "${namespace}" //k8snamespaces
|
||||
def branch = "${branch}" //当前分支变量
|
||||
def profile = "${profile}" //dev
|
||||
def remoteHost = "${remoteHost}" //部署服务器的ip
|
||||
def remoteHostAuth = "${remoteHostAuth}" //部署服务器的凭证
|
||||
/******* 自定义变量,在jenkins必须对应设置 end *********/
|
||||
|
||||
def tag = "jenkins-2021-${env.BUILD_NUMBER}" //镜像tag
|
||||
|
||||
def registryHost = 'docker.registry.cyweb.net:5000' //har仓库
|
||||
def harBorNamespace = 'project' //镜像存储目录
|
||||
|
||||
def artifactId = ''
|
||||
def version = ''
|
||||
def needSonarQube = false //是否开启代码质量检测
|
||||
def isSuccess = true
|
||||
|
||||
|
||||
try{
|
||||
stage("获取最新代码"){
|
||||
sh 'printenv'
|
||||
echo "当前分支${branch}"
|
||||
git branch: "${branch}", credentialsId: 'git-ssh-auth', url: "${gitSource}"
|
||||
}
|
||||
|
||||
|
||||
stage("打包编译"){
|
||||
nodejs(cacheLocationStrategy: workspace(), configId: '066d1e6d-2a35-4832-96c1-78970fb7d78b', nodeJSInstallationName: 'node-10.15.1') {
|
||||
sh 'npm install'
|
||||
sh 'npm rebuild node-sass'
|
||||
sh 'npm run build'
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(needSonarQube){
|
||||
stage("代码审查"){
|
||||
def scannerHome = tool 'sonar-scanner'
|
||||
withSonarQubeEnv('SonarQuber-Server') {
|
||||
sh "${scannerHome}/bin/sonar-scanner " +
|
||||
"-Dsonar.projectKey=${project}-${branch} " +
|
||||
"-Dsonar.projectName=基金-开发分支 " +
|
||||
"-Dsonar.sourceEncoding=UTF-8 " +
|
||||
"-Dsonar.projectVersion=1.0 " +
|
||||
"-Dsonar.java.binaries=./target/classes " +
|
||||
"-Dsonar.sources=. "+
|
||||
"-Dsonar.exclusions=**/test/**,**/target/**,**/main/resources/**,**/deploy-tools/** "+
|
||||
"-Dsonar.java.source=1.8 "+
|
||||
"-Dsonar.java.target=1.8"
|
||||
|
||||
// sh "${scannerHome}/bin/sonar-scanner -Dproject.settings=./deploy-tools/sonar-project.properties"
|
||||
}
|
||||
sleep(10)
|
||||
timeout(time: 10, unit: 'MINUTES') {
|
||||
def qg = waitForQualityGate()
|
||||
if (qg.status != 'OK') {
|
||||
echo "代码质量检测不通过"
|
||||
error "Pipeline aborted due to quality gate failure: ${qg.status}"
|
||||
}else{
|
||||
echo "通过了代码质量检测"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
stage("docker 操作"){
|
||||
tool name: 'docker: 1.12.6', type: 'dockerTool'
|
||||
withCredentials([usernamePassword(credentialsId: '193f70e2-0fc6-43dc-a1c6-c026d0fa3523', passwordVariable: 'password', usernameVariable: 'username')]) {
|
||||
echo "登录docker harbor"
|
||||
sh "docker login ${registryHost} -u ${username} -p ${password} "
|
||||
// sh ' echo ${password} | docker login ${registryHost} -u Wang628625!@# --password-stdin '
|
||||
echo "构建镜像"
|
||||
sh "docker build --build-arg profile=${profile} -t ${registryHost}/${harBorNamespace}/${project}/${project}-${profile}:${tag} -f deploy-tools/Dockerfile . "
|
||||
echo "提交镜像"
|
||||
sh "docker push ${registryHost}/${harBorNamespace}/${project}/${project}-${profile}:${tag} "
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
stage("更新服务"){
|
||||
echo "开始更新服务"
|
||||
def remote = [:]
|
||||
remote.name = "k8s-master-dev"
|
||||
remote.host = "${remoteHost}"
|
||||
remote.allowAnyHosts = true
|
||||
|
||||
|
||||
withCredentials([usernamePassword(credentialsId: "${remoteHostAuth}", passwordVariable: 'passowrd', usernameVariable: 'username')]) {
|
||||
remote.user = "${username}"
|
||||
remote.password = "${passowrd}"
|
||||
sshCommand remote: remote, command: 'source ~/.bash_profile'
|
||||
sshCommand remote: remote, command: "kubectl set image deployment/front front=${registryHost}/${harBorNamespace}/${project}/${project}-${profile}:${tag} --namespace=${namespace}"
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}catch(Exception e){
|
||||
isSuccess = false
|
||||
currentBuild.result = 'FAILURE'
|
||||
|
||||
throw e; //必须跑出异常 否则构建失败结果无法被jenkins捕获
|
||||
|
||||
}finally{
|
||||
|
||||
stage("发送邮件通知"){
|
||||
if(isSuccess)
|
||||
{
|
||||
emailext body: '${FILE,path="deploy-tools/email-notice-success.html"}', subject: '构建通知:{$PROJECT_NAME} - Build # ${BUILD_NUMBER} - ${BUILD_STATUS} 请勿回复', to: "$toEmail"
|
||||
|
||||
}else{
|
||||
emailext body: '${FILE,path="deploy-tools/email-notice-false.html"}', subject: '构建通知:{$PROJECT_NAME} - Build # ${BUILD_NUMBER} - ${BUILD_STATUS} 请勿回复', to: "$toEmail"
|
||||
|
||||
}
|
||||
// echo "clear workspace......"
|
||||
// deleteDir()
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user