Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
milvus
milvus
提交
ba327011
M
milvus
项目概览
milvus
/
milvus
11 个月 前同步成功
通知
260
Star
22476
Fork
2472
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
M
milvus
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
ba327011
编写于
3月 11, 2021
作者:
Q
quicksilver
提交者:
yefu.chen
3月 11, 2021
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Simplify testing Kubernetes application deployment within CI pipeline by using Helm
Signed-off-by:
N
quicksilver
<
zhifeng.zhang@zilliz.com
>
上级
02796cf9
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
122 addition
and
58 deletion
+122
-58
.jenkins/modules/Regression/CleanupPythonRegression.groovy
.jenkins/modules/Regression/CleanupPythonRegression.groovy
+8
-0
.jenkins/modules/Regression/PythonRegression.groovy
.jenkins/modules/Regression/PythonRegression.groovy
+61
-50
build/ci/jenkins/Jenkinsfile
build/ci/jenkins/Jenkinsfile
+13
-6
build/ci/jenkins/pod/test-env.yaml
build/ci/jenkins/pod/test-env.yaml
+38
-0
build/docker/test/.env
build/docker/test/.env
+2
-2
未找到文件。
.jenkins/modules/Regression/CleanupPythonRegression.groovy
0 → 100644
浏览文件 @
ba327011
container
(
'deploy-env'
)
{
def
helmStatus
=
sh
script:
"helm status -n ${env.HELM_RELEASE_NAMESPACE} ${env.HELM_RELEASE_NAME}"
,
returnStatus:
true
if
(!
helmStatus
)
{
sh
"helm uninstall -n ${env.HELM_RELEASE_NAMESPACE} ${env.HELM_RELEASE_NAME}"
def
labels
=
"app.kubernetes.io/instance=${env.HELM_RELEASE_NAME}"
sh
"kubectl delete pvc -n ${env.HELM_RELEASE_NAMESPACE} \$(kubectl get pvc -n ${env.HELM_RELEASE_NAMESPACE} -l ${labels} -o jsonpath='{range.items[*]}{.metadata.name} ')"
}
}
.jenkins/modules/Regression/PythonRegression.groovy
浏览文件 @
ba327011
timeout
(
time:
60
,
unit:
'MINUTES'
)
{
try
{
if
(
"${REGRESSION_SERVICE_NAME}"
==
"regression_distributed"
)
{
sh
'docker-compose -p ${DOCKER_COMPOSE_PROJECT_NAME}-${REGRESSION_SERVICE_NAME} up -d pulsar'
}
sh
'docker-compose -p ${DOCKER_COMPOSE_PROJECT_NAME}-${REGRESSION_SERVICE_NAME} up -d etcd'
sh
'docker-compose -p ${DOCKER_COMPOSE_PROJECT_NAME}-${REGRESSION_SERVICE_NAME} up -d minio'
dir
(
'build/docker/deploy'
)
{
sh
'docker pull ${TARGET_REPO}/milvus-distributed:${TARGET_TAG}'
if
(
"${REGRESSION_SERVICE_NAME}"
==
"regression_distributed"
)
{
sh
'docker-compose -p ${DOCKER_COMPOSE_PROJECT_NAME}-${REGRESSION_SERVICE_NAME} up -d master'
sh
'docker-compose -p ${DOCKER_COMPOSE_PROJECT_NAME}-${REGRESSION_SERVICE_NAME} up -d indexservice'
sh
'docker-compose -p ${DOCKER_COMPOSE_PROJECT_NAME}-${REGRESSION_SERVICE_NAME} up -d indexnode'
sh
'docker-compose -p ${DOCKER_COMPOSE_PROJECT_NAME}-${REGRESSION_SERVICE_NAME} up -d proxyservice'
sh
'docker-compose -p ${DOCKER_COMPOSE_PROJECT_NAME}-${REGRESSION_SERVICE_NAME} up -d dataservice'
sh
'docker-compose -p ${DOCKER_COMPOSE_PROJECT_NAME}-${REGRESSION_SERVICE_NAME} up -d queryservice'
sh
'docker-compose -p ${DOCKER_COMPOSE_PROJECT_NAME}-${REGRESSION_SERVICE_NAME} run -e DATA_NODE_ID=3 -d datanode'
sh
'docker-compose -p ${DOCKER_COMPOSE_PROJECT_NAME}-${REGRESSION_SERVICE_NAME} up -d proxynode'
sh
'docker-compose -p ${DOCKER_COMPOSE_PROJECT_NAME}-${REGRESSION_SERVICE_NAME} run -e QUERY_NODE_ID=1 -d querynode'
sh
'docker-compose -p ${DOCKER_COMPOSE_PROJECT_NAME}-${REGRESSION_SERVICE_NAME} run -e QUERY_NODE_ID=2 -d querynode'
}
else
{
sh
'docker-compose -p ${DOCKER_COMPOSE_PROJECT_NAME}-${REGRESSION_SERVICE_NAME} up -d standalone'
container
(
'deploy-env'
)
{
dir
(
'milvus-helm-chart'
)
{
sh
" helm version && \
helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts && \
helm repo add bitnami https://charts.bitnami.com/bitnami && \
helm repo add minio https://helm.min.io/ && \
helm repo update"
def
milvusHelmURL
=
"https://github.com/zilliztech/milvus-helm-charts.git"
checkout
([
$class
:
'GitSCM'
,
branches:
[[
name:
"${env.HELM_BRANCH}"
]],
userRemoteConfigs:
[[
url:
"${milvusHelmURL}"
]]])
dir
(
'charts/milvus-ha'
)
{
sh
script:
"kubectl create namespace ${env.HELM_RELEASE_NAMESPACE}"
,
returnStatus:
true
def
helmCMD
=
""
if
(
"${REGRESSION_SERVICE_TYPE}"
==
"distributed"
)
{
helmCMD
=
"helm install --wait --timeout 300s \
--set standalone.enabled=false \
--set image.all.repository=${env.TARGET_REPO}/milvus-distributed \
--set image.all.tag=${env.TARGET_TAG} \
--set image.all.pullPolicy=Always \
--set logsPersistence.enabled=true \
--set logsPersistence.mountPath=/milvus-distributed/logs \
--namespace ${env.HELM_RELEASE_NAMESPACE} ${env.HELM_RELEASE_NAME} ."
}
else
{
helmCMD
=
"helm install --wait --timeout 300s \
--set image.all.repository=${env.TARGET_REPO}/milvus-distributed \
--set image.all.tag=${env.TARGET_TAG} \
--set image.all.pullPolicy=Always \
--set logsPersistence.enabled=true \
--set logsPersistence.mountPath=/milvus-distributed/logs \
--namespace ${env.HELM_RELEASE_NAMESPACE} ${env.HELM_RELEASE_NAME} ."
}
try
{
sh
"${helmCMD}"
}
catch
(
exc
)
{
def
helmStatusCMD
=
"helm get manifest -n ${env.HELM_RELEASE_NAMESPACE} ${env.HELM_RELEASE_NAME} | kubectl describe -n ${env.HELM_RELEASE_NAMESPACE} -f - && \
helm status -n ${env.HELM_RELEASE_NAMESPACE} ${env.HELM_RELEASE_NAME}"
sh
script:
helmStatusCMD
,
returnStatus:
true
throw
exc
}
}
}
}
dir
(
'build/docker/test'
)
{
sh
'docker pull ${SOURCE_REPO}/pytest:${SOURCE_TAG} || true'
sh
'docker-compose build --force-rm ${REGRESSION_SERVICE_NAME}'
sh
'docker-compose -p ${DOCKER_COMPOSE_PROJECT_NAME}-${REGRESSION_SERVICE_NAME} run --rm ${REGRESSION_SERVICE_NAME}'
try
{
withCredentials
([
usernamePassword
(
credentialsId:
"${env.DOCKER_CREDENTIALS_ID}"
,
usernameVariable:
'DOCKER_USERNAME'
,
passwordVariable:
'DOCKER_PASSWORD'
)])
{
sh
'docker login -u ${DOCKER_USERNAME} -p ${DOCKER_PASSWORD} ${DOKCER_REGISTRY_URL}'
sh
'docker-compose push ${REGRESSION_SERVICE_NAME} || true'
container
(
'test-env'
)
{
try
{
dir
(
'tests/python_test'
)
{
sh
"pytest --tags=0331 --ip ${env.HELM_RELEASE_NAME}-milvus-ha.${env.HELM_RELEASE_NAMESPACE}.svc.cluster.local"
}
}
catch
(
exc
)
{
echo
'PyTest Regression Failed !'
throw
exc
}
finally
{
container
(
'deploy-env'
)
{
def
labels
=
""
if
(
"${REGRESSION_SERVICE_TYPE}"
==
"distributed"
)
{
labels
=
"app.kubernetes.io/instance=${env.HELM_RELEASE_NAME},component=proxyservice"
}
else
{
labels
=
"app.kubernetes.io/instance=${env.HELM_RELEASE_NAME},component=standalone"
}
}
catch
(
exc
)
{
throw
exc
}
finally
{
sh
'docker logout ${DOKCER_REGISTRY_URL}'
sh
"mkdir -p ${env.DEV_TEST_ARTIFACTS_PATH}"
sh
"kubectl cp -n ${env.HELM_RELEASE_NAMESPACE} \$(kubectl get pod -n ${env.HELM_RELEASE_NAMESPACE} -l ${labels} -o jsonpath='{range.items[0]}{.metadata.name}'):logs ${env.DEV_TEST_ARTIFACTS_PATH}"
archiveArtifacts
artifacts:
"${env.DEV_TEST_ARTIFACTS_PATH}/**"
,
allowEmptyArchive:
true
}
}
}
catch
(
exc
)
{
throw
exc
}
finally
{
dir
(
'build/docker/deploy'
)
{
sh
'docker-compose -p ${DOCKER_COMPOSE_PROJECT_NAME}-${REGRESSION_SERVICE_NAME} ps -a | tail -n +3 | awk \'{ print $1 }\' | ( while read arg; do docker logs -t $arg > $arg.log 2>&1; done )'
archiveArtifacts
artifacts:
"**.log"
,
allowEmptyArchive:
true
sh
'docker-compose -p ${DOCKER_COMPOSE_PROJECT_NAME}-${REGRESSION_SERVICE_NAME} down --rmi all -v || true'
}
if
(
"${REGRESSION_SERVICE_NAME}"
==
"regression_distributed"
)
{
sh
'docker-compose -p ${DOCKER_COMPOSE_PROJECT_NAME}-${REGRESSION_SERVICE_NAME} rm -f -s -v pulsar'
}
sh
'docker-compose -p ${DOCKER_COMPOSE_PROJECT_NAME}-${REGRESSION_SERVICE_NAME} rm -f -s -v etcd'
sh
'docker-compose -p ${DOCKER_COMPOSE_PROJECT_NAME}-${REGRESSION_SERVICE_NAME} rm -f -s -v minio'
dir
(
'build/docker/test'
)
{
sh
'docker-compose -p ${DOCKER_COMPOSE_PROJECT_NAME}-${REGRESSION_SERVICE_NAME} run --rm ${REGRESSION_SERVICE_NAME} /bin/bash -c "find . -name \'__pycache__\' | xargs rm -rf && find . -name \'.pytest_cache\' | xargs rm -rf"'
sh
'docker-compose -p ${DOCKER_COMPOSE_PROJECT_NAME}-${REGRESSION_SERVICE_NAME} down --rmi all -v || true'
}
}
}
build/ci/jenkins/Jenkinsfile
浏览文件 @
ba327011
...
...
@@ -7,7 +7,7 @@ pipeline {
timestamps
()
}
environment
{
PROJECT_NAME
=
"milvus
-distributed
"
PROJECT_NAME
=
"milvus"
SEMVER
=
"${BRANCH_NAME.contains('/') ? BRANCH_NAME.substring(BRANCH_NAME.lastIndexOf('/') + 1) : BRANCH_NAME}"
BUILD_TYPE
=
"Release"
LOWER_BUILD_TYPE
=
BUILD_TYPE
.
toLowerCase
()
...
...
@@ -71,15 +71,22 @@ pipeline {
matrix
{
axes
{
axis
{
name
'REGRESSION_SERVICE_
NAM
E'
values
'
regression_standalone'
,
'regression_
distributed'
name
'REGRESSION_SERVICE_
TYP
E'
values
'
standalone'
,
'
distributed'
}
}
environment
{
DOCKER_COMPOSE_PROJECT_NAME
=
"${PROJECT_NAME}-${SEMVER}-${env.BUILD_NUMBER}"
.
replaceAll
(
"\\."
,
"-"
).
replaceAll
(
"_"
,
"-"
)
HELM_BRANCH
=
"main"
HELM_RELEASE_NAMESPACE
=
"dev"
HELM_RELEASE_NAME
=
"${PROJECT_NAME}-${SEMVER}-${env.BUILD_NUMBER}-${REGRESSION_SERVICE_TYPE}"
.
replaceAll
(
"\\."
,
"-"
).
replaceAll
(
"_"
,
"-"
).
toLowerCase
()
DEV_TEST_ARTIFACTS_PATH
=
"artifacts"
}
agent
{
label
'performance'
kubernetes
{
label
"${env.PROJECT_NAME}-${SEMVER}-${env.BUILD_NUMBER}-${REGRESSION_SERVICE_TYPE}-devtest"
defaultContainer
'test-env'
yamlFile
"build/ci/jenkins/pod/test-env.yaml"
}
}
stages
{
stage
(
'Test'
)
{
...
...
@@ -90,7 +97,7 @@ pipeline {
}
post
{
cleanup
{
deleteDir
()
/* clean up our workspace */
MPLModule
(
'Cleanup Python Regression'
)
}
}
}
...
...
build/ci/jenkins/pod/test-env.yaml
0 → 100644
浏览文件 @
ba327011
apiVersion
:
v1
kind
:
Pod
metadata
:
labels
:
app
:
milvus
componet
:
test-env
spec
:
containers
:
-
name
:
test-env
image
:
milvusdb/pytest:20210310-5ea22d7
command
:
-
cat
tty
:
true
resources
:
limits
:
memory
:
"
8Gi"
cpu
:
"
4.0"
requests
:
memory
:
"
4Gi"
cpu
:
"
2.0"
-
name
:
deploy-env
image
:
registry.zilliz.com/library/helm3:v0.1
command
:
-
cat
tty
:
true
volumeMounts
:
-
name
:
kubeconf
mountPath
:
/root/.kube/
readOnly
:
true
volumes
:
-
name
:
kubeconf
secret
:
secretName
:
test-cluster-config
tolerations
:
-
key
:
dedicated
operator
:
Equal
value
:
milvus
effect
:
NoSchedule
build/docker/test/.env
浏览文件 @
ba327011
SOURCE_REPO=milvusdb
TARGET_REPO=milvusdb
SOURCE_TAG=latest
TARGET_TAG=latest
\ No newline at end of file
SOURCE_TAG=20210310-5ea22d7
TARGET_TAG=20210310-5ea22d7
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录