HotFixin automatisointi Maven-projekteissa TeamCityllä

Tämä viesti kuvaa HotFix-automaation määrittämistä Maven-projekteissa Teamcityn avulla.

HotFixin tekemiseen tehdään yleensä monia manuaalisia vaiheita:

  1. Luo brunssi julkaisulle, johon haluat ottaa HotFixin käyttöön
  2. Korjaa julkaisussa oleva bugi
  3. Vaihda virheenkorjausversio julkaisuhaarassa
  4. Ota bugikorjausversiotagi käyttöön

Pisteet 1,3,4 voidaan automatisoida.

Ennen kuin siirrymme aiheeseen, haluaisin käsitellä tärkeää ja monimutkaista aihetta - versiointi ohjelmisto. Voit ymmärtää Semveriä lyhyesti tässä kuvakaappauksessa. HotFixin automatisointi Maven-projekteissa TeamCityllä

Voit lukea lisää linkistä: 1.

Kaikki tässä viestissä kuvatut asetukset perustuvat Semver и Runkopohjainen kehitys.

Runkopohjaisessa kehityksessä sinun on luotava oma haara jokaiselle julkaisulle. Kaikki tämän julkaisun muutokset (hotfix-korjaukset) on sitoutunut tähän haaraan.

Osana tätä viestiä automatisoimme seuraavat asiat:

  • CI-rakenne

  • Uuden julkaisun luominen

  • Luodaan julkaisuhaara

  • Bugikorjausversion vaihtaminen

HotFixin automatisointi Maven-projekteissa TeamCityllä

vaatimukset:

Luodaan "Automation Maven Hotfix" -projekti Teamcityyn ja luodaan sinne 4 tehtävää.

  • CI Build

  • Luo haara julkaisua varten

  • Maven increment bugikorjaus (Vaihda bugikorjausversio)

  • Maven-julkaisu (uuden julkaisun luominen)

Projektin kuvakaappaus:

HotFixin automatisointi Maven-projekteissa TeamCityllä

Yleiset asetukset

Kaikissa tehtävissä sinun on valittava ruutu "Clean build: Poista kaikki tiedostot kassahakemistosta ennen koontiversiota", koska ilman tätä valintaruutua sain virheitä.

Luomme yhden VCS:n. VCS-ominaisuudet on ympyröity punaisella.

HotFixin automatisointi Maven-projekteissa TeamCityllä

Tyypillisesti VCS:t käyttävät HTTPS-mallia. SISÄÄN Toimialan erittely: tarkoitettu katsomaan kaikki brunssit ja kaikki tagit:

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

On tarpeen luoda 4 konfigurointiparametria.

  • BRANCH_FOR_INCREMENT
  • TAG_FROM_VERSION
  • TEAM_USER
  • TEAM_USER_EMAIL

Arvokentän BRANCH_FOR_INCREMENT ja TAG_FROM_VERSION on jätettävä tyhjäksi.

HotFixin automatisointi Maven-projekteissa TeamCityllä

Sinun on ladattava/lisättävä yksityinen avain. Kaikki tehtävät paitsi CI Build vaativat yksityisen avaimen.

HotFixin automatisointi Maven-projekteissa TeamCityllä

Jokaisessa tehtävässä, paitsi CI Buildissa, Build Features -osiossa sinun on yhdistettävä yksityinen avain.

Esimerkki varten Mavenin julkaisu

HotFixin automatisointi Maven-projekteissa TeamCityllä

CI Build**.

Tehtävässä CI Build vain yksi askel mvn puhdas testi

HotFixin automatisointi Maven-projekteissa TeamCityllä

Mavenin julkaisu

Tehtävässä Mavenin julkaisu 2 askelta. Ensimmäinen askel on tarkistaa, että brunssi on mestari. Jos brunssi ei ole mestari, niin tehtävä kaatuu.

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

HotFixin automatisointi Maven-projekteissa TeamCityllä

Toinen vaihe on vakio mvn release:prepare vaihtoehdon kanssa -- erätila

HotFixin automatisointi Maven-projekteissa TeamCityllä

Luo haara julkaisua varten

Jos haluat luoda hotfix-korjauksen julkaisulle, sinun on luotava haara. Tätä tehtävä tekee Luo haara julkaisua varten. Hänellä on 2 askelmaa.

Ensimmäinen askel tarkistaa, että brunssi ei ole mestari, ja toinen tarkistaa, että versio on tiedostossa pom.xml ei sisältänyt sanaa PIKAKUVA

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

HotFixin automatisointi Maven-projekteissa TeamCityllä

Toinen vaihe muuttaa yhteysmallin developerConnectionissa HTTPS:stä GIT:ksi.

# Здесь получаем 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

HotFixin automatisointi Maven-projekteissa TeamCityllä

Maven increment bugikorjaus

Tehtävä koostuu 6 osasta. Se olisi voitu tehdä uudelleen, mutta se toimii edelleen.

Ensimmäinen askel on tarkistaa, ettei brunssi ole mestari. Jos brunssi mestari tehtävä kaatuu.

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']"

HotFixin automatisointi Maven-projekteissa TeamCityllä

Toinen Maven-vaihe on virheenkorjausversion muuttaminen pom.xml-tiedostossa.

Maalit: Mavenilla on kaikki yhdellä rivillä

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

HotFixin automatisointi Maven-projekteissa TeamCityllä

Kolmas vaihe on näyttää Git-tilatiedot ja muut:

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

HotFixin automatisointi Maven-projekteissa TeamCityllä

Neljäs vaihe muuttaa yhteysmallin developerConnectionissa HTTPS:stä GIT:ksi.

Ja työntää muutokset Teamcityssä määritettyyn haaraan %BRANCH_FOR_INCREMENT% muuttujalla

# Здесь получаем 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%

HotFixin automatisointi Maven-projekteissa TeamCityllä

Viides vaihe on hakeminen tiedostosta pom.xml versio ja asentaa sen sisään Teamcity muuttuja TAG_FROM_VERSION. Huomaa, että versio tiedostosta pom.xml ilman v-kirjainta edessä. Ja tähän versioon perustuvassa tagissa on jo v-kirjain alussa.

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']"

HotFixin automatisointi Maven-projekteissa TeamCityllä

Kuudes vaihe - merkintä bugfix versiot. Tämä tehdään käyttämällä Maven jossa vaadittu vaihtoehto Tavoite.

Vaihtoehto Tavoitteet:

-Dtag=%TAG_FROM_VERSION% scm:tag

HotFixin automatisointi Maven-projekteissa TeamCityllä

Lähde: will.com

Lisää kommentti