Teamcity 서버 및 에이전트. 다음을 사용하여 로컬 Teamcity 서버와 에이전트를 키울 수 있습니다. 도커 작성
Teamcity 에이전트가 있는 곳에 java, maven, git이 설치되어 있어야 합니다.
Teamcity에서 "Automation Maven Hotfix" 프로젝트를 생성하고 거기에 4개의 작업을 생성해 보겠습니다.
CI 빌드
릴리스용 브랜치 생성
Maven 증분 버그 수정(버그 수정 버전 변경))
Maven 릴리스(새 릴리스 생성)
프로젝트 스크린샷:
일반 설정
모든 작업에서 " 확인란을 선택해야 합니다.클린 빌드: 빌드 전 체크아웃 디렉터리의 모든 파일을 삭제합니다.“, 이 확인란이 없으면 오류가 발생하기 때문입니다.
단일 VCS를 생성합니다. VCS 기능은 빨간색 원으로 표시됩니다.
일반적으로 VCS는 HTTPS 체계를 사용합니다. 안에 지점 사양: 모든 브런치와 모든 태그를 시청하도록 표시되었습니다.
+:refs/heads/*
+:refs/tags/*
4개의 구성 매개변수를 생성해야 합니다.
BRANCH_FOR_INCREMENT
TAG_FROM_VERSION
TEAM_USER
TEAM_USER_EMAIL
BRANCH_FOR_INCREMENT 및 TAG_FROM_VERSION의 값 필드는 비워 두어야 합니다.
개인 키를 업로드/추가해야 합니다. CI 빌드를 제외한 모든 작업에는 개인 키가 필요합니다.
CI 빌드를 제외한 각 작업의 빌드 기능 섹션에서 개인 키를 연결해야 합니다.
예 메이븐 릴리스
CI 빌드**.
작업에서 CI 빌드 한 걸음만 mvn 클린 테스트
메이븐 릴리스
작업에서 메이븐 릴리스 2단계. 첫 번째 단계는 브런치가 다음과 같은지 확인하는 것입니다. 석사. 브런치가 아니라면 석사, 그러면 작업이 중단됩니다.
BRANCH=$(git branch | grep * | cut -d ' ' -f2)
echo "$BRANCH"
if [[ "$BRANCH" != "master" ]]; then
echo 'Branch is not master';
echo 'Aborting';
exit 1;
fi
두 번째 단계는 표준입니다. mvn 릴리스:준비 옵션 포함 --배치 모드
릴리스용 브랜치 생성
릴리스에 대한 핫픽스를 생성하려면 분기를 생성해야 합니다. 이것이 taska가 하는 일입니다. 릴리스용 브랜치 생성. 그녀에게는 2단계가 있습니다.
첫 번째 단계에서는 브런치가 아닌지 확인합니다. 석사, 두 번째는 버전이 파일에 있는지 확인합니다. pom.xml 라는 단어가 포함되지 않았습니다 스냅 사진
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
두 번째 단계에서는 개발자 연결의 연결 체계를 HTTPS에서 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 증분 버그 수정
작업은 6개 부분으로 구성됩니다. 리팩터링되었을 수도 있지만 여전히 작동합니다.
첫 번째 단계는 브런치가 아닌지 확인하는 것입니다. 석사. 브런치라면 석사 임무가 떨어집니다.
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']"
그리고 %BRANCH_FOR_INCREMENT% 변수로 Teamcity에 지정된 분기에 변경 사항을 푸시합니다.
# Здесь получаем 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%
다섯 번째 단계는 파일에서 가져오는 것입니다. pom.xml 버전을 선택하고 설치합니다. 팀 시티 변하기 쉬운 TAG_FROM_VERSION. 파일의 버전에 유의하세요. pom.xml 앞에 문자 v가 없습니다. 그리고 이 버전을 기반으로 한 태그에는 이미 시작 부분에 문자 v가 있습니다.
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']"
여섯 번째 단계 - 태그 지정 버그 수정 버전. 이는 다음을 사용하여 수행됩니다. 메이븐 필수 옵션이 포함된 목표.