概述
目前现有自动化用例数比较多了,在free style jenkins project中顺次执行,耗时1天左右,很明显,耗时太久,急需用例能够并发执行,从而实现节约时间。
本文介绍如何通过pipeline project,实现现有用例执行流程的改造,实现并发执行。
改造涉及内容
针对当前automation project,需要做如下内容调整:
-
(1) run.py中,提取出reboot client,生成pylint数据操作
-
(2) Jenkins节点中email-templates发送email内容groovy脚本调整
-
(3) 测试代码config目录下autotest.conf,含有多个,命名格式为autotest_ip.conf
-
(4) 测试代码jenkins目录下生成build properties文件,以及rsync脚本要做修改,主要是路径问题
说明:
第(1)点: 以前用例是顺次执行的,只需要执行一次,一旦调整成并发后,存在每个执行node均会执行一次的情况;
第(3)点: 每个执行用例的集群节点,需要mv autotest_ip.conf为autotest.conf
第(4)点: free style与pipeline的jenkins project,所需要的workspace与jobspace是不一样的
需要Jenkins安装的插件
Warnings,pipeline相关插件,具体安装本文忽略。
改造过程
流程示意图
Jenkins project配置
pipelint Jenkinsfile
新增了Jenlinsfile,具体内容示例参考如下:
shell
#!groovy
ip_list = IPS.split(',')
ips_size = ip_list.size()
def cluster1_ip = ip_list[0..2][1]
def cluster2_ip = ip_list[3..5][1]
def cluster_ip = "${cluster1_ip} ${cluster2_ip}"
pipeline {
agent any
options {
timestamps()
}
stages {
/* IP check */
stage("IP Cheeck") {
agent { label "master" }
steps {
script {
sh """
if [[ ${ips_size} != 6 ]]; then
echo "IPS is not enough, but give (${ips_size}) nodes to run case"
exit 1
fi
"""
}
}
}
/* Install VM by PVE */
stage("Initialize") {
agent { label "master" }
steps {
script {
sh """
#!/bin/bash -xe
echo "Call batch_install_vs.py to install ISO."
sshpass -p 1 ssh -p 22 17.1.1.235 -l root \${BAT_INSTALL}
"""
}
}
}
/* Get code */
stage("Checkout") {
agent { label "master" }
steps {
retry(2) {
timeout(activity: false, time: 60, unit: 'MINUTES') {
checkout([$class: 'GitSCM',
branches: [[name: GIT_BRANCH]],
browser: [$class: 'GitLab', repoUrl: GIT_WEB, version: '12.8'],
doGenerateSubmoduleConfigurations: false,
extensions: [
[$class: 'CleanBeforeCheckout', deleteUntrackedNestedRepositories: true],
[$class: 'SubmoduleOption', recursiveSubmodules: true],
[$class: 'GitLFSPull'],
[$class: 'PruneStaleBranch']
],
submoduleCfg: [],