Универсальное решение, где число может быть где угодно в имени файла, с помощью первой из таких последовательностей:
number=$(echo $filename | egrep -o '[[:digit:]]{5}' | head -n1)
Другое решение извлечь точно часть переменной:
number=${filename:offset:length}
, Если Ваше имя файла всегда имеет формат stuff_digits_...
, можно использовать awk:
number=$(echo $filename | awk -F _ '{ print $2 }')
еще одно решение удалить все кроме цифр, используйте
number=$(echo $filename | tr -cd '[[:digit:]]')
У нас был похожий разговор на последней CITCON Северной Америке (конференции по непрерывной интеграции и тестированию), где мы все поделились своим опытом и попытались составить дорожную карту из от простого CI до очень встроенных систем CI и релизов.
Исходные заметки конференции здесь . Вместе с фотопотоком Flickr . Очищенная версия также доступна в блоге urbancode.
Австралийцы вновь обратились к этой теме на CITCON в Брисбене, и доступна версия этой темы.
Надеюсь, что некоторые из этих ресурсов будут полезны.
У нас есть конфигурации сборки для
Конфигурация развертывания позволяет нетехническим ресурсам QA развертывать в тестовой среде всякий раз, когда они готовы что-то протестировать, и позволяет избежать путаницы с появилось ли исправление ошибки в тестовой среде.
То, что мы запускали в предыдущем проекте при каждом запуске CI, где записи покрытия кода, публиковать автоматически созданную документацию и отчеты Checkstyle.
Это дало нам некоторую статистику о статистическом качестве каждой проверки для планирования и улучшения наших рабочих привычек.
Я работаю над этим в данный момент. Наша конфигурация сборки выполняет следующие функции:
Сборка:
Теперь у нас есть приложение, которое можно опубликовать на любом сервере, просто скопировав его в каталог развертывания и переименовав соответствующий файл конфигурации в web.config
. затем подготовьте еще 3 конфигурации для развертывания. Первый развертывается в среде разработки после каждой успешной сборки. Это всегда дает нам рабочую версию последней кодовой базы. Второй запускается на постановку вручную. Он настроен на развертывание из последней закрепленной сборки разработки. Наконец, существует конфигурация динамического развертывания, которая затем развертывается из последней развернутой промежуточной сборки. Это делает ряд дополнительных вещей:
Самая полная сборка, которую я когда-либо видел, выполняла следующие действия в указанном порядке. Есть две группы, все цели в каждой группе выполняются независимо от сбоя, но группа терпит неудачу, если выходит из строя член группы. Итак, мы видим ВСЕ проблемы.
Первая группа, работающая над источниками:
Вторая группа работает над созданным кодом, только если первый шаг был успешным:
Это основная сборка, которая запускается время от времени для коммитов. Это было сделано очень много, но с некоторыми мощными машинами, использующими несколько ядер, это было около 4 минут для 500k LOC. Тестировщики могут получить новейшие сборки моментальных снимков, если захотят.
Длительные интеграционные тесты (по 2 часа каждый) запускались один раз за ночь и выполняли только
Другая сборка была чисто документальной сборкой, запускалась один раз за ночь. Это никогда не подведет.