def notifyDingTalk(text) {
#设置钉钉群通知,镜像上传成功后会通知到钉钉群
def url = '钉钉群机器人url'
def message = JsonOutput.toJson([msgtype: 'markdown', markdown: [title:'你自己设置的关键字',text: text]])
sh "curl -H 'Content-Type: application/json' -d \'${message}\' ${url}"
}
node {
stage('Prepare') {
deleteDir()
project_name = 'occ'
dockerfile_folder = 'Occ.Engine'
git_name = 'Occ.Engine'
git_url = "http://gitlab.yw56.com.cn/${project_name}/${git_name}.git"
deploy_branch_name = 'develop'
app_name = 'occ-engine-api'
build_tag = "fat"
}
stage('SCM') {
withCredentials([gitUsernamePassword(credentialsId: 'larry-gitlab', gitToolName: 'Default')]){
sh("git clone ${git_url}")
dir(git_name) {
latest_branch_name = "origin/${deploy_branch_name}"
sh("git checkout -b ${deploy_branch_name} ${latest_branch_name}")
sh("git pull")
commit_info = sh(returnStdout: true, script: 'git log -1 --pretty=format:%h:%an:%s').trim()
echo "latest_branch_name:${latest_branch_name};commit_info:${commit_info}"
}
}
}
stage('Build Images') {
dir("${git_name}") {
sh "docker build --force-rm -f Occ.Engine.Api/Dockerfile -t Occ.Engine/${app_name}:${build_tag} ."
}
}
stage('Push-Ali') {
docker_host = "registry.cn-hangzhou.aliyuncs.com"
docker_img_name = "${docker_host}/yanwentech/${app_name}"
echo "docker-img-name: ${docker_img_name}"
withCredentials([usernamePassword(credentialsId: 'docker-registry-hz', passwordVariable: 'dockerPassword', usernameVariable: 'dockerUser')]) {
sh "docker login -u ${dockerUser} -p ${dockerPassword} ${docker_host}"
sh "docker tag Occ.Engine/${app_name}:${build_tag} ${docker_img_name}:${build_tag}"
sh "docker push ${docker_img_name}:${build_tag}"
sh "docker rmi -f ${docker_img_name}:${build_tag}"
}
}
stage('Push-Tencent') {
docker_host = "yanwen.tencentcloudcr.com"
docker_img_name = "${docker_host}/fat-occ/${app_name}"
echo "docker-img-name: ${docker_img_name}"
withCredentials([usernamePassword(credentialsId: 'yanwen.tencentcloudcr', passwordVariable: 'dockerPassword', usernameVariable: 'dockerUser')]) {
sh """
echo \$dockerPassword | docker login ${docker_host} --username \${dockerUser} --password-stdin
docker tag Occ.Engine/${app_name}:${build_tag} ${docker_img_name}:${build_tag}
docker push ${docker_img_name}:${build_tag}
docker rmi -f ${docker_img_name}:${build_tag}
"""
}
}
stage('Clear Images') {
dir("${git_name}") {
sh "docker rmi -f Occ.Engine/${app_name}:${build_tag}"
}
}
stage('Notify') {
script {
def text = "- 项目:${JOB_NAME}\n- 任务:[${BUILD_DISPLAY_NAME}](${BUILD_URL})\n- 状态:${currentBuild.currentResult}\n- 持续时间:${currentBuild.duration}\n- 提交信息:${commit_info}"
notifyDingTalk(text)
}
}
}
apiVersion: apps/v1
kind: Deployment
metadata:
name: occ-engine-api-prod
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: occ-engine-api-prod
template:
metadata:
labels:
app: occ-engine-api-prod
spec:
containers:
- name: occ-engine-api-prod
resources:
limits:
cpu: 500m
memory: 1Gi
requests:
cpu: 250m
memory: 256Mi
image: yanwen.tencentcloudcr.com/prod-occ/occ-engine-api:1.0.131
imagePullPolicy: Always
env:
- name: ConnectionStrings__ConfigDb
valueFrom:
secretKeyRef:
key: ConfigDb
name: prod-occ-engine-api-appsettings
- name: ConnectionStrings__RedisDb
valueFrom:
secretKeyRef:
key: RedisDb
name: prod-occ-engine-api-appsettings
- name: LightHouse__YcsExchangeRate__BaseAddress
valueFrom:
secretKeyRef:
key: YcsExchangeRate_BaseAddress
name: prod-occ-engine-api-appsettings
- name: OAuth__console_url
valueFrom:
secretKeyRef:
key: OAuth_console_url
name: prod-occ-engine-api-appsettings
- name: OAuth__redirect_uri
valueFrom:
secretKeyRef:
key: OAuth_redirect_uri
name: prod-occ-engine-api-appsettings
- name: OAuth__client_id
valueFrom:
secretKeyRef:
key: OAuth__client_id
name: prod-occ-engine-api-appsettings
- name: OAuth__client_secret
valueFrom:
secretKeyRef:
key: OAuth__client_secret
name: prod-occ-engine-api-appsettings
dnsPolicy: ClusterFirst
imagePullSecrets:
- name: tcr-wangly
restartPolicy: Always