mirror of
https://github.com/openimsdk/open-im-server.git
synced 2025-10-28 22:58:10 +08:00
185 lines
7.6 KiB
Plaintext
185 lines
7.6 KiB
Plaintext
pipeline {
|
|
agent any
|
|
// agent {
|
|
// node {
|
|
// label 'jnlp-slave'
|
|
// }
|
|
// }
|
|
environment {
|
|
JOB_ENV = "openim-dev" // namespace
|
|
DEPLOYMENT_NAME = "api" // k8s deploy name
|
|
CONFIGMAP_NAME = "${DEPLOYMENT_NAME}-conf" // runtime conf
|
|
JOB_NAME = "${JOB_NAME}" // jenkins job name
|
|
GIT_URL = "https://github.com/truongpx396/Open-IM-Server" // gitlab or github codebase
|
|
CREDENTIALS_ID = "GitHub" // need configure it in jenkins, will use it's username and password to pull codebase
|
|
HARBOR_URL = "truongpx396" // docker harbor url
|
|
HARBOR_ID = "" // docker harbor id, will use it to login
|
|
DOCKER_CPU = "100m"
|
|
DOCKER_MEM = "200Mi"
|
|
BASEDIR = "."
|
|
BUILD_NUM = "${BUILD_NUMBER}"
|
|
CONF_PATH = "/openim/config/"
|
|
|
|
ORGANIZATION_NAME="truongpx396"
|
|
SERVICE_NAME_INFRA="open-im-server-k8s-deploy"
|
|
}
|
|
parameters {
|
|
gitParameter(
|
|
branch: '',
|
|
branchFilter: 'origin/(.*)',
|
|
defaultValue: 'main',
|
|
description: '',
|
|
name: 'RELEASE_BRANCH',
|
|
quickFilterEnabled: false,
|
|
selectedValue: 'NONE',
|
|
sortMode: 'NONE',
|
|
tagFilter: '*',
|
|
type: 'PT_BRANCH'
|
|
)
|
|
extendedChoice(
|
|
name: "RELEASE_PROJECTS",
|
|
type: "PT_RADIO",
|
|
multiSelectDelimiter: " ",
|
|
value: """api,msg_gateway,msg_transfer,push,rpc_conversation,rpc_group,rpc_msg,rpc_user""",
|
|
defaultValue: "",
|
|
description: "please choice projects to deploy"
|
|
)
|
|
}
|
|
stages {
|
|
stage('Git') {
|
|
steps {
|
|
checkout([$class: 'GitSCM',
|
|
branches: [[name: "${params.RELEASE_BRANCH}"]],
|
|
doGenerateSubmoduleConfigurations: false,
|
|
extensions: [],
|
|
gitTool: 'Default',
|
|
submoduleCfg: [],
|
|
userRemoteConfigs: [[url: "${GIT_URL}", credentialsId: "${CREDENTIALS_ID}"]]
|
|
])
|
|
}
|
|
}
|
|
stage('CommitHash') {
|
|
steps {
|
|
script {
|
|
env.CommitHash = sh (script: 'git rev-parse --short HEAD', returnStdout: true).trim()
|
|
}
|
|
}
|
|
}
|
|
stage('Check Param') {
|
|
steps {
|
|
script {
|
|
def releaseParams = "${params.RELEASE_PROJECTS}"
|
|
def tag = "${JOB_ENV}/${JOB_NAME}:${CommitHash}-${BUILD_NUM}"
|
|
def selectEnv = "${params.SERVICE_ENV}"
|
|
if(releaseParams) {
|
|
echo "============================================="
|
|
echo "projects: $releaseParams"
|
|
echo "tag: $tag"
|
|
echo "selectEnv: $selectEnv"
|
|
echo "============================================="
|
|
} else {
|
|
echo "============================================="
|
|
echo "invalid release projects!!! stop now!!!"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
stage('Docker Build') {
|
|
steps {
|
|
// container ('docker') {
|
|
// withCredentials([usernamePassword(credentialsId: "${HARBOR_ID}", passwordVariable: 'password', usernameVariable: 'username')]) {
|
|
// sh """
|
|
// docker build -t ${JOB_ENV}/${JOB_NAME}:${CommitHash}-${BUILD_NUM} -f ${BASEDIR}/deploy/dockerfile/${params.RELEASE_PROJECTS}.Dockerfile .
|
|
// docker tag ${JOB_ENV}/${JOB_NAME}:${CommitHash}-${BUILD_NUM} ${HARBOR_URL}/${JOB_ENV}/${JOB_NAME}:${CommitHash}-${BUILD_NUM}
|
|
|
|
// docker login -u ${username} -p ${password} ${HARBOR_URL}
|
|
|
|
// docker push ${HARBOR_URL}/${JOB_ENV}/${JOB_NAME}:${CommitHash}-${BUILD_NUM}
|
|
// docker rmi ${JOB_ENV}/${JOB_NAME}:${CommitHash}-${BUILD_NUM}
|
|
// docker rmi ${HARBOR_URL}/${JOB_ENV}/${JOB_NAME}:${CommitHash}-${BUILD_NUM}
|
|
// """
|
|
// }
|
|
// }
|
|
withDockerRegistry([ credentialsId: "DockerHub", url: "" ]){
|
|
sh """
|
|
echo `Build image ...`
|
|
docker build -t ${JOB_ENV}-${JOB_NAME}:${CommitHash}-${BUILD_NUM} -f ${BASEDIR}/jenkins-deploy/dockerfile/${params.RELEASE_PROJECTS}.Dockerfile .
|
|
|
|
docker tag ${JOB_ENV}-${JOB_NAME}:${CommitHash}-${BUILD_NUM} ${HARBOR_URL}/${JOB_ENV}-${params.RELEASE_PROJECTS}:${CommitHash}-${BUILD_NUM}
|
|
|
|
echo `Push image ...`
|
|
docker push ${HARBOR_URL}/${JOB_ENV}-${params.RELEASE_PROJECTS}:${CommitHash}-${BUILD_NUM}
|
|
|
|
echo `Start removing image ...1.`
|
|
docker rmi ${JOB_ENV}-${JOB_NAME}:${CommitHash}-${BUILD_NUM}
|
|
echo `Done removing image!`
|
|
"""
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('Prepare to update infra') {
|
|
steps {
|
|
cleanWs()
|
|
checkout([$class: 'GitSCM',
|
|
branches: [[name: "main"]],
|
|
doGenerateSubmoduleConfigurations: false,
|
|
extensions: [],
|
|
gitTool: 'Default',
|
|
submoduleCfg: [],
|
|
userRemoteConfigs: [[url: "https://github.com/${ORGANIZATION_NAME}/${SERVICE_NAME_INFRA}", credentialsId: "${CREDENTIALS_ID}"]]
|
|
])
|
|
}
|
|
}
|
|
|
|
|
|
stage('Update infra') {
|
|
steps {
|
|
|
|
contentReplace(
|
|
configs: [
|
|
fileContentReplaceConfig(
|
|
configs: [
|
|
fileContentReplaceItemConfig(
|
|
search: "(image: )truongpx396\\/([a-zA-Z-_])+:([0-9a-z])\\w+-[0-9]+",
|
|
replace: "image: ${HARBOR_URL}/${JOB_ENV}-${params.RELEASE_PROJECTS}:${CommitHash}-${BUILD_NUM}",
|
|
matchCount: 1,
|
|
verbose: false,
|
|
)
|
|
],
|
|
fileEncoding: 'UTF-8',
|
|
lineSeparator: 'Unix',
|
|
filePath: "open-im-server/${params.RELEASE_PROJECTS}/deployment.yaml"
|
|
)
|
|
]
|
|
)
|
|
|
|
script {
|
|
withCredentials([string(credentialsId: 'GitHub1', variable: 'GITHUB_TOKEN')]) {
|
|
sh """
|
|
echo "${GITHUB_TOKEN}"
|
|
export BUILD_ID=${CommitHash}-${BUILD_NUM}
|
|
git config user.email "jenkins@example.com"
|
|
git config user.name "Jenkins"
|
|
git add open-im-server/${params.RELEASE_PROJECTS}/deployment.yaml && git commit -m "Update ${params.RELEASE_PROJECTS} image tag to ${CommitHash}-${BUILD_NUM}"
|
|
git push -f https://${GITHUB_TOKEN}@github.com/${ORGANIZATION_NAME}/${SERVICE_NAME_INFRA}.git HEAD:main
|
|
"""
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
// stage('Deploy') {
|
|
// steps {
|
|
// container ('helm-kubectl') {
|
|
// sh """
|
|
// envsubst < ${BASEDIR}/deploy/k8sdeployment_dev/default-configMap-test.yaml | kubectl apply -f -
|
|
// envsubst < ${BASEDIR}/deploy/k8sdeployment_dev/default-namespace-test.yaml | kubectl apply -f -
|
|
// envsubst < ${BASEDIR}/deploy/k8sdeployment_dev/api.yaml | kubectl apply -f - && kubectl rollout status -f -
|
|
// """
|
|
// }
|
|
// }
|
|
// }
|
|
}
|
|
} |