Travis – Continuous Integration сервис от разработчиков Github. Является hosted-решением, т.е. располагается на серверах самого Travis.
На данный момент – умеет работать только с гит-репоизториями Github, поддержка других сервисов на 2016 год не планируется.
Содержание
Начало работы
Для начала работы – переходим на страницу Travis и логинимся с данными доступа Github:
Переходим в профиль, и активируем репозитории, за которыми будет “наблюдать” Travis.
В этом примере – это репозиторий gh_java_hellow:
Сам репозиторий:
Сборка Java проекта в Travis
Для того, что бы Travis начал сборку проекта – в корень репозитория необходимо доабвить файл .travis.yml
.
Клонируем репозиторий:
$ git clone https://github.com/setevoy2/gh_java_hellow.git
Добавляем файл:
$ touch gh_java_hellow/.travis.yml
Для того, что бы собрать простой Java “Hellow, World” – в .travis.yml
достаточно указать:
language: java
Выполняем:
$ echo "language: java" > gh_java_hellow/.travis.yml
И пушим изменения в репозиторий:
$ cd gh_java_hellow/ && git add .travis.yml && git commit -m "Travis init" && git push origin [master 8059eab] Travis init ... To https://github.com/setevoy2/gh_java_hellow.git 5a7a002..8059eab master -> master
После первого пуша- Travis автоматически запустит билд проекта:
Так как никаких` других опций в файле .travis.yml
указано не было – то Travis вызвал Maven 3 только с одной поцией – mvn test -B
.
Цикл сборки Travis
Любой билд в Travis включает в себя два шага:
install
: установка зависимостей;script
: запуск скрипта для билда.
Можно вызывать любые другие команды перед шагом install
(с помощью опции before_install
), перед (before_script
) или после (after_script
) сборки.
Например, с помощью before_install
– можно выполнить установку дополнительных зависимостей до начала сборки проекта. А с помощью опции after_success
– выполнить действия после сборки (например – деплой или генерация документации). Опцию after_failure
можно использовать для, напрмиер, отправки логов или уведомления в Slack в случае неудачного билда (хотя для уведомлений имеется notifications
).
Полный цикл Travis, включая опциональные шаги, выглядит так:
- Install apt addons
before_install
- install
before_script
- script
after_success
илиafter_failure
- (опционально)
before_deploy
- (опционально)
deploy
- (опционально)
after_deploy
after_script
Возвращаясь к билду gh_java_hellow
.
Для того, что бы получить результат сборки – добавим шаг mvn clean package.
Редактируем .travis.yml
:
language: java script: - mvn clean package
Пушим в репозиторий:
$ git add .travis.yml && git commit -m "mvn clean package" && git push origin
Проверяем билд:
[INFO] Building war: /home/travis/build/setevoy2/gh_java_hellow/target/javahw.war
И добавим вызов с опциями before_script
и т.п.:
language: java before_script: - echo "Starting build" script: - mvn clean package after_script: - echo "Script finished" after_success: - echo "Build was successful. $TRAVIS_TEST_RESULT" after_failure: - echo "Build was failed"
Результат:
Список переменных можно найти тут>>>.
Через script
можно вызывать и любые другие команды, например – ls -l
:
... after_success: - echo "Build was successful. $TRAVIS_TEST_RESULT" - ls -l $TRAVIS_BUILD_DIR/target ...
Результат:
Деплой проекта из Travis
Travis использует dpl
для управления деплоями. К сожалению – dpl
для Azure весьма ограничен, тем не менее – пример деплоя с его помощью.
В каталоге target
имеется артефакт – javahw.war
, который необходимо задеплоить в Azure WebApp.
Пример WepApp:
И подключенный Local Git в роли Deployments source:
Содержимое:
> dir D:\home\site\wwwroot Volume in drive D is Windows Volume Serial Number is 92C5-0843 Directory of D:\home\site\wwwroot 05/30/2016 11:32 AM <DIR> . 05/30/2016 11:32 AM <DIR> .. 05/30/2016 11:32 AM 202,392 hostingstart.html
Редактируем .tarvis.ym
l и добавляем блок:
language: java before_script: - echo "Starting build" script: - mvn clean package after_script: - echo "Script finished" after_success: - echo "Build was successful. $TRAVIS_TEST_RESULT" - ls -l $TRAVIS_BUILD_DIR/target after_failure: - echo "Build was failed" deploy: provider: azure_web_apps username: javahw password: p@ssw0rd site: javahw skip_cleanup: true verbose: true
Пушим:
$ git add .travis.yml && git commit -m "Azure site deploy" && git push origin [master 83d5ef2] Azure site deploy 1 file changed, 5 insertions(+) ...
Запускаем билд:
Содержимое WebApp:
> dir D:\home\site\wwwroot Volume in drive D is Windows Volume Serial Number is 92C5-0843 Directory of D:\home\site\wwwroot 05/30/2016 12:41 PM <DIR> . 05/30/2016 12:41 PM <DIR> .. 05/30/2016 12:41 PM <DIR> .ssh 05/30/2016 12:46 PM 468 .travis.yml 05/30/2016 12:41 PM <DIR> ci 05/30/2016 12:41 PM 732 pom.xml 05/30/2016 12:41 PM <DIR> src 05/30/2016 12:41 PM <DIR> target 2 File(s) 1,200 bytes 6 Dir(s) 53,686,603,776 bytes free
Примечание: во время первого запуска с деплоем в свежесозданный WebApp – Travis может сообщить что-то вроде “unable to push to unqualified destination: master”. Причина – в пустом репозитории, который выгружается из Azure. Пришлось выгружать его руками, добавлять пустой файл, пушить обратно – после этого деплой через Travis заработал.
Другой вариант – использовать скрипт. Кроме скрипта – вынесем логин и пароль в скрытые переменные Travis.
Для этого – переходим в Travis > репозиторий > Settings:
Добавляем две переменных. Для Password – установим No display:
Редактирууем файл .travis.yml
и доабвляем вызшов скрипта deploy.sh
после успешного билда:
language: java before_script: - echo "Starting build" script: - mvn clean package after_script: - echo "Script finished" after_success: - echo "Build was successful. $TRAVIS_TEST_RESULT" - ls -l $TRAVIS_BUILD_DIR/target - ./ci/deploy.sh javahw after_failure: - echo "Build was failed"
Тут в after_success
добавлен вызов скрипта deploy.sh
из каталога ci
, которому первым аргументом передаётся имя WebApp в Azure.
Сам скрипт – версия аналогичного скрипта из поста Ruby: скрипт git-деплоя в Azure, только на bash
:
#!/usr/bin/env bash me="$(basename "$(test -L "$0" && readlink "$0" || echo "$0")")" if [ -z $AZURE_WA_USERNAME -o -z $AZURE_WA_PASSWORD ]; then echo -e "ERROR: AZURE_WA_USERNAME or AZURE_WA_PASSWORD varaibles can not be found. Exit." exit 1 fi AZURE_ENV="$1" if [ -z "$AZURE_ENV" ]; then echo -e "\n[$me] You must specify environment you want to deploy\n" exit 1 fi AZURE_REPO="$2" if [ -z "$AZURE_REPO" ]; then AZURE_REPO=$AZURE_ENV fi if [ -d "$AZURE_ENV" ]; then echo -e "\n[$me] Directory $AZURE_ENV exists. Removing it now\n" rm -rf $AZURE_ENV fi echo -e "\n[$me] Going to clone $AZURE_ENV repository using https://${AZURE_WA_USERNAME}:${AZURE_WA_PASSWORD}@"$AZURE_ENV".scm.azurewebsites.net:443/"$AZURE_REPO".git\n" if ! git clone https://${AZURE_WA_USERNAME}:${AZURE_WA_PASSWORD}@"$AZURE_ENV".scm.azurewebsites.net:443/"$AZURE_REPO".git; then echo -e "\nERROR: can not clone source. Exit.\n" exit 1 fi echo -e "\n[$me] Executing Rsync\n" # exclude your AZURE_REPO here! rsync -av --delete --exclude '.git' --exclude 'ci' --exclude "$AZURE_REPO" . "$AZURE_REPO"/ cd "$AZURE_REPO"/ echo -e "\n[$me] Deploying to $AZURE_REPO:\n" echo -e "[$me] Working in: $(pwd)\n" echo -e "\n[$me] AZURE_REPO $AZURE_REPO content to be deployed:\n" ls -l echo git add . git status git commit -m "Release build $TRAVIS_BUILD_NUMBER" || echo "[$me] Nothing to commit!" git push origin master echo -e "[$me] Done.\n"
Перменные AZURE_WA_USERNAME
и AZURE_WA_PASSWORD
так же могут исопльзоваться dpl
для деплоев.
Добавим файл для проверки:
$ echo "Hello, Azure" > index.html $ git add index.html && git commit -m "index add"
Сохраняем, пушим:
$ git add deploy.sh .travis.yml && git commit -m "deploy script" && git push origin
Запускаем:
Проверяем:
> dir D:\home\site\wwwroot Volume in drive D is Windows Volume Serial Number is 92C5-0843 Directory of D:\home\site\wwwroot 05/30/2016 02:00 PM <DIR> . 05/30/2016 02:00 PM <DIR> .. 05/30/2016 12:41 PM <DIR> .ssh 05/30/2016 01:32 PM 312 .travis.yml 05/30/2016 12:41 PM <DIR> ci 05/30/2016 01:32 PM 1,504 deploy.sh 05/30/2016 02:00 PM 14 index.html 05/30/2016 12:41 PM 732 pom.xml 05/30/2016 12:41 PM <DIR> src 05/30/2016 12:41 PM <DIR> target 4 File(s) 2,562 bytes 6 Dir(s) 53,686,226,944 bytes free
$ curl http://javahw.azurewebsites.net/index.html Hello, Azure
У Travis есть ещё одна интересная возможность – деплой из разных бранчей и/или тегов, но об этом – уже в следующий раз.
Ссылки по теме
Build Java Maven github project on travis-ci
Exploring The Travis-CI Configuration File
Using Travis CI to Deploy to Azure
Using Travis to Deploy Apps to Azure