Automation - marmot-cn/marmot-framework GitHub Wiki
自动化
我们通过在根目录内添加Jenkinsfile
, 用于实现通过自动化推送部署.
样例配置文件
该文件是通过rancher
集群实现
node {
stage '检出最新代码'
git([credentialsId: '576f44ca-5da6-4dba-9e3f-a618ceab2623', url: 'https://github.com/chloroplast1983/saas-order', branch: 'master'])
echo 'checkout success'
stage '初始化环境'
dir('deployment/test') {
sh 'sudo docker-compose -p saas-order-test stop'
sh 'sudo docker-compose -p saas-order-test rm -v -f'
sh 'sudo docker login --username=电商湾 --password=Cmu7yJ69hx5VWnu8 [email protected] registry-internal.cn-hangzhou.aliyuncs.com'
sh 'sudo docker pull registry-internal.cn-hangzhou.aliyuncs.com/saas/saas-order'
sh 'sudo docker-compose -p saas-order-test up -d'
}
stage '代码规范检测'
sh 'sudo docker exec saas-order-phpfpm vendor/bin/phpcs'
stage '代码复制黏贴检测'
sh 'sudo docker exec saas-order-phpfpm vendor/bin/phpcpd ./Application'
stage '单元测试'
timeout(10) {
waitUntil {
def r = sh script: 'sudo docker logs saas-order-mysql 2>/dev/null | grep \'Ready for start up\'', returnStatus: true
return (r == 0)
}
}
sh 'cat ./database/database.sql | sudo docker exec -i saas-order-mysql /usr/bin/mysql -uroot -p123456'
sh 'cat ./database/test.sql | sudo docker exec -i saas-order-mysql /usr/bin/mysql -uroot -p123456'
sh 'for sqlfile in `ls ./database/*.execute.sql | sort -V`; do sed \'1 s/;/_test;/g\' $sqlfile | sudo docker exec -i saas-order-mysql /usr/bin/mysql -uroot -p123456; done'
stage '发布候选版本'
//
sh 'sudo docker tag $(sudo docker images |grep \'registry-internal.cn-hangzhou.aliyuncs.com/saas/saas-order\'|grep \'latest\'|awk \'{print $3}\') registry-internal.cn-hangzhou.aliyuncs.com/saas/saas-order:$(cat ./VERSION)'
sh 'sudo docker push registry-internal.cn-hangzhou.aliyuncs.com/saas/saas-order:$(cat ./VERSION)'
stage '清理环境'
dir('deployment/test') {
sh 'sudo docker-compose -p saas-order-test stop'
sh 'sudo docker-compose -p saas-order-test rm -v -f'
}
stage '部署沙箱'
sh 'sed -i "s/VERSION/$(cat VERSION)/g" deployment/sandbox/docker-compose.yml'
dir('deployment/sandbox') {
sh 'rancher-compose --url ${RANCHER_URL} --access-key ${RANCHER_SANDBOX_ACCESS_KEY} --secret-key ${RANCHER_SANDBOX_SECRET_KEY} --verbose -p saas-order up -d --upgrade --confirm-upgrade service'
}
echo 'release sandbox success'
stage '部署生产'
sh 'echo $datacontainer'
timeout(time:2, unit:'DAYS') {
input message:'Release Production ?', ok: 'Release'
}
sh 'sed -i "s/VERSION/$(cat VERSION)/g" deployment/production/docker-compose.yml'
dir('deployment/production') {
sh 'rancher-compose --url ${RANCHER_URL} --access-key ${RANCHER_PRODUCTION_ACCESS_KEY} --secret-key ${RANCHER_PRODUCTION_SECRET_KEY} --verbose -p saas-order up -d --upgrade --confirm-upgrade service'
}
echo 'release production success'
}