truongpx-Mac 819a6e58ce update
2024-10-07 18:06:59 +07:00

164 lines
6.2 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="OpenIM-K8S-Deployment"
}
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,rpc_third,rpc_friend,rpc_auth""",
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("Unit-Test") {
steps {
echo 'UNIT TEST EXECUTION STARTED'
sh 'make test-user'
}
}
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 {
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@magiclab396.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
"""
}
}
}
}
}
}