From 9934e625c6607ed804edbde2514cb1703e59dbb4 Mon Sep 17 00:00:00 2001 From: Pavlo Strokov Date: Wed, 15 Jul 2020 15:02:51 +0300 Subject: [PATCH] Adding of PgBouncer Gitaly project plans to use PgBouncer for Praefect service https://gitlab.com/gitlab-org/gitaly/-/issues/2816 We want to have an image for CI so we can test interaction of Praefect with PostgreSQL database if PgBouncer sits in between. Installation script added with 1.14.0 version of PgBouncer (latest). Related to: https://gitlab.com/gitlab-org/gitaly/-/issues/2816 --- .gitlab-ci.yml | 2 ++ Dockerfile.custom | 5 +++++ README.md | 1 + scripts/custom-docker-build | 14 ++++++++++++++ scripts/install-pgbouncer | 22 ++++++++++++++++++++++ 5 files changed, 44 insertions(+) create mode 100755 scripts/install-pgbouncer diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1a8780b..1ca995d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -66,6 +66,7 @@ ruby-2.6-golang-1.13-git-2.27 test: *test_custom ruby-2.6-golang-1.14-git-2.25 test: *test_custom ruby-2.6-golang-1.14-git-2.26 test: *test_custom ruby-2.6-golang-1.14-git-2.27 test: *test_custom +ruby-2.6-golang-1.14-git-2.27-pgbouncer-1.14 test: *test_custom # Used by GitLab: https://gitlab.com/gitlab-org/gitlab/blob/master/.gitlab-ci.yml ruby-2.6.6-golang-1.14-git-2.27-lfs-2.9-chrome-83-node-12.x-yarn-1.21-postgresql-11-graphicsmagick-1.3.34 test: *test_custom @@ -127,6 +128,7 @@ ruby-2.6-golang-1.13-git-2.27: *build_and_deploy_custom ruby-2.6-golang-1.14-git-2.25: *build_and_deploy_custom ruby-2.6-golang-1.14-git-2.26: *build_and_deploy_custom ruby-2.6-golang-1.14-git-2.27: *build_and_deploy_custom +ruby-2.6-golang-1.14-git-2.27-pgbouncer-1.14: *build_and_deploy_custom # Used by GitLab CE/EE: https://gitlab.com/gitlab-org/gitlab-ee/blob/master/.gitlab-ci.yml ruby-2.6.6-golang-1.14-git-2.27-lfs-2.9-chrome-83-node-12.x-yarn-1.21-postgresql-11-graphicsmagick-1.3.34: *build_and_deploy_custom diff --git a/Dockerfile.custom b/Dockerfile.custom index dfeb798..d447279 100644 --- a/Dockerfile.custom +++ b/Dockerfile.custom @@ -66,6 +66,11 @@ RUN if [ -n "$GRAPHISMAGICK_VERSION" ]; then /scripts/install-graphicsmagick && ARG DOCKER_VERSION RUN if [ -n "$DOCKER_VERSION" ]; then /scripts/install-docker $DOCKER_VERSION; fi +# PgBouncer +ARG PGBOUNCER_VERSION +ARG PGBOUNCER_DOWNLOAD_SHA256 +RUN if [ -n "$PGBOUNCER_VERSION" ] ; then /scripts/install-pgbouncer $PGBOUNCER_VERSION $PGBOUNCER_DOWNLOAD_SHA256; fi + RUN locale-gen en_US.UTF-8 ENV LANG en_US.UTF-8 ENV LANGUAGE en_US:en diff --git a/README.md b/README.md index 67c534c..71dc6a7 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,7 @@ options are: 1. `terraform` 1. `ansible` 1. `graphicsmagick` +1. `pgbouncer` #### Adding a new build diff --git a/scripts/custom-docker-build b/scripts/custom-docker-build index 34727ee..68ef1dc 100755 --- a/scripts/custom-docker-build +++ b/scripts/custom-docker-build @@ -180,6 +180,19 @@ function print_graphicsmagick_args() { printf -- "--build-arg GRAPHISMAGICK_DOWNLOAD_SHA256=%s " "$GRAPHISMAGICK_DOWNLOAD_SHA256" } +function print_pgbouncer_args() { + case "$1" in + 1.14) + PGBOUNCER_VERSION=1.14.0 + PGBOUNCER_DOWNLOAD_SHA256=a0c13d10148f557e36ff7ed31793abb7a49e1f8b09aa2d4695d1c28fa101fee7 + ;; + *) echo "Unknown pgbouncer version $1"; exit 1; + esac + + printf -- "--build-arg PGBOUNCER_VERSION=%s " "$PGBOUNCER_VERSION" + printf -- "--build-arg PGBOUNCER_DOWNLOAD_SHA256=%s " "$PGBOUNCER_DOWNLOAD_SHA256" +} + function parse_arguments() { read base read base_version @@ -206,6 +219,7 @@ function parse_arguments() { ansible) print_ansible_args $version ;; terraform) print_terraform_args $version ;; graphicsmagick) print_graphicsmagick_args $version ;; + pgbouncer) print_pgbouncer_args $version ;; *) exit 1;; esac done diff --git a/scripts/install-pgbouncer b/scripts/install-pgbouncer new file mode 100755 index 0000000..7738231 --- /dev/null +++ b/scripts/install-pgbouncer @@ -0,0 +1,22 @@ +#!/bin/bash + +PGBOUNCER_VERSION=${1} +PGBOUNCER_DOWNLOAD_SHA256=${2} + +PGBOUNCER_DOWNLOAD_URL="https://www.pgbouncer.org/downloads/files/${PGBOUNCER_VERSION}/pgbouncer-${PGBOUNCER_VERSION}.tar.gz" + +curl -fsSL "$PGBOUNCER_DOWNLOAD_URL" -o pgbouncer.zip +echo "${PGBOUNCER_DOWNLOAD_SHA256} pgbouncer.zip" | sha256sum -c - +unzip -d /usr/local/bin pgbouncer.zip +rm pgbouncer.zip + +curl -o pgbouncer.tar.gz -L https://pgbouncer.github.io/downloads/files/$PGBOUNCER_VERSION/pgbouncer-$PGBOUNCER_VERSION.tar.gz + +tar xvfz pgbouncer.tar.gz +cd pgbouncer-${PGBOUNCER_VERSION} +./configure --prefix=/usr/local +make +cp pgbouncer /usr/local/bin + +cd .. +rm -rf pgbouncer-${PGBOUNCER_VERSION}