Teamcity sèvè ak ajan. Ou ka ogmante sèvè lokal Teamcity ou ak ajan lè l sèvi avèk docker-konpoze
Kote ou genyen Teamcity ajan, java, maven, git dwe enstale
Ann kreye pwojè "Automation Maven Hotfix" nan Teamcity epi kreye 4 travay la.
CI Bati
Kreye branch pou lage
Maven ogmante bugfix (Chanje vèsyon bugfix))
Lage Maven (Kreye yon nouvo lage)
Ekran pwojè:
Anviwònman jeneral yo
Nan tout travay ou dwe tcheke ti bwat la "Netwaye bati: Efase tout fichye ki nan anyè kesye a anvan bati a", paske san kaz sa a mwen te resevwa erè.
Nou kreye yon sèl VCS. Karakteristik VCS yo makonnen an wouj.
Tipikman, VCS yo itilize konplo HTTPS la. NAN Espesifikasyon branch: endike pou gade tout kolasyon ak tout tags:
+:refs/heads/*
+:refs/tags/*
Li nesesè yo kreye 4 Paramèt Konfigirasyon.
BRANCH_FOR_INCREMENT
TAG_FROM_VERSION
TEAM_USER
TEAM_USER_EMAIL
Chan valè nan BRANCH_FOR_INCREMENT ak TAG_FROM_VERSION dwe rete vid.
Ou bezwen telechaje / ajoute yon kle prive. Tout travay eksepte CI Build mande pou yon kle prive.
Nan chak travay, eksepte CI Build, nan seksyon Build Features ou bezwen konekte yon kle prive.
Egzanp pou Maven lage
CI Bati**.
Nan yon travay CI Bati jis yon etap mvn pwòp tès
Maven lage
Nan yon travay Maven lage 2 etap. Premye etap la se tcheke ke kolasyon se mèt. Si kolasyon pa mèt, Lè sa a, travay la tonbe.
BRANCH=$(git branch | grep * | cut -d ' ' -f2)
echo "$BRANCH"
if [[ "$BRANCH" != "master" ]]; then
echo 'Branch is not master';
echo 'Aborting';
exit 1;
fi
Dezyèm etap la se estanda mvn release:prepare ak opsyon --pakèt-mòd
Kreye branch pou lage
Pou kreye yon korektif pou yon lage ou bezwen kreye yon branch. Sa a se sa taska a fè Kreye branch pou lage. Li gen 2 etap.
Premye etap la tcheke ke kolasyon se pa mèt, ak dezyèm lan tcheke ke vèsyon an nan dosye a pom.xml pa t genyen mo a ENSTANTAN
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
Dezyèm etap la chanje konplo koneksyon an nan developerConnection soti nan HTTPS a 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
Maven ogmante bugfix
Travay la konsiste de 6 pati. Li te kapab refactorize, men li toujou ap travay.
Premye etap la se tcheke ke kolasyon an pa mèt. Si kolasyon mèt travay la tonbe.
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']"
Dezyèm etap Maven a ap chanje vèsyon bugfix nan fichye pom.xml la.
Katriyèm etap la chanje konplo koneksyon an nan developerConnection soti nan HTTPS a GIT.
Epi pouse chanjman nan branch ki espesifye nan Teamcity pa %BRANCH_FOR_INCREMENT% varyab la
# Здесь получаем 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%
Senkyèm etap la ap resevwa nan dosye a pom.xml vèsyon epi enstale li nan Teamcity varyab TAG_FROM_VERSION. Remake byen ke vèsyon an soti nan dosye a pom.xml san lèt v devan. Ak tag la, ki baze sou vèsyon sa a, deja gen lèt la v nan kòmansman an.
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']"
Sizyèm etap - tagging bugfix vèsyon. Sa a se fè lè l sèvi avèk Maven ak opsyon ki nesesè nan Objektif.