Commit 48ded73b by 李二毛

Merge branch 'staging' into 'master'

Staging

See merge request liermao/microservice-autodevopspipelines!91
parents f9fad4c2 115d24cc
Pipeline #4306 passed with stage
in 19 seconds
...@@ -5,6 +5,11 @@ stages: ...@@ -5,6 +5,11 @@ stages:
# Updating # Updating
- analysing-git-changes - analysing-git-changes
- synchronizing-config - synchronizing-config
- ci
- cd
- is-k8s-ready
- testing
- clean-k8s
build_job: build_job:
stage: build stage: build
...@@ -13,37 +18,31 @@ build_job: ...@@ -13,37 +18,31 @@ build_job:
tags: tags:
- build - build
staging-major_job: release-major_job:
stage: release-major stage: release-major
script: script:
- export Environment='Staging' - export Environment='Staging'
- bash ./devops/PipeLines/Creation/Creation_Pipeline.sh - bash ./devops/PipeLines/Creation/Creation_Pipeline.sh
only: only:
- rel/major - release/staging
- release/production
tags: tags:
- staging - staging
prod-major_job:
stage: release-major
script:
- export Environment='Production'
- bash ./devops/PipeLines/Creation/Creation_Pipeline.sh
only:
- rel/major
tags:
- production - production
staging-analysing-git-changes_job: analysing-git-changes_job:
stage: analysing-git-changes stage: analysing-git-changes
script: script:
- export Environment='Staging' - export Environment='Staging'
- bash ./devops/PipeLines/Updating/001_AnalysingGitChanges.sh - bash ./devops/PipeLines/Updating/001_AnalysingGitChanges.sh
only: only:
- staging - staging
- production
tags: tags:
- staging - staging
- production
staging-synchronizing-config_job: synchronizing-config_job:
stage: synchronizing-config stage: synchronizing-config
script: script:
- export Environment='Staging' - export Environment='Staging'
...@@ -52,3 +51,53 @@ staging-synchronizing-config_job: ...@@ -52,3 +51,53 @@ staging-synchronizing-config_job:
- staging - staging
tags: tags:
- staging - staging
ci_job:
stage: ci
script:
- export Environment='Staging'
- bash ./devops/PipeLines/Updating/003_CI.sh
only:
- staging
tags:
- staging
cd_job:
stage: cd
script:
- export Environment='Staging'
- bash ./devops/PipeLines/Updating/004_CD.sh
only:
- staging
tags:
- staging
is-k8s-ready_job:
stage: is-k8s-ready
script:
- export Environment='Staging'
- bash ./devops/PipeLines/Updating/005_IsK8sReady.sh
only:
- staging
tags:
- staging
testing_job:
stage: testing
script:
- export Environment='Staging'
- bash ./devops/PipeLines/Updating/006_Testing.sh
only:
- staging
tags:
- staging
clean-k8s_job:
stage: clean-k8s
script:
- export Environment='Staging'
- bash ./devops/PipeLines/Updating/007_CleanK8s.sh
only:
- staging
tags:
- staging
\ No newline at end of file
...@@ -8,6 +8,6 @@ source ./devops/PipeLines/Functions.core.sh ...@@ -8,6 +8,6 @@ source ./devops/PipeLines/Functions.core.sh
GetSolutionName SolutionName GetSolutionName SolutionName
echo "begin build..." echo "Begin building..."
dotnet build ${SolutionName} dotnet build ${SolutionName}
echo "build successful." echo "Build completed."
\ No newline at end of file \ No newline at end of file
...@@ -15,12 +15,11 @@ echo "${appName} building..." ...@@ -15,12 +15,11 @@ echo "${appName} building..."
GetSolutionName solutionName GetSolutionName solutionName
dotnet build ${solutionName} dotnet build ${solutionName}
echo ""
echo "Please check the version of each microservice carefully !!!"
GetRegistryHost RegistryHost GetRegistryHost RegistryHost
for servicePrefix in `ls ./src/Services|xargs -d '/'` for servicePrefix in `ls ./src/Services|xargs -d '/'`
do do
echo ""
echo "Tips: ${servicePrefix} begin integrating to image registry!!!"
GetServiceName ${servicePrefix} serviceName GetServiceName ${servicePrefix} serviceName
GetServiceCsProjFile ${servicePrefix} ${serviceName} serviceCsProjFile GetServiceCsProjFile ${servicePrefix} ${serviceName} serviceCsProjFile
CI ${serviceName} ${serviceCsProjFile} CI ${serviceName} ${serviceCsProjFile}
......
...@@ -25,3 +25,10 @@ function DynamicVariableValueOf() ...@@ -25,3 +25,10 @@ function DynamicVariableValueOf()
eval "output=\$$prefix$suffix" eval "output=\$$prefix$suffix"
eval $3=${output} eval $3=${output}
} }
function FirstCharUpperCase()
{
declare input=$1
declare output=($(echo ${input} | sed -e "s/\b\(.\)/\u\1/g"))
eval $2=${output}
}
\ No newline at end of file
...@@ -28,3 +28,26 @@ function CI() ...@@ -28,3 +28,26 @@ function CI()
rm -fr ${publishOutputDir} rm -fr ${publishOutputDir}
echo "Delivery for ${serviceName} has been successful." echo "Delivery for ${serviceName} has been successful."
} }
function CD()
{
declare registryHost=$1
declare registryUserName=$2
declare serviceName=$3
declare version=$4
declare namespace=$5
Replace ${serviceName} '.' '-' appName
# repository name must be lowercase
ToLower "${registryHost}/${registryUserName}/${serviceName}:${version}" imagefullname
ToLower ${appName} appNameOfK8s
# echo "Tips: namespace: ${namespace}, appNameOfK8s: ${appNameOfK8s}, imagefullname: ${imagefullname}"
kubectl -n ${namespace} set image deployments/${appNameOfK8s} "${appNameOfK8s}=${imagefullname}"
# [compatible]Staging environment does not need to change version number.
if [ "${Environment}" == "Staging" ]; then
kubectl -n ${namespace} scale deploy ${appNameOfK8s} --replicas=0;
kubectl -n ${namespace} scale deploy ${appNameOfK8s} --replicas=1;
fi
echo "Deployment[${Environment}] for ${appName}:${version} has been successful."
}
\ No newline at end of file
...@@ -73,7 +73,7 @@ else ...@@ -73,7 +73,7 @@ else
echo "Tips[Hard Release]: ${servicePrefix} will be released." echo "Tips[Hard Release]: ${servicePrefix} will be released."
else else
# Soft Release, begin Analyzing git changes # Soft Release, begin Analyzing git changes
IsPublishable "src/${servicePrefix}" isPublishable publishableCount IsPublishable "src/Services/${servicePrefix}" isPublishable publishableCount
if [ "${isPublishable}" == "1" ]; if [ "${isPublishable}" == "1" ];
then then
AddConfig "${servicePrefix}" "${isPublishable}" AddConfig "${servicePrefix}" "${isPublishable}"
......
...@@ -3,11 +3,11 @@ ...@@ -3,11 +3,11 @@
set -e set -e
# Import external functions # Import external functions
chmod +x ./devops/PipeLines/functions.sh chmod +x ./devops/PipeLines/Functions.deploy.sh
./devops/PipeLines/functions.sh source ./devops/PipeLines/Functions.deploy.sh
GetAppName appName GetAppName appName
echo "Continuous integration for ${appName} starting..." echo "Continuous integration[${Environment}] for ${appName} starting..."
GetCiCdSettings allPublishable noPublishable GetCiCdSettings allPublishable noPublishable
if [ "${noPublishable}" == "1" ] ; if [ "${noPublishable}" == "1" ] ;
...@@ -15,56 +15,28 @@ then ...@@ -15,56 +15,28 @@ then
echo "" echo ""
echo "Tips: No services need to be cied." echo "Tips: No services need to be cied."
else else
declare solutionName=($(grep -oP '(?<=SolutionName>)[^<]+' "devops/app.props")) echo ""
echo "${appName} building..."
GetSolutionName solutionName
dotnet build ${solutionName} dotnet build ${solutionName}
echo "Please check the version of each microservice carefully !!!" GetRegistryHost RegistryHost
declare major=($(grep -oP '(?<=VersionMajor>)[^<]+' "build/version.props")) for servicePrefix in `ls ./src/Services|xargs -d '/'`
declare minor=($(grep -oP '(?<=VersionMinor>)[^<]+' "build/version.props")) do
declare patch=($(grep -oP '(?<=VersionPatch>)[^<]+' "build/version.props")) IsPublishableOf ${servicePrefix} isPublishable
declare version=${major}.${minor}.${patch} GetServiceName ${servicePrefix} serviceName
if [ "${isPublishable}" == "1" ];
declare registryUserName=($(grep -oP '(?<=ImageUserName>)[^<]+' "build/deploy.props"))
declare publishOutputDir=./publish
rm -fr ${publishOutputDir}
mkdir -p ${publishOutputDir}
function CI()
{
declare publishable=$1
declare imagename=$2
echo ""
if [ "${publishable}" == "1" ];
then then
declare imagefullname=${RegistryHost}/${registryUserName}/${imagename}:${version} echo ""
declare publishFile=$3 echo "Tips: ${serviceName} begin integrating to image registry!!!"
GetServiceCsProjFile ${servicePrefix} ${serviceName} serviceCsProjFile
echo "begin delivery of master branch for ${imagename}..." CI ${serviceName} ${serviceCsProjFile}
mkdir -p ${publishOutputDir}/${imagename}
dotnet publish ${publishFile} -o ../../publish/${imagename} -c release --no-restore
docker build -t ${imagefullname} ${publishOutputDir}/${imagename}
docker push ${imagefullname}
echo "delivery of master branch for ${imagename}:${version} has been successful."
else else
echo "Tips: master branch for ${imagename}:${version} will not be cied!!!" echo ""
echo "Tips: ${serviceName} will not be integrated to image registry!!!"
fi fi
}
declare services=$(ls -l src/services | awk 'NR>1')
declare servicePrefix=""
declare serviceName=""
declare isPublishable="0"
for service in ${services}
do
servicePrefix=($(echo ${service} | awk '{print $9}'))
isPublishable=($(grep -oP "(?<=${servicePrefix}Publishable>)[^<]+" "/tmp/cicd.props"))
GetServiceName "${servicePrefix}" serviceName
CI ${isPublishable} "${servicePrefix}" "./src/${servicePrefix}/${serviceName}.csproj"
done done
fi fi
echo "" echo ""
echo "Continuous integration for ${appName} has been successful." echo "Continuous integration[${Environment}] for ${appName} has been successful."
\ No newline at end of file \ No newline at end of file
...@@ -2,12 +2,12 @@ ...@@ -2,12 +2,12 @@
set -e set -e
# Import external functions # Import external functions
chmod +x ./devops/PipeLines/functions.sh chmod +x ./devops/PipeLines/Functions.deploy.sh
sh ./devops/PipeLines/functions.sh source ./devops/PipeLines/Functions.deploy.sh
GetAppName appName GetAppName appName
echo "Continuous deployment of ${Environment} branch for ${appName} starting..." echo "Continuous deployment[${Environment}] for ${appName} starting..."
GetCiCdSettings allPublishable noPublishable GetCiCdSettings allPublishable noPublishable
...@@ -16,45 +16,26 @@ then ...@@ -16,45 +16,26 @@ then
echo "" echo ""
echo "Tips: No services need to be cded." echo "Tips: No services need to be cded."
else else
echo "Please check the version of each microservice carefully !!!"
echo ""
GetVersion version GetVersion version
GetNameSpace namespace GetNameSpace namespace
GetImageRegistrySettings registryHost registryUserName GetRegistryHost registryHost
GetImageUserName registryUserName
function CD()
{
declare publishable=$1
declare appName=$2
declare imageName=$3
echo "" for servicePrefix in `ls ./src/Services|xargs -d '/'`
if [ "${publishable}" == "1" ]; do
IsPublishableOf ${servicePrefix} isPublishable
GetServiceName ${servicePrefix} serviceName
if [ "${isPublishable}" == "1" ];
then then
kubectl -n ${namespace} set image deployments/${appName} "${appName}=${registryHost}/${registryUserName}/${imageName}:${version}"; echo ""
if [ "${Environment}" == "Staging" ]; then echo "Tips: ${serviceName} begin deployment to K8S!!!"
kubectl -n ${namespace} scale deploy ${appName} --replicas=0; CD ${registryHost} ${registryUserName} ${serviceName} ${version} ${namespace}
kubectl -n ${namespace} scale deploy ${appName} --replicas=1;
fi
echo "deployment of ${Environment} branch for ${appName}:${version} has been successful."
else else
echo "Tips: ${Environment} branch for ${appName}:${version} will not be cded!!!" echo ""
echo "Tips: ${serviceName} will not be deploymented to K8S!!!"
fi fi
}
declare services=$(ls -l src/services | awk 'NR>1')
declare servicePrefix=""
declare serviceName=""
declare isPublishable="0"
for service in ${services}
do
servicePrefix=($(echo ${service} | awk '{print $9}'))
isPublishable=($(grep -oP "(?<=${servicePrefix}Publishable>)[^<]+" "/tmp/cicd.props"))
GetServiceName "${servicePrefix}" serviceName
CD ${apiPublishable} "${serviceName}" "${serviceName}"
done done
fi fi
echo "" echo ""
echo "Continuous deployment of ${Environment} branch for ${appName} has been successful." echo "Continuous deployment[${Environment}] for ${appName} has been successful."
...@@ -3,8 +3,8 @@ ...@@ -3,8 +3,8 @@
IFS=$'\n\n' IFS=$'\n\n'
# Import external functions # Import external functions
chmod +x ./devops/PipeLines/functions.sh chmod +x ./devops/PipeLines/Functions.core.sh
sh ./devops/PipeLines/functions.sh source ./devops/PipeLines/Functions.core.sh
#1: ready, 0: not ready. #1: ready, 0: not ready.
declare ready=0 declare ready=0
...@@ -24,11 +24,11 @@ do ...@@ -24,11 +24,11 @@ do
declare current=$(echo "${row}"|awk '{print $3}') declare current=$(echo "${row}"|awk '{print $3}')
declare uptodate=$(echo "${row}"|awk '{print $4}') declare uptodate=$(echo "${row}"|awk '{print $4}')
declare available=$(echo "${row}"|awk '{print $5}') declare available=$(echo "${row}"|awk '{print $5}')
echo "deployment: ${name}, desired: ${desired}, current: ${current}, uptodate: ${uptodate}, available: ${available}" echo "[${Environment}]deployment: ${name}, desired: ${desired}, current: ${current}, uptodate: ${uptodate}, available: ${available}"
if [ $((${desired})) == $((${current})) -a $((${current})) == $((${uptodate})) -a $((${uptodate})) == $((${available})) ]; then if [ $((${desired})) == $((${current})) -a $((${current})) == $((${uptodate})) -a $((${uptodate})) == $((${available})) ]; then
echo "${name} has been ready."; echo "[${Environment}]${name} has been ready.";
else else
echo "${name} has been not ready."; echo "[${Environment}]${name} has been not ready.";
allIsReady=0 allIsReady=0
fi fi
done done
......
#!/bin/bash
set -e
echo "[${Environment}]Begin testing..."
declare dir='./test/ServicesTests'
for prefix in `ls ${dir}|xargs -d '/'`
do
dotnet test "${dir}/${prefix}/${prefix}.csproj"
done
echo "[${Environment}]Test completed."
\ No newline at end of file
...@@ -3,12 +3,14 @@ ...@@ -3,12 +3,14 @@
IFS=$'\n\n' IFS=$'\n\n'
# Import external functions # Import external functions
chmod +x ./devops/PipeLines/functions.sh chmod +x ./devops/PipeLines/Functions.core.sh
sh ./devops/PipeLines/functions.sh source ./devops/PipeLines/Functions.core.sh
GetNameSpace namespace GetNameSpace namespace
declare replicas=$(kubectl -n ${namespace} get rs) echo "[${Environment}]Begin cleaning..."
# Remove the heading line.
declare replicas=$(kubectl -n ${namespace} get rs|awk 'NR > 1')
for row in $replicas for row in $replicas
do do
declare name=$(echo "${row}"|awk '{print $1}') declare name=$(echo "${row}"|awk '{print $1}')
...@@ -22,6 +24,4 @@ do ...@@ -22,6 +24,4 @@ do
fi fi
done done
echo 'clean successful...' echo '[${Environment}]Clean completed.'
\ No newline at end of file
exit 0
\ No newline at end of file
#!/bin/bash
set -e
IFS=$'\n\n'
export Environment='Staging'
# Import external functions
chmod +x ./devops/PipeLines/Functions.config.sh
source ./devops/PipeLines/Functions.config.sh
GetAppName appName
echo ""
echo "Begin creating ${appName}'s settings to the configmap of k8s..."
GetNameSpace namespace
# global variable
GetAccessToken AccessToken
GetRegistryHost RegistryHost
GetK8sApiServer K8sApiServer
GetKongApiServer KongApiServer
GetKongRouteDomain KongRouteDomain
for servicePrefix in `ls ./src/Services|xargs -d '/'`
do
GetServiceName ${servicePrefix} serviceName
GetServiceDir ${servicePrefix} ${serviceName} serviceDir
CreateConfig ${Environment} ${namespace} ${K8sApiServer} ${serviceDir} ${servicePrefix}
done
echo ""
echo "End creating app settings to the configmap of k8s..."
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment