#!/usr/bin/env bash## This script creates a DEB packages for <project-name> project.## Just run it after the source code has been pulled from repository.## The created DEB: *.deb, you can find in $BUILDSPACE directory################################################################################# Location of the source codeexportWORKSPACE="$(cd"$(dirname "$0")/.."&&pwd -P)"#"# A temp directory for intermediate resultsexportBUILDSPACE="${BUILDSPACE:-$WORKSPACE/tmp}"## Export name and email of maintainerexportDEBEMAIL="devops-team@thumbtack.net "exportDEBFULLNAME="Thumbtack DevOps Team"function git_version(){localws=$(test -n "$1"&&echo"--git-dir=${1}/.git")# Get latest tag for current branch and number of ahead commitslocaltag=$(git $ws describe --tags --abbrev=0)[[$tag=~ ^v*[0-9]+\.[0-9]+\.[0-9]+$ ]]||{echo"Error: Git tag is not set or has invalid format: $tag" >&2return1}localrev=$(git $ws rev-list $tag.. | wc -l)localhash=$(git $ws rev-parse --short HEAD)test"${rev}"=="0"&&echo${tag#v}||printf"%s-r%03d+%s"${tag#v}${rev}${hash};}upload_artifact(){localrepo="https://repository.thumbtack.lo/nexus/service/local/artifact/maven/content"localpkg_name="$1"pkg_ver="$2"artifact="$3" curl -X PUT --user "" --data-binary @${artifact}\"$repo/com/penton/eqw/${pkg_name}/${pkg_ver}/${pkg_name}-${pkg_ver}.tgz"}set -e
# This version will be assigned for creating DEBPKG_VERSION=$(git_version)# Save a git branch to add in history of DEB packagePKG_BRANCH=$(git --git-dir=${WORKSPACE}/.git rev-parse --abbrev-ref HEAD)## Choose distribution for the DEB package stable/testing/unstablePKG_DISTRIBUTION=unstable
[[$PKG_VERSION=~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]&&PKG_DISTRIBUTION=stable
rm -rf $BUILDSPACEecho"Building project v${PKG_VERSION} (${DISTRIBUTION})..."exportBUILDSPACE="${BUILDSPACE}/resource-tool-${PKG_VERSION}"mkdir -p ${BUILDSPACE}pushd$BUILDSPACE yes | dh_make -s --createorig --templates ${WORKSPACE}/ops-tools/debian
dch -v "$PKG_VERSION""Git commit: $(git --git-dir=$WORKSPACE/.git rev-parse HEAD)($PKG_BRANCH)" -D ${PKG_DISTRIBUTION} dpkg-buildpackage -b -us -uc
echo"${PKG_VERSION}" > ../build.version
popd
Comments (6)
Sergey Pechenko
Проверено на thumbtack.ru:
yes | dh_make -s --createorig --templates ${WORKSPACE}/ops-tools/debian => dh_make --yes -s --native --createorig --templates ${WORKSPACE}/ops-tools/debian
Первая строка не собирает deb-пакет без ключа --native.
dch -v "$PKG_VERSION" "Git commit: $(git --git-dir=$WORKSPACE/.git rev-parse HEAD)($PKG_BRANCH)" -D ${PKG_DISTRIBUTION}
Выражение в скобках неудобоваримо, я бы вынес в отдельную переменную.
dpkg-buildpackage -b -us -uc => dpkg-buildpackage -b -pgpg
Третья строка собирает неподписанные пакеты, в то время как в наших полиси написано прямо обратное - пакеты должны быть подписаны.
Anton Talevnin
Первая строка не собирает deb-пакет без ключа --native.
Видимо стоит описать окружение, в котором ты собирал. У меня все работает и без этого ключика, проверено на resource-tool
Выражение в скобках неудобоваримо, я бы вынес в отдельную переменную
Можно, но и использование переменной ради одного использования можно назвать неудобоваримым.
Третья строка собирает неподписанные пакеты
Полностью согласен, надо переделать
Ilya Zaytsev
[[ $tag =~ ^[0-9]+.[0-9]+.[0-9]+$ ]] && PKG_DISTRIBUTION=stable
Наверное не $tag, а $PKG_VERSION?
Anton Talevnin
Good catch! Fixed
Sergey Pozdnyakov
Надо еще v удалить из регэкспа тега и #v из переменных
Sergey Pozdnyakov
В 28й строке баг должно быть -eq вместо ==
HTTPSSSH
You can clone a snippet to your computer for local editing.
Learn more.
Проверено на thumbtack.ru:
yes | dh_make -s --createorig --templates ${WORKSPACE}/ops-tools/debian => dh_make --yes -s --native --createorig --templates ${WORKSPACE}/ops-tools/debian Первая строка не собирает deb-пакет без ключа --native.
dch -v "$PKG_VERSION" "Git commit: $(git --git-dir=$WORKSPACE/.git rev-parse HEAD)($PKG_BRANCH)" -D ${PKG_DISTRIBUTION} Выражение в скобках неудобоваримо, я бы вынес в отдельную переменную.
dpkg-buildpackage -b -us -uc => dpkg-buildpackage -b -pgpg Третья строка собирает неподписанные пакеты, в то время как в наших полиси написано прямо обратное - пакеты должны быть подписаны.
Видимо стоит описать окружение, в котором ты собирал. У меня все работает и без этого ключика, проверено на resource-tool
Можно, но и использование переменной ради одного использования можно назвать неудобоваримым.
Полностью согласен, надо переделать
[[ $tag =~ ^[0-9]+.[0-9]+.[0-9]+$ ]] && PKG_DISTRIBUTION=stable Наверное не $tag, а $PKG_VERSION?
Good catch! Fixed
Надо еще v удалить из регэкспа тега и #v из переменных
В 28й строке баг должно быть -eq вместо ==