Simplify the execution of the release container
Make gerrit-release.sh the default Docker container entrypoint
and adjust the 'run' as the default target for using the Makefile
to perform a Gerrit release.
Simplify the life of the release manager by allowing to trigger
a release with the following simple command:
make BRANCH=<stable branch> RELEASE=<release number> SNAPSHOT=<snapshot version>
Example:
make BRANCH=stable-3.3 RELEASE=3.3.0 SNAPSHOT=3.3.1-SNAPSHOT
Git config is automatically set (if mounted externally), using the
user's .gitconfig as a template. Credentials are asked once and then
kept in memory for the whole release process session.
Non relevant Makefile targets are removed for keeping it simple and more
focused.
Bug: Issue 13577
Change-Id: Ib13ea7fb3602ade5c50e8a0d504d698d5146a64c
diff --git a/jenkins-docker/slave-release/Dockerfile b/jenkins-docker/slave-release/Dockerfile
index 2eb3e65..152e63e 100644
--- a/jenkins-docker/slave-release/Dockerfile
+++ b/jenkins-docker/slave-release/Dockerfile
@@ -10,6 +10,10 @@
COPY gerrit-release.sh /usr/local/bin
-ENTRYPOINT /bin/bash
+ENTRYPOINT [ "/usr/local/bin/gerrit-release.sh" ]
+
+CMD [ "--help" ]
USER jenkins
+
+WORKDIR /home/jenkins
diff --git a/jenkins-docker/slave-release/Makefile b/jenkins-docker/slave-release/Makefile
index e8d128c..2d0a20b 100644
--- a/jenkins-docker/slave-release/Makefile
+++ b/jenkins-docker/slave-release/Makefile
@@ -1,25 +1,53 @@
NO_CACHE=true
PREFIX=gerritforge
-IMAGE=${PREFIX}/gerrit-ci-slave-bazel:debian-buster-nocache-80.0.3987.149
+IMAGE=${PREFIX}/gerrit-release-bazel:debian-buster
CONTAINER=release
-build:
+######################################################
+# Customize the parameters below for running a release
+######################################################
+
+# Branch from where the release will be cut
+BRANCH=stable-3.3
+
+# Release number
+RELEASE=3.3.0
+
+# Next SNAPSHOT after the release
+SNAPSHOT=3.3.1-SNAPSHOT
+
+# Release manager's GNUPG keyring
+GNUPG=${HOME}/.gnupg
+
+# Release manager's local git config for authentication
+GIT_CONFIG=${HOME}/.gitconfig
+
+# Release manager's local git cookies file
+GIT_COOKIES=${HOME}/.gitcookies
+
+######################################################
+# Targets for building the image and making a release
+######################################################
+
+run:
+ docker run --rm -it --name ${CONTAINER} ${IMAGE} ${BRANCH} ${RELEASE} ${SNAPSHOT} \
+ -u jenkins \
+ -v `pwd`/.gerritcodereview:/home/jenkins/.gerritcodereview \
+ -v ${HOME}/.m2:/home/jenkins/.m2 \
+ -v ${GNUPG}:/home/jenkins/.gnupg \
+ -v ${GIT_CONFIG}:/home/jenkins/.gitconfig.template \
+ -v ${GIT_COOKIES}:/home/jenkins/.gitcookies
+
+pull:
+ docker pull gerritforge/gerrit-ci-slave-bazel:debian-buster-nocache-80.0.3987.149
+
+build: pull
docker build --no-cache=$(NO_CACHE) -t ${IMAGE} .
-# Dockerfile shows from where to manually execute the release script once in.
-# E.g.: /usr/local/bin/gerrit-release.sh stable-3.3 3.3.0-rc3 3.3.0-SNAPSHOT
-run:
- docker run -it --name ${CONTAINER} ${IMAGE}
-
-rerun: clean-container run
-
-publish:
+publish: build
docker push ${IMAGE}
-clean-image:
+clean:
docker rmi -f ${IMAGE}
-clean-container:
- docker rm -f ${CONTAINER}
-
-.PHONY: clean-image clean-container publish
+.PHONY: run pull build publish clean
diff --git a/jenkins-docker/slave-release/gerrit-release.sh b/jenkins-docker/slave-release/gerrit-release.sh
index 1a9fa7e..8c49e40 100755
--- a/jenkins-docker/slave-release/gerrit-release.sh
+++ b/jenkins-docker/slave-release/gerrit-release.sh
@@ -1,6 +1,6 @@
#!/bin/bash -e
-if [ "$1" == "" ] || [ "$2" == "" ]
+if [ "$1" == "--help" ] || [ "$1" == "" ] || [ "$2" == "" ] || [ "$3" == "" ]
then
echo "Gerrit Code Review - release automation script"
echo "----------------------------------------------"
@@ -23,7 +23,13 @@
rm -Rf gerrit
fi
+if [ -f $HOME/.gitconfig.template ]
+then
+ cp $HOME/.gitconfig.template $HOME/.gitconfig
+fi
+
echo "Cloning and building Gerrit Code Review on branch $branch ..."
+git config --global credential.helper cache
git clone https://gerrit.googlesource.com/gerrit && (cd gerrit && f=$(git rev-parse --git-dir)/hooks/commit-msg ; curl -Lo "$f" https://gerrit-review.googlesource.com/tools/hooks/commit-msg ; chmod +x "$f")
pushd gerrit
@@ -85,7 +91,7 @@
echo "Pushing gerrit documentation to gerrit-documentation ..."
unzip searchfree.zip
pushd Documentation
-version_no_rc=$(echo "%version" | cut -d '-' -f 1)
+version_no_rc=$(echo "$version" | cut -d '-' -f 1)
gsutil cp -r . gs://gerrit-documentation/Documentation/"$version_no_rc"
popd