diff --git a/Jenkinsfile b/Jenkinsfile index 80278a59..d7b820a9 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -102,28 +102,13 @@ pipeline { } } - stage('Generate docker image for feature') { - when { - expression { BUILD_TARGET == 'true' } - expression { BRANCH_NAME != 'master' } - } - steps { - sh 'make verify-build' - sh(returnStdout: false, script: ''' - feature_name=`echo $BRANCH_NAME | awk -F '/' '{ print $2 }'` - DEVELOPMENT=$feature_name DOCKER_REGISTRY=$DOCKER_REGISTRY make generate-docker-images - '''.stripIndent()) - } - } - stage('Generate docker image for development') { when { expression { BUILD_TARGET == 'true' } - expression { BRANCH_NAME == 'master' } } steps { sh 'make verify-build' - sh 'DEVELOPMENT=development DOCKER_REGISTRY=$DOCKER_REGISTRY make generate-docker-images' + sh 'DOCKER_REGISTRY=$DOCKER_REGISTRY make generate-docker-images' } } @@ -137,7 +122,7 @@ pipeline { revlist=`git rev-list --tags --max-count=1` rc=$? set -e - if [ 0 -eq $rc ]; then + if [ 0 -eq $rc -a x"$revlist" != x ]; then tag=`git describe --tags $revlist` major=`echo $tag | awk -F '.' '{ print $1 }'` @@ -178,7 +163,7 @@ pipeline { revlist=`git rev-list --tags --max-count=1` rc=$? set -e - if [ 0 -eq $rc ]; then + if [ 0 -eq $rc -a x"$revlist" != x ]; then tag=`git describe --tags $revlist` major=`echo $tag | awk -F '.' '{ print $1 }'` @@ -211,7 +196,7 @@ pipeline { revlist=`git rev-list --tags --max-count=1` rc=$? set -e - if [ 0 -eq $rc ]; then + if [ 0 -eq $rc -a x"$revlist" != x ]; then tag=`git describe --tags $revlist` major=`echo $tag | awk -F '.' '{ print $1 }'` @@ -252,30 +237,7 @@ pipeline { fi '''.stripIndent()) sh 'make verify-build' - sh 'DEVELOPMENT=other DOCKER_REGISTRY=$DOCKER_REGISTRY make generate-docker-images' - } - } - - stage('Release docker image for feature') { - when { - expression { RELEASE_TARGET == 'true' } - expression { BRANCH_NAME != 'master' } - } - steps { - sh(returnStdout: false, script: ''' - feature_name=`echo $BRANCH_NAME | awk -F '/' '{ print $2 }'` - set +e - docker images | grep ledger-middleware | grep $feature_name - rc=$? - set -e - if [ 0 -eq $rc ]; then - TAG=$feature_name DOCKER_REGISTRY=$DOCKER_REGISTRY make release-docker-images - fi - images=`docker images | grep entropypool | grep ledger-middleware | grep none | awk '{ print $3 }'` - for image in $images; do - docker rmi $image -f - done - '''.stripIndent()) + sh 'DOCKER_REGISTRY=$DOCKER_REGISTRY make generate-docker-images' } } @@ -285,12 +247,16 @@ pipeline { } steps { sh(returnStdout: false, script: ''' + branch=latest + if [ "x$BRANCH_NAME" != "xmaster" ]; then + branch=`echo $BRANCH_NAME | awk -F '/' '{ print $2 }'` + fi set +e - docker images | grep ledger-middleware | grep latest + docker images | grep ledger-middleware | grep $branch rc=$? set -e if [ 0 -eq $rc ]; then - TAG=latest DOCKER_REGISTRY=$DOCKER_REGISTRY make release-docker-images + DOCKER_REGISTRY=$DOCKER_REGISTRY make release-docker-images fi images=`docker images | grep entropypool | grep ledger-middleware | grep none | awk '{ print $3 }'` for image in $images; do @@ -312,13 +278,13 @@ pipeline { set -e if [ 0 -eq $rc -a x"$revlist" != x ]; then - tag=`git describe --tags $revlist` + tag=`git tag --sort=-v:refname | grep [1\\|3\\|5\\|7\\|9]$ | head -n1` set +e docker images | grep ledger-middleware | grep $tag rc=$? set -e if [ 0 -eq $rc ]; then - TAG=$tag DOCKER_REGISTRY=$DOCKER_REGISTRY make release-docker-images + DOCKER_REGISTRY=$DOCKER_REGISTRY make release-docker-images fi fi '''.stripIndent()) @@ -337,47 +303,41 @@ pipeline { set -e if [ 0 -eq $rc -a x"$taglist" != x ]; then - tag=`git describe --abbrev=0 --tags $taglist |grep [0\\|2\\|4\\|6\\|8]$ | head -n1` + tag=`git tag --sort=-v:refname | grep [0\\|2\\|4\\|6\\|8]$ | head -n1` set +e docker images | grep ledger-middleware | grep $tag rc=$? set -e if [ 0 -eq $rc ]; then - TAG=$tag DOCKER_REGISTRY=$DOCKER_REGISTRY make release-docker-images + DOCKER_REGISTRY=$DOCKER_REGISTRY make release-docker-images fi fi '''.stripIndent()) } } - stage('Deploy for feature') { + stage('Deploy for development') { when { expression { DEPLOY_TARGET == 'true' } expression { TARGET_ENV ==~ /.*development.*/ } - expression { BRANCH_NAME != 'master' } } steps { sh(returnStdout: false, script: ''' - feature_name=`echo $BRANCH_NAME | awk -F '/' '{ print $2 }'` - sed -i "s/ledger-middleware:latest/ledger-middleware:$feature_name/g" cmd/ledger-middleware/k8s/02-ledger-middleware.yaml + branch=latest + if [ "x$BRANCH_NAME" != "xmaster" ]; then + branch=`echo $BRANCH_NAME | awk -F '/' '{ print $2 }'` + fi + sed -i "s/ledger-middleware:latest/ledger-middleware:$branch/g" cmd/ledger-middleware/k8s/02-ledger-middleware.yaml sed -i "s/uhub.service.ucloud.cn/$DOCKER_REGISTRY/g" cmd/ledger-middleware/k8s/02-ledger-middleware.yaml - TAG=$feature_name make deploy-to-k8s-cluster + if [ "x$REPLICAS_COUNT" == "x" ];then + REPLICAS_COUNT=2 + fi + sed -i "s/replicas: 2/replicas: $REPLICAS_COUNT/g" cmd/ledger-middleware/k8s/02-ledger-middleware.yaml + make deploy-to-k8s-cluster '''.stripIndent()) } } - stage('Deploy for development') { - when { - expression { DEPLOY_TARGET == 'true' } - expression { TARGET_ENV ==~ /.*development.*/ } - expression { BRANCH_NAME == 'master' } - } - steps { - sh 'sed -i "s/uhub.service.ucloud.cn/$DOCKER_REGISTRY/g" cmd/ledger-middleware/k8s/02-ledger-middleware.yaml' - sh 'TAG=latest make deploy-to-k8s-cluster' - } - } - stage('Deploy for testing') { when { expression { DEPLOY_TARGET == 'true' } @@ -389,16 +349,21 @@ pipeline { revlist=`git rev-list --tags --max-count=1` rc=$? set -e - if [ ! 0 -eq $rc ]; then + if [ ! 0 -eq $rc -o x"$revlist" == x]; then exit 0 fi - tag=`git describe --tags $revlist` + tag=`git tag --sort=-v:refname | grep [1\\|3\\|5\\|7\\|9]$ | head -n1` git reset --hard git checkout $tag sed -i "s/ledger-middleware:latest/ledger-middleware:$tag/g" cmd/ledger-middleware/k8s/02-ledger-middleware.yaml sed -i "s/uhub.service.ucloud.cn/$DOCKER_REGISTRY/g" cmd/ledger-middleware/k8s/02-ledger-middleware.yaml - TAG=$tag make deploy-to-k8s-cluster + if [ "x$REPLICAS_COUNT" == "x" ];then + REPLICAS_COUNT=2 + fi + sed -i "s/replicas: 2/replicas: $REPLICAS_COUNT/g" cmd/ledger-middleware/k8s/02-ledger-middleware.yaml + sed -i "s/imagePullPolicy: Always/imagePullPolicy: IfNotPresent/g" cmd/ledger-middleware/k8s/02-ledger-middleware.yaml + make deploy-to-k8s-cluster '''.stripIndent()) } } @@ -414,15 +379,20 @@ pipeline { taglist=`git rev-list --tags` rc=$? set -e - if [ ! 0 -eq $rc ]; then + if [ ! 0 -eq $rc -o x"$revlist" == x]; then exit 0 fi - tag=`git describe --abbrev=0 --tags $taglist |grep [0\\|2\\|4\\|6\\|8]$ | head -n1` + tag=`git tag --sort=-v:refname | grep [0\\|2\\|4\\|6\\|8]$ | head -n1` git reset --hard git checkout $tag sed -i "s/ledger-middleware:latest/ledger-middleware:$tag/g" cmd/ledger-middleware/k8s/02-ledger-middleware.yaml sed -i "s/uhub.service.ucloud.cn/$DOCKER_REGISTRY/g" cmd/ledger-middleware/k8s/02-ledger-middleware.yaml - TAG=$tag make deploy-to-k8s-cluster + if [ "x$REPLICAS_COUNT" == "x" ];then + REPLICAS_COUNT=2 + fi + sed -i "s/replicas: 2/replicas: $REPLICAS_COUNT/g" cmd/ledger-middleware/k8s/02-ledger-middleware.yaml + sed -i "s/imagePullPolicy: Always/imagePullPolicy: IfNotPresent/g" cmd/ledger-middleware/k8s/02-ledger-middleware.yaml + make deploy-to-k8s-cluster '''.stripIndent()) } } diff --git a/Makefile b/Makefile index 102d6ea7..e488dca4 100644 --- a/Makefile +++ b/Makefile @@ -21,6 +21,7 @@ go.mod: go mod tidy -compat=1.17 deps: + go get github.com/ugorji/go/codec@latest go get -d ./... go mod tidy -compat=1.17 @@ -54,7 +55,7 @@ verify-spelling: ## Verifies spelling. gen-ent: go install entgo.io/ent/cmd/ent@v0.11.2 - go run -mod=mod entgo.io/ent/cmd/ent generate --feature entql,sql/lock,sql/execquery,sql/upsert,privacy,schema/snapshot ./pkg/db/ent/schema + go run -mod=mod entgo.io/ent/cmd/ent generate --feature entql,sql/lock,sql/execquery,sql/upsert,privacy,schema/snapshot,sql/modifier ./pkg/db/ent/schema all: verify-build @@ -62,13 +63,13 @@ ${SERVICES}: ${REPO_ROOT}/hack/verify-build.sh $@ ${SERVICEIMAGES}: - ${REPO_ROOT}/hack/generate-docker-image.sh $(@:%-image=%) $(DEVELOPMENT) $(DOCKER_REGISTRY) + ${REPO_ROOT}/hack/generate-docker-image.sh $(@:%-image=%) $(DOCKER_REGISTRY) ${SERVICEIMAGERELEASES}: - ${REPO_ROOT}/hack/release-docker-image.sh $(@:%-release=%) $(TAG) $(DOCKER_REGISTRY) + ${REPO_ROOT}/hack/release-docker-image.sh $(@:%-release=%) $(DOCKER_REGISTRY) ${SERVICEK8SDEPLOYS}: - ${REPO_ROOT}/hack/deploy-to-k8s-cluster.sh $(@:%-k8s-deploy=%) $(TAG) + ${REPO_ROOT}/hack/deploy-to-k8s-cluster.sh $(@:%-k8s-deploy=%) generate-docker-images: ${SERVICES} ${SERVICEIMAGES} release-docker-images: ${generate-docker-images} ${SERVICEIMAGERELEASES} diff --git a/go.mod b/go.mod index 13d3022a..8f2013c1 100644 --- a/go.mod +++ b/go.mod @@ -89,7 +89,7 @@ require ( github.com/spf13/pflag v1.0.5 // indirect github.com/spf13/viper v1.11.0 // indirect github.com/subosito/gotenv v1.2.0 // indirect - github.com/ugorji/go/codec v1.2.8 // indirect + github.com/ugorji/go/codec v1.2.12 // indirect github.com/zclconf/go-cty v1.8.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.31.0 // indirect go.opentelemetry.io/otel v1.8.0 // indirect diff --git a/go.sum b/go.sum index 5e6f7d63..74cbee8b 100644 --- a/go.sum +++ b/go.sum @@ -465,8 +465,8 @@ github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/ugorji/go v0.0.0-20190204201341-e444a5086c43/go.mod h1:hnLbHMwcvSihnDhEfx2/BzKp2xb0Y+ErdfYcrs9tkJQ= -github.com/ugorji/go/codec v1.2.8 h1:sgBJS6COt0b/P40VouWKdseidkDgHxYGm0SAglUHfP0= -github.com/ugorji/go/codec v1.2.8/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= +github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE= +github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= github.com/urfave/cli/v2 v2.4.0 h1:m2pxjjDFgDxSPtO8WSdbndj17Wu2y8vOT86wE/tjr+I= github.com/urfave/cli/v2 v2.4.0/go.mod h1:NX9W0zmTvedE5oDoOMs2RTC8RvdK98NTYZE5LbaEYPg= github.com/vmihailenco/msgpack v3.3.3+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk= diff --git a/hack/deploy-to-k8s-cluster.sh b/hack/deploy-to-k8s-cluster.sh index 15995642..ee223278 100755 --- a/hack/deploy-to-k8s-cluster.sh +++ b/hack/deploy-to-k8s-cluster.sh @@ -16,12 +16,23 @@ if git_status=$(git status --porcelain --untracked=no 2>/dev/null) && [[ -z "${g git_tree_state=clean fi -version=latest - -## For testing or production environment, pass the second variable -if [ "x" != "x$2" ]; then - version=$2 +set +e +## Get tag we're on +# version=`git describe --tags --abbrev=0` +version=`git describe --exact-match --tags $(git log -n1 --pretty='%h')` +if [ ! $? -eq 0 ]; then + ## branch=`git branch --show-current` // Only for git 2.22^ + branch=`git rev-parse --abbrev-ref HEAD | grep -v ^HEAD$ || git rev-parse HEAD` + if [ "x$branch" == "xmaster" ]; then + version=latest + else + version=`echo $branch | awk -F '/' '{print $2}'` + fi + ## Do we need commit ? + # commit=`git rev-parse HEAD` + # version=$version-$commit fi +set -e service_name=$1 diff --git a/hack/generate-docker-image.sh b/hack/generate-docker-image.sh index b4d243cb..df33a527 100755 --- a/hack/generate-docker-image.sh +++ b/hack/generate-docker-image.sh @@ -13,28 +13,30 @@ OS="${PLATFORM%/*}" ARCH=$(basename "$PLATFORM") if git_status=$(git status --porcelain --untracked=no 2>/dev/null) && [[ -z "${git_status}" ]]; then - git_tree_state=clean + git_tree_state=clean fi set +e -version=`git describe --tags --abbrev=0` +## Get tag we're on +# version=`git describe --tags --abbrev=0` +version=`git describe --exact-match --tags $(git log -n1 --pretty='%h')` if [ ! $? -eq 0 ]; then + branch=`git rev-parse --abbrev-ref HEAD | grep -v ^HEAD$ || git rev-parse HEAD` + if [ "x$branch" == "xmaster" ]; then version=latest + else + version=`echo $branch | awk -F '/' '{print $2}'` + fi + ## Do we need commit ? + # commit=`git rev-parse HEAD` + # version=$version-$commit fi set -e service_name=$1 -## For development environment, pass the second variable -if [ "xdevelopment" == "x$2" ]; then - version=latest -elif [ "xother" != "x$2" ]; then - version=$2 -fi - registry=uhub.service.ucloud.cn - -if [ "x" != $3 ]; then - registry=$3 +if [ "x" != $2 ]; then + registry=$2 fi echo "Generate docker image for $PLATFORM -- $version" @@ -51,7 +53,7 @@ cd $OUTPUT/.${service_name}.tmp user=`whoami` if [ "$user" == "root" ]; then - docker build -t $registry/entropypool/$service_name:$version . + docker build -t $registry/entropypool/$service_name:$version . else - sudo docker build -t $registry/entropypool/$service_name:$version . + sudo docker build -t $registry/entropypool/$service_name:$version . fi diff --git a/hack/release-docker-image.sh b/hack/release-docker-image.sh index 269b2757..07655d5e 100755 --- a/hack/release-docker-image.sh +++ b/hack/release-docker-image.sh @@ -16,17 +16,25 @@ if git_status=$(git status --porcelain --untracked=no 2>/dev/null) && [[ -z "${g git_tree_state=clean fi -version=latest - +set +e ## For testing or production environment, pass the second variable -if [ "x" != "x$2" ]; then - version=$2 +version=`git describe --exact-match --tags $(git log -n1 --pretty='%h')` +if [ ! $? -eq 0 ]; then + branch=`git rev-parse --abbrev-ref HEAD | grep -v ^HEAD$ || git rev-parse HEAD` + if [ "x$branch" == "xmaster" ]; then + version=latest + else + version=`echo $branch | awk -F '/' '{print $2}'` + fi + ## Do we need commit ? + # commit=`git rev-parse HEAD` + # version=$version-$commit fi +set -e registry=uhub.service.ucloud.cn - -if [ "x" != $3 ]; then - registry=$3 +if [ "x" != $2 ]; then + registry=$2 fi service_name=$1 diff --git a/hack/verify-go-mod.sh b/hack/verify-go-mod.sh index d65d63b3..4ebba697 100755 --- a/hack/verify-go-mod.sh +++ b/hack/verify-go-mod.sh @@ -4,5 +4,6 @@ set -o errexit set -o nounset set -o pipefail +go get github.com/ugorji/go/codec@latest go mod tidy -compat=1.17 git diff --exit-code go.*