Aŭtomatigo de HotFix en Maven-projektoj uzante TeamCity

Ĉi tiu afiŝo priskribos agordi HotFix-aŭtomatigon en Maven-projektoj uzante Teamcity.

Por fari HotFix, multaj manaj paŝoj estas kutime faritaj:

  1. Kreu brunĉon por la eldono, al kiu vi volas elŝuti HotFix
  2. Ripari cimon en liberigo
  3. Ŝanĝu la version de eraro en la eldonbranĉo
  4. Elŝutu etikedon de versio de bugfix

La punktoj 1,3,4 povas esti aŭtomatigitaj.

Antaŭ ol ni transiru al la temo, mi ŝatus tuŝi gravan kaj kompleksan temon - versionado programaro. Vi povas mallonge kompreni Semver en ĉi tiu ekrankopio. Aŭtomatigo de HotFix en Maven-projektoj uzante TeamCity

Vi povas legi pli ĉe la ligilo: 1.

Ĉiuj agordoj priskribitaj en ĉi tiu afiŝo baziĝas sur Semver и Trunk-Bazita Evoluo.

En Trunk-Bazita Disvolviĝo, vi devas krei vian propran branĉon por ĉiu eldono. Ĉiuj ŝanĝoj (reparadoj) en ĉi tiu eldono estas faritaj al ĉi tiu branĉo.

Kiel parto de ĉi tiu afiŝo, ni aŭtomatigos la jenajn aferojn:

  • CI-konstruo

  • Kreante novan eldonon

  • Kreante eldonbranĉon

  • Ŝanĝante la version de bugfix

Aŭtomatigo de HotFix en Maven-projektoj uzante TeamCity

Postuloj:

Ni kreu la projekton "Automation Maven Hotfix" en Teamcity kaj kreu 4 taskojn tie.

  • CI Konstruo

  • Kreu branĉon por liberigo

  • Maven-inkrementa eraro-korekto (Ŝanĝi cimkorektan version))

  • Maven-eldono (Kreante novan eldonon)

Projekta ekrankopio:

Aŭtomatigo de HotFix en Maven-projektoj uzante TeamCity

Ĝeneralaj agordoj

En ĉiuj taskoj vi devas marki la skatolon "Pura konstruo: Forigu ĉiujn dosierojn en la kasa dosierujo antaŭ la konstruo", ĉar sen ĉi tiu markobutono mi ricevis erarojn.

Ni kreas ununuran VCS. VCS-ecoj estas ruĝe rondigitaj.

Aŭtomatigo de HotFix en Maven-projektoj uzante TeamCity

Tipe VCSoj uzas la HTTPS-skemon. EN Specifo de branĉo: indikis rigardi ĉiujn brunĉojn kaj ĉiujn etikedojn:

+:refs/heads/*
+:refs/tags/*

Necesas krei 4 Agordajn Parametrojn.

  • BRANCH_FOR_INCREMENT
  • TAG_FROM_VERSION
  • TEAM_USER
  • TEAM_USER_EMAIL

La valorkampo en BRANCH_FOR_INCREMENT kaj TAG_FROM_VERSION devas esti malplena.

Aŭtomatigo de HotFix en Maven-projektoj uzante TeamCity

Vi devas alŝuti/aldoni privatan ŝlosilon. Ĉiuj taskoj krom CI Build postulas privatan ŝlosilon.

Aŭtomatigo de HotFix en Maven-projektoj uzante TeamCity

En ĉiu tasko, krom CI-Konstruo, en la sekcio Konstruaj Trajtoj vi devas konekti privatan ŝlosilon.

Ekzemplo por Maven liberigo

Aŭtomatigo de HotFix en Maven-projektoj uzante TeamCity

CI Konstruo**.

En tasko CI Konstruo nur unu paŝon mvn pura testo

Aŭtomatigo de HotFix en Maven-projektoj uzante TeamCity

Maven liberigo

En tasko Maven liberigo 2 paŝoj. La unua paŝo estas kontroli, ke brunĉo estas majstro. Se brunĉo ne estas majstro, tiam la tasko falas.

BRANCH=$(git branch | grep * | cut -d ' ' -f2)
echo "$BRANCH"
if [[ "$BRANCH" != "master" ]]; then
  echo 'Branch is not master';
  echo 'Aborting';
  exit 1;
fi

Aŭtomatigo de HotFix en Maven-projektoj uzante TeamCity

La dua paŝo estas norma mvn release:prepari kun opcio --batch-mode

Aŭtomatigo de HotFix en Maven-projektoj uzante TeamCity

Kreu branĉon por liberigo

Por krei varmigon por eldono, vi devas krei branĉon. Jen kion faras la tasko Kreu branĉon por liberigo. Ŝi havas 2 paŝojn.

La unua paŝo kontrolas, ke brunĉo ne estas majstro, kaj la dua kontrolas, ke la versio estas en la dosiero pom.xml ne enhavis la vorton FOTO

BRANCH=$(git branch | grep * | cut -d ' ' -f2)
echo "$BRANCH"
if [[ "$BRANCH" == "master" ]]; then
  echo 'Branch is master';
  echo 'Aborting';
  exit 1;
fi

echo "Get version package from pom.xml"
version=`python -c "import xml.etree.ElementTree as ET; print(ET.parse(open('pom.xml')).getroot().find('{http://maven.apache.org/POM/4.0.0}version').text)"`

echo "Check SNAPSHOT"
if [[ $version == "*SNAPSHOT*" ]]; then
    echo "******************* W A R N I N G *************************"
    echo "************ You are create branch for SNAPSHOTS ******************"
    echo "***********************************************************"
    exit 1
fi

Aŭtomatigo de HotFix en Maven-projektoj uzante TeamCity

La dua paŝo ŝanĝas la konekton en developerConnection de HTTPS al GIT.

# Здесь получаем developerConnection из файла pom.xml
developerConnection=$(xmllint -xpath "/*[local-name() = 'project' ]//*[local-name() = 'developerConnection']/text()" pom.xml | sed  's|scm:git:ssh://||')
echo developerConnection
echo $developerConnection
# Здесь меняем / на : в URL для git_remote_url
git_remote_url=$(echo $developerConnection| sed 's/gitlab.com//gitlab.com:/g')
echo git_remote_url
echo $git_remote_url

git remote set-url origin $git_remote_url

# Если вы не используете ввстроенную возможность Teamcity получения user и email из ~/.gitconfig, то можно указать их здесь
echo 'git config user.name %TEAM_USER%'
git config user.name %TEAM_USER%
echo 'git config user.email %TEAM_USER_EMAIL%'
git config user.email %TEAM_USER_EMAIL%

# Здесь получаем версию из файла pom.xml
echo "Get version package from pom.xml"
version=`python -c "import xml.etree.ElementTree as ET; print(ET.parse(open('pom.xml')).getroot().find('{http://maven.apache.org/POM/4.0.0}version').text)"`
echo $version

# Почему-то без fetch выдавало ошибку.
git fetch

if [ `git branch -a | egrep "${version}$"` ]
then
    echo "Branch exists"
    exit 1
fi

# Создаем бранч той версии, который был в файле pom.xml
echo "Create branch"
git checkout -b $version

# Чистый git всегда предлагает настроить политику отправки.
git config --global push.default simple

# Пушим в ветку совпадающую с версией в pom.xml
echo "Push release branch"
git push --set-upstream origin $version

Aŭtomatigo de HotFix en Maven-projektoj uzante TeamCity

Riparo de eraro de Maven-incremento

La tasko konsistas el 6 partoj. Ĝi povus esti refaktorita, sed ĝi ankoraŭ funkcias.

La unua paŝo estas kontroli, ke la brunĉo ne estas majstro. Se brunĉo majstro la tasko falas.

BRANCH=$(git branch | grep * | cut -d ' ' -f2)
echo "$BRANCH"
if [[ "$BRANCH" == "master" ]]; then
  echo 'Branch is master';
  echo 'Aborting';
  exit 1;
fi

# Здесь получаем версию из файла pom.xml
echo "Get version package from pom.xml"
BRANCH=`python -c "import xml.etree.ElementTree as ET; print(ET.parse(open('pom.xml')).getroot().find('{http://maven.apache.org/POM/4.0.0}version').text)"`
# Приходится делать checkout на нужный бранч.
# Иначе git status показывает detached к нужному бранчу.
# Нужно чтобы git status показывал просто бранч
git checkout $BRANCH
# Экспортируем переменную bash в переменную Teamcity для дальнейшего использования.
echo "##teamcity[setParameter name='BRANCH_FOR_INCREMENT' value='$BRANCH']"

Aŭtomatigo de HotFix en Maven-projektoj uzante TeamCity

La dua paŝo de Maven ŝanĝas la version de bugfix en la dosiero pom.xml.

Celoj: Maven havas ĉion en unu linio

build-helper:parse-version versions:set -DnewVersion=${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.nextIncrementalVersion} versions:commit

Aŭtomatigo de HotFix en Maven-projektoj uzante TeamCity

La tria paŝo estas montri informojn pri Git-statuso kaj aliajn:

echo 'cat pom.xml'
cat pom.xml
echo 'git status'
git status
echo 'git remote -v'
git remote -v
echo 'git branch'
git branch

Aŭtomatigo de HotFix en Maven-projektoj uzante TeamCity

La kvara paŝo ŝanĝas la konektoskemon en developerConnection de HTTPS al GIT.

Kaj puŝas ŝanĝojn al la branĉo specifita en Teamcity per la variablo %BRANCH_FOR_INCREMENT%.

# Здесь получаем developerConnection из файла pom.xml
developerConnection=$(xmllint -xpath "/*[local-name() = 'project' ]//*[local-name() = 'developerConnection']/text()" pom.xml | sed  's|scm:git:ssh://||')
echo developerConnection
# Здесь меняем / на : в URL для git_remote_url
git_remote_url=$(echo $developerConnection| sed 's/gitlab.com//gitlab.com:/g')
echo git_remote_url
echo $git_remote_url

git remote set-url origin $git_remote_url

# Если вы не используете ввстроенную возможность Teamcity получения user и email из ~/.gitconfig, то можно указать их здесь
echo 'git config user.name %TEAM_USER%'
git config user.name %TEAM_USER%
echo 'git config user.email %TEAM_USER_EMAIL%'
git config user.email %TEAM_USER_EMAIL%
echo 'git add .'
git add .
echo 'git commit -m "Increment bugfix"'
git commit -m "Increment bugfix"

git push --set-upstream origin %BRANCH_FOR_INCREMENT%

Aŭtomatigo de HotFix en Maven-projektoj uzante TeamCity

La kvina paŝo estas ricevi de la dosiero pom.xml versio kaj instalas ĝin en Teamcity variablo TAG_FROM_VERSION. Notu ke la versio de la dosiero pom.xml sen la litero v antaŭe. Kaj la etikedo, bazita sur ĉi tiu versio, jam havas la literon v komence.

echo "Get version package from pom.xml"
VERSION_AFTER_CHANGE=`python -c "import xml.etree.ElementTree as ET; print(ET.parse(open('pom.xml')).getroot().find('{http://maven.apache.org/POM/4.0.0}version').text)"`
echo $VERSION_AFTER_CHANGE
echo "##teamcity[setParameter name='TAG_FROM_VERSION' value='v$VERSION_AFTER_CHANGE']"

Aŭtomatigo de HotFix en Maven-projektoj uzante TeamCity

Sesa paŝo - etikedado cimo de eraroj versioj. Ĉi tio estas farita uzante Maven kun la postulata opcio en celon.

Opcio celoj:

-Dtag=%TAG_FROM_VERSION% scm:tag

Aŭtomatigo de HotFix en Maven-projektoj uzante TeamCity

fonto: www.habr.com

Aĉetu fidindan gastigadon por retejoj kun DDoS-protekto, VPS-VDS-serviloj 🔥 Aĉetu fidindan retejan gastigadon kun DDoS-protekto, VPS VDS-servilojn | ProHoster