Tämä viesti kuvaa HotFix-automaation määrittämistä Maven-projekteissa Teamcityn avulla.
HotFixin tekemiseen tehdään yleensä monia manuaalisia vaiheita:
Luo brunssi julkaisulle, johon haluat ottaa HotFixin käyttöön
Korjaa julkaisussa oleva bugi
Vaihda virheenkorjausversio julkaisuhaarassa
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.
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:
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.
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.
Sinun on ladattava/lisättävä yksityinen avain. Kaikki tehtävät paitsi CI Build vaativat yksityisen avaimen.
Jokaisessa tehtävässä, paitsi CI Buildissa, Build Features -osiossa sinun on yhdistettävä yksityinen avain.
Esimerkki varten Mavenin julkaisu
CI Build**.
Tehtävässä CI Build vain yksi askel mvn puhdas testi
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
Toinen vaihe on vakio mvn release:prepare vaihtoehdon kanssa -- erätila
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
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
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']"
Toinen Maven-vaihe on virheenkorjausversion muuttaminen pom.xml-tiedostossa.
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%
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']"
Kuudes vaihe - merkintä bugfix versiot. Tämä tehdään käyttämällä Maven jossa vaadittu vaihtoehto Tavoite.