Особенности и порядок открытия филиала
Разбираемся как открыть филиал и когда это потребуется.
Услуга по открытию филиалов в настоящее время всё чаще становится актуальной и востребованной, так как не оценить преимущества, связанные с открытием филиалов просто невозможно.
Не редки случаи, когда открытие филиала путают с открытием компании, объясняя это тем, что разница между филиалом и, например, обществом с ограниченной ответственностью не существенна.
Всё же, давайте попробуем разобраться с таким вопросом как открытие филиала и определить связанные с этим плюсы и минусы.
Важно при открытии филиала обратиться к специалисту, которые поможет и возьмет решение всех вопросов на себя.
Чем отличается филиал от представительства
Часто филиал сравнивают с представительством, объясняя тем, что они являются обособленными подразделениями, а значит, разделения между ними быть не должно.
Наш «старый добрый друг» Гражданский кодекс РФ дает следующую формулировку филиала и представительства:
Представительством является обособленное подразделение юридического лица, расположенное вне места его нахождения, которое представляет интересы юридического лица и осуществляет их защиту.
Филиалом является обособленное подразделение юридического лица, расположенное вне места его нахождения и осуществляющее все его функции или их часть, в том числе функции представительства.
Действительно, на первый взгляд, практически идентичные фразы, но почувствовать разницу между ними можно будет лишь в том случае, когда юридическое лицо начнет работу непосредственно с филиалом и представительством.
Как говорится : «Всё познается в сравнении», поэтому каждое из этих двух обособленных подразделений обладает теми характеристиками, которые способны отвечать требованиям определенного юридического лица.
Представительства и филиалы не являются юридическими лицами, но их объединят одно общее понятие, как филиал так и представительство являются обособленными подразделениями.
Они наделяются имуществом создавшим их юридическим лицом и действуют на основании утвержденных им положений.
Исходя из определений, следует, что филиал является наиболее расширенным понятием чем представительство и может заниматься предпринимательской (коммерческой) деятельностью.
Функции представительства ограничены в большей степени, поэтому оно создается, в первую очередь, для представительства и защиты интересов создавшего его юридического лица.
Давайте разберем эти моменты подробнее, а также определим общие черты, объединяющие филиал и представительство
- филиал и представительство ведут деятельность исключительно от имени создавшей ее организации, так как не являются юридическими лицами;
- филиал и представительство не несут ответственность по обязательствам учредивших их организаций;
- филиал и представительство имеют право отстаивать свои интересы во всех инстанциях, включая возможность подачи исковых заявлений с суд, но только от имени головной организации;
- филиал и представительство не могут быть зарегистрированы в государственных органах, в связи с тем что этой обязанностью наделена организация, учредившая филиал или представительство;
- филиал и представительство наделены имуществом создавших их обществ, но собственниками этого имущества они быть не могут;
- в филиалах и представительствах должны быть руководители, назначаемые головной организацией и действующие на основании Положения;
- филиал и представительство действуют на основании утвержденных Положений.
Это всего лишь минимальный перечень, который можно поверхностно обозначить.
Как и любая юридическая процедура, создание филиала или представительства не может обойтись без решения общего собрания учредителей общества.
Данную обязанность закрепляет Гражданский кодекс РФ, указывающий также на то, что в устав организации в обязательном порядке должны быть внесены изменения, касающиеся как создания филиала/представительства, так и их прекращения деятельности в дальнейшем.
Так как филиал и представительства являются обособленными подразделениями, их часто путают со структурными подразделениями, информацию о которых вносить в учредительные документы не обязательно.
Поэтому в данном случае следует внести ясность относительно того, какое подразделение всё же необходимо указать в уставе общества.
В статье 55 Гражданского кодекса РФ дается четкое указание, что представительства и филиалы должны быть указаны в учредительных документах создавшего их юридического лица.
Следует обратиться и к Налоговому кодексу РФ, в котором формулировка обособленного подразделения трактуется следующим образом: «…любое территориально обособленное от нее (организации) подразделение, по месту нахождения которого оборудованы стационарные рабочие места.
Признание обособленного подразделения организации таковым производится независимо от того, отражено или не отражено его создание в учредительных или иных организационно-распорядительных документах организации, и от полномочий, которыми наделяется указанное подразделение.
При этом рабочее место считается стационарным, если оно создается на срок более одного месяца…».
Конечно, из положений законодательства РФ можно сделать вывод о том, что создавая, например, структурное подразделение в обществе, в дальнейшем, его можно будет признать обособленным и легко спутать с филиалом/представительством, достаточно всего лишь оборудовать рабочие места, но, учитывая размытость данной информации, всё же необходимо учесть один важный фактор, влияющий на его полноценную работу, соответствовать целям создания и выполнять определенные функции обособленное подразделение сможет тогда, когда информация о нем будет содержаться в уставе юридического лица.
Основываясь практическим опытом, не зависимо от названия и общей формулировки обособленного подразделения, указанной Налоговым законодательством РФ, филиалы и представительства должны иметь документальное основание своего создания, только тогда деятельность филиала или представительства можно считать законной.
Под документальным основанием понимается, как раз, формулировка в Уставе головной организации о создании либо филиала либо представительства, а также наличие Положения о деятельности обособленного подразделения.
Учредительные документы должны дополнительно содержать информацию об адресе (место нахождение) филиалов или представительств и, если это необходимо, контактные телефоны.
Ни одно обособленное подразделение не может полноценно функционировать без руководителя и Положения, регламентирующего его деятельность.
Руководитель обособленного подразделения назначается юридическим лицом, создавшим филиал или представительство и осуществляет свои функции на основании доверенности, выданной исключительно руководителю обособленного подразделения.
Положения о филиале или представительстве определяются юридическим лицом – головной организацией.
Как правило, в Положении указываются основные цели и задачи создания обособленного подразделения, виды деятельности, органы управления, информация по имуществе филиала/представительства, способы и порядок взаимодействия обособленного подразделения и общества, а также компетенция органов управления.
Когда стоит открывать филиал?
Тема открытия филиальной сети по определенным регионам является распространенной и заманчивой, но для того, чтобы открыть для начала хотя бы один филиал, необходимо всё-таки ответить на единственный вопрос: «Зачем?».
Так как при создании филиала необходимо пройти государственную регистрацию устава юридического лица, а функционировать филиал не сможет без оборудованных рабочих мест, головной организации нужно заранее просчитать затраты и провести анализ регионов и регионов с наибольшим потенциальным ростом развития производства.
Если компания ограничена в средствах, а без выхода на рынок не обойтись, неуправляемый риск – это не самое лучшее решение, которое могут принять руководители компаний на данный момент.
Единственным возможным вариантом будет являться использование дилерских услуг, которые требуют меньших вложений и приносят стабильный доход, причем дилерами могут быть как физические, так и юридические лица.
Наверное, это самая подходящая альтернатива для компаний, которые находятся на стадии развития и не имеют доходов, позволяющих расширять сети оказания своих услуг созданием филиалов.
Безусловно, у каждого варианта имеются свои достоинства и недостатки.
С филиалами легче работать, так как крупные клиенты отдают преимущество именно филиалам или представительствам, а те, в свою очередь, начинают зарабатывать репутацию – одно из главных составляющих успеха.
Среди минусов – риски, которые как «русская рулетка» в случае небольшого отступления от плана могут обернуться крахом всего бизнеса в целом.
Не секрет, что стратегия компания в рамках планирования не всегда находит своё отражение в режиме времени «Он-лайн», так как реальная ситуация при условиях экономической нестабильности по сути очень уязвима, поэтому, отвечая на вопрос: «Когда открыть филиал?» нужно понять нужен ли компании филиал именно сейчас.
Когда мы слышим из СМИ об известном бренде одежды или новом продукте Банка, многие из нас делают поспешные выводы о том, что «такой раскрутке» бренд или Банк обязаны благодаря филиальным сетям, рекламной акции и правильным подсчетам аналитиков, но на самом же деле, секрет успеха, возможно, скрыт в терпеливом ожидании и попытках найти компромисс между быстрым ростом дохода и узнаваемостью компании.
Определяя рациональные пути следует понимать, что управление рисками – это искусство, которому следует учиться годами и, даже десятилетиями, а создание филиальной сети – это всего лишь необходимость.
Итак, пришло время пройтись по документам, необходимым для открытия филиала
- принятие решения общим собранием участников об открытии филиала;
- внесение изменений в Устав юридического лица в связи с созданием филиала;
- утверждение Положения о филиале;
- подача заявления в регистрационный орган по месту нахождения юридического лица;
- изготовление печати филиала.
Срок регистрации изменений в уставе, связанных с открытием филиала составляет по закону пять дней.
По истечении этого времени регистрационный орган выдает Свидетельство, новую редакцию Устава, Положение о филиале, выписку из ЕГРЮЛ.
Далее необходимо поставить на учет обособленное подразделение в налоговом органе.
В соответствии со статьей 23 Налогового Кодекса РФ налогоплательщики, в течение одного месяца со дня создания подразделения или прекращения деятельности организации через него (закрытия), обязаны письменно сообщать в налоговый орган обо всех обособленных подразделениях, созданных на территории Российской Федерации.
Постановка на учет в налоговых органах по месту нахождения обособленного подразделения осуществляется на основании заявления.
В случае невыполнения требования о постановке на учет обособленного подразделения организация может быть оштрафована.
Что же касается постановки на учет в фондах, то необходимость регистрации организации во внебюджетных фондах по месту нахождения обособленного подразделения возникает, если филиал имеет отдельный баланс и расчетный счет.
Основными документами филиала являются
- Положение о филиале;
- Свидетельство об изменениях юридического лица – головной организации;
- Выписка из Единого государственного реестра юридических лиц;
- Уведомление о постановке на учет в налоговом органе;
- Решение о создании филиала;
- Постановка филиала во внебюджетных фондах;
- Приказ о назначении на должность руководителя филиала.
Если Вам требуется помощь юриста по регистрации — смело обращайтесь — консультация совершенно бесплатно!
Советуем почитать:
Выход компании в регионы. Инструкция к применению
Светлана Моисеева
Любая компания, успешно действующая на рынке, в конце концов, приходит к тому, что ей необходимо развиваться и выходить на новые рынки путем расширения присутствия в других регионах. Причины торговой экспансии могут быть разными: неудовлетворенность работой своей дилерской сети, следование за крупными клиентами, например, торговыми сетями, развитие розничного направления, падение продаж.
Подробнее о системе оперативно-аналитического контроля продаж, включая: содержание, рабочие формы, отчеты, процедуры – здесь>>
Экспансии в регионы — это всегда сложный и трудоемкий процесс. Как правило, основными целями в освоении новых регионов являются: увеличение доли рынка, следование или опережение своих сетевых клиентов. Присутствие компании в регионах является одним из факторов, влияющих на увеличение стоимости бизнеса при условии рентабельности формы присутствия в регионе.
Для того, чтобы с минимальными затратами выйти на региональные рынки, первым делом, эти рынки необходимо изучить. В этом должны помочь маркетинговые исследования.
Исследование рынка
Для сбора и получения маркетинговой информации, конечно, лучше всего обратиться к профессионалам. Если же нет возможности привлечь сторонних специалистов, то можно попытаться провести исследование своими силами. Для этого компании необходимо провести исследование в 3 направлениях:
Анализ рынка региона,
Анализ основных клиентов (потребителей),
Анализ конкурентов.
Как выбрать оптимальные регионы для экспансии?
Для выбора региона необходимо сформулировать критерии привлекательности данного рынка, обозначить его границы, емкость, оценить уровень конкуренции, риски.
Анализ рынка региона должен дать информацию о масштабе рынка, динамике развития, структуре рынка, об основных участниках рынка (потребители, производители, дистрибуторы).
Для компаний, которые ведут агрессивную региональную политику, особенно активно в этой области работает банковский сектор, целью является максимальный охват регионов.
Компании, планирующие спокойное региональное развитие, чаще всего ориентируются на политику охвата перспективных регионов. При этой стратегии важно выявить, какие регионы могут привести к максимальной отдаче при открытии филиалов, а в каких оставить (улучшить) продажи через дилеров (дистрибуторов).
Подробнее о создании региональной дистрибуторской сети – здесь
Как же определиться с регионом?
В первую очередь, мы выбираем города — милионники: Москва, Санкт-Петербург, Новосибирск, Екатеринбург, Нижний Новгород, Самара, Омск, Казань, Челябинск, Ростов-на-Дону, Уфа, Волгоград, Пермь.
Далее находим крупные города, максимально приближенные к выбранному городу — миллионику. Например, городами — спутниками Самары являются Новокуйбышевск, Чапаевск, Жигулёвск. Следовательно, если открыть в Самаре филиал, то в городах – спутниках целесообразно иметь торговых представителей.
Далее необходимо определить финансовую привлекательность выбранных регионов. Информацию можно получить из статистических данных Росстата (www.kgs.ru). Нас интересуют, в первую очередь, следующие параметры региона: численность населения, рейтинг инвестиционной привлекательности, оборот розничной торговли, оборот оптовой торговли, среднемесячная зарплата, среднемесячный доход семей, динамика цен, промышленная структура региона, состояние логистики в регионе.
После того как рынки определены следует создать профиль потребителей (клиентов) на этих рынках и соотнести его с профилем основных клиентов компании. Для этого необходимо провести анализ основных потребителей.
Информацию о потребителях (клиентах) можно получить следующим образом: провести анализ своей клиентской региональной базы, проанализировать региональные аналитические отчеты, опросить своих клиентов, провести переговоры с потенциальными клиентами.
В данной части исследования необходимо определить существуют ли в регионе так называемые «якорные» клиенты для компании (существующие, потенциальные).
Анализ основных потребителей должен дать информацию о компаниях, занимающих определенные доли рынка, ассортименте потребляемых товаров, среднем объеме и сумме заказа.
Следующим важным шагом является выявление наличия в регионе конкурентов, способных затруднить выход вашей компании на данный рынок.
Анализ конкурентов (производителей и дистрибуторов) должен дать представление об основных участниках рынка, существующих торговых марках на рынке; ценовой политике конкурентов, об условиях поставок и оплат, о методах продвижения (реклама, способы увеличения продаж), каналах сбыта продукции, дать оценку слабых и сильных сторон конкурентов.
В результате такого маркетингового исследования компания получает информацию, с помощью которой можно определить привлекательность рынков и их перспективность, оценить стоимость входа на рынок, минимизировать финансовые риски, понять региональные особенности ведения бизнеса, определить уровень и качество конкуренции в различных сегментах и регионах, определить, как наиболее эффективно использовать активы и ресурсы компании.
После получения маркетинговой информации можно переходить к следующему шагу – выбору модели:
o Развитие дилерской сети
o Работа по франшизе
o Открытие регионального представительства/филиала
o Региональный (территориальный) представитель: либо самостоятельное присутствие, либо выделенная команда (в месте расположения дилера).
o Специализированные компании («рынок под ключ»)[1].
В таблице 1 мы попробовали кратко обозначить плюсы и минусы каждой модели, опираясь на опыт проектов с нашими клиентами.
Таблица 1 Модели регионального развития
Варианты |
Плюсы |
Минусы |
Развитие дилерской сети |
-Наличие готовой структуры в регионе -Быстрый выход на региональный рынок -Использование средств дилера |
-Сложность управления и влияния -Сложность внедрения стандартов -Риск разрыва отношений -Сложность получения информации -Снижение рентабельности продаж |
Продажа франшизы |
-Минимальные финансовые вложения -Внедрение корпоративных стандартов |
-Имиджевые риски -Получение только процента от прибыли -Сложность дистанционного контроля франчайзи -Разработка подробнейших стандартов |
Открытие регионального представительства/филиала |
-Управляемость продаж -Соблюдение стандартов -Стабильность присутствия в регионе -Увеличение стоимости компании -Оперативность |
-Большие затраты -Подбор персонала -Контроль за деятельностью филиала |
Региональный (территориальный) представитель |
-Наличие специалиста в регионе -Минимальные затраты на организацию -Быстрота передачи заказов -Оперативность |
-Высокий риск зависимости от одного человека -Работа сотрудника на конкурентов -Уровень компетентности сотрудника |
Для определения наиболее оптимальной модели следует посчитать разницу в марже, планируемую к получению из региона. К выбору модели работы следует отнестись очень серьезно, так как при неправильном выборе, затраты на работу филиала могут «съесть» всю прибыль, и в итоге филиал не выйдет на самоокупаемость.
В нашей практике был пример, когда дистрибуторская компания производителя осуществляла поставки продукции в республику Казахстан через местных дистрибуторов. В дальнейшем компания, оценив объемы отгрузок в данный регион, решила открыть там свой распределительный дистрибуционный центр. После открытия дистрибуционного центра выяснилось, что ключевые клиенты не хотят работать с данным центром, так как они все равно ездят в Москву за товаром других поставщиков, и им удобнее брать товар в Москве, чем в регионе. Следствием выбора такой модели присутствия явилось падение продаж по данному региону почти в 3 раза.
Многие компании, вышедшие на рынок Екатеринбурга, столкнулись с проблемой рентабельности филиала. Не все из них серьезно отнеслись к тому факту, что рынок уже сформирован и поделен между крупными дистрибуторами (особенно это касается продуктового направления). Это повлекло за собой большие финансовые затраты на поддержание филиала, так как развитие территории шло очень медленно. Поэтому для компаний, которые не готовы к большим финансовым затратам, оптимально подойдут модели: регионального представителя или работа с крупным дистрибутором, который может стать эксклюзивным представителем компании и заняться продвижением ее продукции. В дальнейшем уже можно думать и над открытием своего филиала.
Открывать свои филиалы (представительства) следует только в том случае, если в самой компании выстроена система продаж с четкой регламентацией и жестким управлением.
Те компании, которые решаются открыть филиал или представительство зачастую стоят перед вопросом какую организационно-правовую форму работы выбрать (таблица 2).
Таблица 2. Основные характеристики филиалов и представительств
Представительство |
Филиал |
|
Функции |
Осуществляет только юридические действия от имени общества |
Осуществляет как юридические, так и фактические действия |
Процессы |
· Налаживать деловые контакты. · Заключать договоры с контрагентами. · Рекламировать товар, работы, услуги. · Представлять интересы компании в регионе. |
· Налаживать деловые контакты. · Заключать договоры с контрагентами. · Рекламировать товар, работы, услуги. · Представлять интересы компании в регионе. · Участие в процессе производства товаров, услуг, работ. · Прием, отпуск товара потребителям. |
Статус |
Не являются юридическими лицами · не могут быть самостоятельными субъектами гражданских правоотношений; · не обладают собственной гражданской правосубъектностью и правоспособностью; · представляют собой части целого предприятия. |
Не являются юридическими лицами · не могут быть самостоятельными субъектами гражданских правоотношений; · не обладают собственной гражданской правосубъектностью и правоспособностью; · представляют собой части целого предприятия. |
Решение об учреждении обособленного подразделения |
Соответствующий орган управления общества: В АО — Совет директоров, а при его отсутствии — общее собрание акционеров. В ООО — общее собрание участников, не менее чем 2/3 голосов |
Соответствующий орган управления общества: В АО — Совет директоров, а при его отсутствии — общее собрание акционеров. В ООО — общее собрание участников, не менее чем 2/3 голосов |
Регламент |
Положения об обособленном подразделении юридического лица (является частью Устава) |
Положения об обособленном подразделении юридического лица (является частью Устава) |
Филиал можно условно разделить на обслуживающий одну территорию (город, область) и обслуживающий несколько территорий (соседние города, соседние области). Как правило, если филиал обслуживает несколько территорий, то на данных территориях могут осуществлять работу торговые (региональные) представители или торговые команды, находящиеся в подчинении филиала. Например, офис филиала находится в Кемерово, а торговые представители обслуживают Новосибирск и Томск.
В своей статье мы рассматриваем варианты выхода в регионы в большей степени для торгово-производственных компаний. Если говорить о выходе в регионы торговой сети, то существуют две основные стратегии выхода: открытие собственных торговых точек или покупка (слияние) региональной сети. Для выбора той или иной стратегии необходимо рассчитать чистый приведенный доход для обоих вариантов, по которому можно судить о целесообразности использования той или иной стратегии выхода в регион.
Определив рынки и модели работы, компании приступают к проработке юридических аспектов.
Юридическое оформление деятельности
Юридический аспект деятельности компании является одной из главных составляющих при работе в регионе. В нашей практике мы столкнулись со случаем, когда неправильно оформленные документы «заморозили» деятельность филиала на 2 месяца, что вызвало сложности с поставками в FMCG-сети региона, так как договора уже были заключены с филиалом.
Важным моментом при открытии филиала является выбор финансовой модели работы: без открытия отдельного расчетного счета или с открытием отдельного расчетного счета Филиалы как структурные подразделения организации могут выделяться либо не выделяться на отдельный баланс.
Трудно сказать какая финансовая модель лучше (таблица 3).
Таблица 3.Финансовые модели работы
Без открытия отдельного расчетного счета |
С открытием счета |
· Полный контроль за движением денежных средств (ДДС) филиала · Качественное планирование финансовых потоков компании · Отсутствие «финансовых махинаций» филиала · Отсутствие проблемы «зависания» денежных средств в филиале |
· Скорость оплаты счетов филиала · Отсутствие бюрократических проволочек центрального офиса · Возможность корректировать бюджет филиала · Оперативное реагирование на внешние изменения |
Может быть использован еще один\ вариант — создание отдельного юридического лица. Такой путь снижает риски головной компании от возникновения проблем с « заказными» региональными проверками или неправомерными действиями филиала. Необходимо учесть, что при такой правовой форме создания филиала в Уставе организации необходимо прописать ограничение полномочий Директора филиала, а не Генерального директора филиала, так как если в Уставе будет указан Генеральный директор, то по действующему законодательству ограничить его полномочия будет невозможно.
В процессе работы над проектами для дистрибуторских компаний мы постоянно сталкивались с проблемой отсутствия качественного финансового и управленческого учета.
Так в одной торгово-производственной компании, имеющей свой филиал на Урале, сверка взаиморасчетов между центральным офисом и филиалом осуществлялась один раз в год. Как правило, сверка «не шла». Помучившись со сверкой, бухгалтера откладывали ее до следующего года. В итоге получить четкую картину по взаиморасчетам центрального офиса с филиалом через два года уже не представлялось возможным.
Отсутствие строгого учета движения товарно — денежных потоков – это прямой путь к злоупотреблениям, поэтому организация финансового учета в филиале и постановка отчетности, должны быть организованы еще до открытия филиала. Это поможет формализовать учет, избежать человеческих и временных затрат в будущем.
Сколько бы компания не планировала деятельность, как бы правильно ни были оформлены документы, на начальном этапе функционирования филиала ведущая роль принадлежит тому человеку, который возглавит филиал.
Подбор персонала
Формирование команды филиала является одним из сложнейших вопросов при подготовке его открытия.
На начальной стадии развития филиала оптимально подобрать руководителя с «искрой», который горит желанием работать, готов «свернуть горы».
Для поиска такого сотрудника, как правило, HR-служба компании обращается в региональные рекрутинговые компании. Основываясь на своем опыте, рекомендуем обращаться в несколько агентств.
В нашей практике был такой случай. Через рекрутинговое агентство был нанят кандидат на должность Директора филиала. В агентстве его очень рекомендовали и хвалили, что повлияло на выбор кандидата. В итоге по результатам работы себя он ничем не проявил, и было принято решение с ним расстаться. В последствие выяснилось, что он являлся родственником владельца агентства. Чтобы не попасться на такую удочку, лучше воспользоваться услугами нескольких агентств.
Еще одним вариантом подбора управленца может стать приглашение вашим HR-отделом топ-менеджера из небольших региональных компаний. Как правило, такие люди хорошо знают рынок и обладают клиентской базой.
Так же можно рассмотреть вариант отправки в регион на определенный период собственного перспективного сотрудника, который сможет на месте подобрать штат и выстроить систему продаж.
Ошибки при запуске филиала
Опираясь на результаты работы над проектами по развитию филиалов для нескольких дистрибуторских компаний, мы систематизировали свой опыт и выделили несколько характерных ошибок, которые совершали компании при выходе в регион. Вот, некоторые из них.
Как показывает практика, в первые два года работы филиала наблюдается высокая текучесть персонала, что отрицательно влияет на его самоокупаемость. Чаще всего это связано с элементарным отсутствием контроля в области мотивации персонала филиала. Очень часто система премирования в филиале отдается на откуп руководителю, и распределение премий становится сильно зависимым от «любви» или «не любви» руководителя к конкретному подчиненному, что вызывает сильное раздражение в коллективе и является сильным демотиватором персонала.
Подробнее о разработке системе мотивации в рамках коммерческой политики компании – здесь>>
Еще одним демотиватором работы филиала является тот факт, что центральный офис «спускает» план освоения территории (план регионального развития) на квартал (полгода) в филиал без согласования цифр с филиалом, то есть сотрудники удаленного подразделения фактически исключены из процесса планирования. Это приводит к размыванию ответственности, так как филиал не хочет отвечать за те цифры, которые ему были спущены свыше. Такое планирование не учитывает реальное состояние клиентской базы и возможностей филиала.
Своим клиентам мы рекомендуем с осторожностью выставлять планы продаж в филиалах, особенно, на этапе запуска удаленного подразделения, и ежемесячно проводить корректировку таких планов при непосредственном участии сотрудников филиала.
Еще одной ошибкой при торговой экспансии в регионы, выявленной в процессе анализа работы отделов по развитию филиалов, является отсутствие качественного взаимодействия между центральным офисом и филиалом.
Как правило, многие филиалы отпускаются в «свободное плавание» после постановки целей и задач из центрального офиса. А ведь именно из-за отсутствия надлежащего контроля, качественного обмена информацией, методической помощи со стороны компании назревают различные противоречия, влекущие за собой серьезные сбои в работе филиала. Начинается «противостояние» и «кивание» центрального офиса на филиал, а филиала на офис.
В процессе анализа функциональных подразделений компаний в своих проектах мы сталкивались с проблемой двойного (тройного) подчинения филиала. Так, например, в одной дистрибуторской компании руководителю филиала (чаще его подчиненным) давали распоряжения руководители нескольких структурных подразделений центрального офиса (генеральный директор, директор по продажам, директор по развитию, директор по маркетингу). Это дестабилизировало работу филиала, вызывало нервотрепку в работе и отнимало время сотрудников удаленного подразделения на выполнения заданий из центрального офиса. Информация и запросы в филиал должны проходить через «одно окно» — непосредственного руководителя филиала. В филиале должен быть только один руководитель и только через него должны проходить запросы для его подчиненных.
Что же необходимо сделать, чтобы наладить качественную работу с филиалами? Вот, некоторые наши рекомендации:
- Выделить в центральном офисе ответственного за филиал, в любое время находящегося на связи с филиалом и оперативно решающего возникающие вопросы и проблемы.
- Максимально задействовать технические ресурсы: телефоны, электронную почту, сайт,Skype,внутрикорпоративный ICQ и т.д.
- Прописать корпоративные стандарты, в которых будут прописаны процедуры взаимодействия филиала с офисом, подчиненность, сроки и виды предоставляемой информации, формы отчетов и т.д.
- При открытии филиала необходимо продумать простую мотивационную схему, которая должна быть прозрачной и понятной сотрудникам филиала. Рекомендуется минимизировать зависимость мотивационных схем персонала филиала от субъективной оценки руководителя.
- Проводить семинары по командообразованию, стажировки в центральном офисе, слеты директоров филиалов для обмена опытом.
Подводя итоги к вышесказанному, процесс выхода в регионы можно схематично отразить в следующем виде (рисунок1).
Рис.1.Технология выхода в регион
В данной схеме мы преднамеренно вставили блок «Переговоры с ключевыми клиентами» до блока «Выбор руководителя филиала». Исходя из опыта, в компаниях, имеющих несколько филиалов, менеджер по развитию начинает работу по разработке региона задолго до появления руководителя удаленного подразделения. Как правило, на момент найма регионального топ-менеджера для филиала уже подготовлена некая клиентская база. Менеджер по развитию центрального офиса вводит будущего руководителя филиала в курс дела и передает ему наработанную к тому времени клиентскую базу.
Такая схема работы используется оптовыми и производственными компаниями.
Опираясь на наш опыт участия в проектах по аудиту и развитию филиалов, в данной статье мы попытались в общих чертах осветить основные этапы выхода компании в регион, указать на проблемы, с которыми они могут столкнуться, решившись осваивать регионы.
Надеемся, что этот материал будет полезен для вас. Больше информации о проблемах работы с филиалами вы можете найти на страницах сайта www.unitcon.ru
[1] В данной статье эта модель рассматривать не будет, так как она высоко затратна.
Управление сбытом № 7, 2012 г
Записаться на прохождение обучения по другим темам управления продажами Вы можете, перейдя по ссылке>> на страничку наших семинаров.
Также Вы можете воспользоваться индивидуальной консультацией ведущего российского эксперта по продажам и дистрибуции, директора Юнит-Консалтинг Татьяны Сорокиной. На которой вы не только получите самую актуальную информацию по передовым технологиям продаж, но и экспертизу и рекомендации непосредственно по вашему вопросу или задаче.
Если перед Вами стоят более серьезные задачи, то приглашаем воспользоваться консалтинговыми услугами Юнит-Консалтинг по проведению комплексного аудита продаж Вашей Компании с получением рекомендаций по увеличению эффективности служб коммерческого блока.
Зарегистрироваться на обучение и получить ответы на интересующие вопросы Вы можете у менеджера проекта по тел: (495) 987-10-57 или по электронной почте: Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.
Организация филиала: подводные камни и плюсы.
В данной статье Санкт-Петербургская консалтинговая компания Advising Bureau РЕШЕНИЯ УСПЕХА рассматривает основные плюсы, минусы и ошибки в организации процесса экспансии в регионы по пути создания Филиальной сети. Модель экспансии в регионы на основе модели создания собственной филиальной сети является одной из самых стабильных моделей. Одновременно она является самой дорогой, сложной моделью развития бизнеса, а также самой рентабельной и 100% управляемой. Так, например, при организации дилерской сети в течение первых двух лет сотрудничества в 80% случаев возникают противоречия в оперативном взаимодействии, что является невозможным при использовании Филиальной модели развития компании.
Основные минусы данной модели экспансии:
1. Требует достаточно больших инвестиций (по сравнению с другими моделями экспансии).
2. Все риски неудачного открытия филиала лежат на головной компании.
3. Требует постоянного контроля за движением денежных средств и товаро — материальных ценностей.
Основные плюсы данной модели экспансии:
1. 100%-ая управляемость филиала.
2. Абсолютное соблюдение корпоративных политики и правил.
3. Возможность вносить изменения в поставленные задачи и требования в режиме реального времени.
4. Упрощается «обратная связь» с руководством филиала и, соответственно, возможность своевременной корректировки позиции компании в регионе.
5. Возможность уменьшить количество сотрудников филиала, используя сотрудников головного офиса по ключевым позициям.
6. Появляется взаимозаменяемость – в случае отсутствия по какой–либо причине специалиста в головном офисе его может временно заменить специалист из филиала.
7. Готовится смена кадров – профессиональные сотрудники филиала могут быть приглашены на работу в головной офис компании.
8. 100%-ая гарантия того, что филиал, в отличие от других моделей экспансии, не передумает быть Вашим партнёром в регионе.
9. Инвестиции, вложенные в собственное подразделение, увеличивают стоимость Вашей компании в целом.
10. Происходит «экспансия торговой марки» компании, она становится более узнаваемой и, соответственно, возрастает её цена.
Однако, в большинстве компаний при организации филиалов, использование «плюсов» данной модели экспансии в регионы почему-то уходит на второй план или вовсе не контролируется и не используется. Так, 61% компаний не проводят анализ будущих cash — flow после начала работы филиалов и сталкиваются с проблемой размывания оборотных средств между собственными подразделениями.
В 67% компаний филиалы имеют организационные сложности и проблемы в управляемости, в результате чего, более 80% филиалов в первые год-два после начала работы, имеют высокую текучесть персонала, что приводит к увеличению затрат на открытие и содержание филиала. На основании практического анализа Advising Bureau РЕШЕНИЯ УСПЕХА находит причину данных проблем не в профессиональном уровне конкретных сотрудников филиалов, а в отсутствии чёткой политики Головной компании в управлении филиалами и стандартизации необходимых бизнес – процессов, функций и полномочий сотрудников.
Среди часто повторяющихся ошибок в организации Филиалов можно выделить:
1. Сознательное занижение требований к профессиональному уровню сотрудников при первичном наборе персонала в филиал (встречается в 76% случаев).
2. Первичная постановка упрощённых задач и целей перед руководством филиала.
3. Требование выполнения всеми сотрудниками филиала не стандартизированных правил и обязанностей.
4. Полное отсутствие проработанных Корпоративных Стандартов.
5. Отсутствие проработанной административно – функциональной модели управления.
6. Отсутствие возможностей для контроля движения денежных средств в филиале.
7. Отсутствие возможностей для контроля сохранности товаро — материальных ценностей.
8. Отсутствие контроля за лояльностью и карьерным ростом сотрудников филиала.
9. Отсутствие единой корпоративной системы учета и контроля (программного продукта).
10. Ошибки в подготовке юридических документов.
Организация филиалов, помимо трудностей и «подводных камней» при старте, может принести компании и ощутимую пользу в будущем, т.к. филиал может служить поставщиком профессиональных кадров для головной компании и полигоном для «обкатки» новых управленческих решений и/или организационных изменений.
При опросе топ-менеджеров 50 компаний, имеющих в своей структуре филиалы и представительства, на предмет возможностей карьерного роста для сотрудников филиала и взаимозаменяемости сотрудников головного офиса и филиала, выяснилось что:
1. Только 34% руководителей рассматривают кандидатуры сотрудников филиалов на имеющиеся вакансии в головном офисе.
2. 47 % руководителей считают эффективность перевода сотрудников из филиала в головной офис отрицательной.
3. 19% руководителей готовы рассмотреть перевод сотрудника из филиала в головной офис только при инициативе самого сотрудника.
Подводя итоги опроса, можно сделать вывод о том, что в большинстве компаний, имеющих собственные филиалы, отсутствует как методика, так и практика контроля карьерного роста и имеющегося опыта у сотрудников филиала для использования в головном офисе.
Хотя, привлечение сотрудников из филиалов в головной офис даёт следующие плюсы:
1. Экономия временных и материальных затрат на обучение специалиста.
2. Каждый сотрудник филиала начинает понимать, что его карьерный рост не ограничивается «стенами» филиала.
3. Желание сотрудников оказаться нужными в головном офисе заставляет их более качественно относиться к своим должностным обязанностям.
4. Возможность перевода сотрудника из филиала в головной офис заставляет последнего постоянно заниматься собственным дополнительным образованием.
5. Увеличивается лояльность сотрудников компании.
Источник: http://www.klerk.ru/boss/?81274
Что делать, если вам не удаётся контролировать работу филиалов в других городах
Строительная компания открыла филиал в Санкт-Петербурге, чтобы обслуживать интересы постоянных клиентов головного офиса. Дополнительная задача — привлечение новых клиентов. Структура филиала была достаточно простая — наняли руководителя филиала, который самостоятельно формировал штат, расходовал деньги, которые поступали из головного офиса, и направлял отчёты бухгалтеру. Через несколько месяцев после открытия всё вышло из-под контроля. Направляемые отчёты были неконкретными. Часть клиентов жаловалась на невыполнение работ, часть не оплачивала выполненные.
Меня попросили решить проблему. Первое, на что я обратил внимание, — это слабый уровень проверки филиала. Взаимодействие через бухгалтера было неоправданно, поскольку он не будет заниматься решением проблем с отсутствием поступления денежных средств, рассматривать жалобы заказчиков, да и сами отчёты руководителя филиала интересовали его только в плане цифр. Вся отчётность стала направляться мне, как и претензии заказчика, и информация об отсутствии оплаты. Почти все претензии удалось урегулировать в ходе переговоров с заказчиком. Неплательщикам вручили претензии и провели переговоры. Все имевшиеся проблемы решили менее чем за месяц.
Вопрос с расходованием денежных средств был более сложным, однако помог контроль закупок и всех выплат строительным бригадам. Моё личное знакомство со всеми работниками позволило решить вопросы, связанные с имевшимися у них трудностями взаимодействия с руководителем филиала. Проблема заключалась в том, что строительные бригады были полностью зависимы от него. Он определял их объём работы и размер оплаты труда. Мы выявили случаи, когда работники подписывали ведомости о получении больших сумм денег, чем они получали на самом деле. Это приводило и к потере компанией денег, и к падению лояльности работников. Руководителя филиала уволили. Деятельность нового руководителя я полностью перепроверял на месте.
11 шагов к созданию своего колл центра, услуги контакт центра для бизнеса, управление колл-центром, MANGO OFFICE
Определите цели
Как мы уже говорили в самом начале бизнес-цели определяют все остальные шаги по построению колл-центра.
Составьте бизнес-план
Составьте максимально детальный бизнес-план. Бизнес-план разумно составлять одновременно с выбором типа колл-центра, так как у разных типов колл-центра будет разная структура расходов.
Если вы перебрали несколько вариантов построения Контакт-центра, но выйти на требуемый бюджет не получается, попробуйте вернуться к п.1 и уточнить бизнес-цели.
Выберите тип и платформу
Какие бывают колл-центры, мы уже обсудили выше. Выберите подходящий вам вариант исходя из бизнес-целей и требуемой структуры расходов. Для небольших и средних колл-центров часто оптимальным оказывается облачный колл-центр, для крупных – on-site или гибридный.
Также рекомендуем вам выбрать облачный вариант, если вы не до конца уверены в окупаемости проекта. Облачный выбор избавит вас от инвестиционных рисков и поможет быстро и без серьезных вложений протестировать ваши бизнес-гипотезы.
Сделайте расчет необходимого количества операторов, телефонной нагрузки и ширины канала
Если вы выбрали on-site колл-центр и более-менее представляете, с каким количеством обращений и длительностью разговоров столкнетесь, проведите необходимые расчеты по одной из моделей работы колл-центра. Вы определите необходимое количество операторов и требуемое количество телефонных каналов.
Если у вас есть только гипотезы, рекомендуем остановить выбор на облачном Контакт-центре. В этом случае расчеты производить не придется: необходимое количество операторов вы установите на практике. А сервис-провайдер будет автоматически выделять вам требуемое количество телефонных каналов без дополнительной оплаты. Например, в MANGO OFFICE каждый телефонный номер является 100-канальным. А если этого количества каналов вам не хватит, мы можем прикрепить к вашему номеру и большее количество.
Определитесь с нужными каналами коммуникаций
Вы будете общаться с клиентами только по телефону, или подключите также коммуникации на сайте, мессенджеры и социальные сети? Ваш выбор повлияет на выбор поставщика услуг. Конечно, вы можете начать с телефонии, а затем подключить коммуникации на сайте, в мессенджерах и социальных сетях в виде отдельных приложений. Но продуктивность работы операторов при этом сильно упадет.
Выберите поставщика услуг и разверните инфраструктуру
Вся необходимая информация для выбора поставщика услуг, оборудования и ПО к этому моменту у вас уже есть.
Если вы выбрали on-site колл-центр, вам необходимо закупить оборудование и ПО, сделать кабельную разводку и произвести пуско-наладочные работы.
В случае облачного Контакт-центра, вы от этого избавлены.
В любом случае вам необходимо оборудовать рабочие места операторов: установить приложение-агент Контакт-центра, установить бесплатные SIP-софтфоны для работы с гарнитурой или настольные IP-телефоны для тех, кому это удобнее.
Наймите персонал и создайте требуемую организационную структуру
Этот шаг мы уже детально рассмотрели выше.
Спроектируйте процессы, правила и процедуры и настройте ПО
Трудно найти подразделение компании, в котором роль бизнес-процессов и их поддержка ИТ-инфраструктурой была бы столь же важна, как в Контакт-центре.
Вам необходимо спроектировать рабочие процессы, сформулировать правила обработки обращений клиентов. И настроить соответствующим образом Контакт-центр. Например, спроектировать подходящее голосовое меню, выбрать требуемый алгоритм распределения вызовов между операторами.
Наладить работу может сильно помочь использование скриптов разговора. В этом случае на экране оператора по ходу разговора с клиентом появляются подсказки, что спросить у клиента при разных вариантах развития беседы.
Не забудьте также выбрать правильные метрики, отражающие эффективность работы вашего колл-центра. Для их контроля вы можете настроить соответствующие аналитические отчеты.
Установите CRM или Service Desk. Интегрируйте CRM с вашим колл-центром
Времена, когда колл-центры работали изолировано от CRM, давно прошли. Сейчас почти всегда эти две системы интегрируют, так как преимуществ от интеграции очень много.
MANGO OFFICE имеет готовые интеграции с более 100 бизнес-приложениями, в том числе со всеми наиболее популярными CRM-системами.
С другими приложениями наш облачный Контакт-центр можно интегрировать с через REST API.
Проведите обучение персонала
Вам нужно обучить сотрудников:
- работе Контакт-центра и CRM,
- бизнес-процессам,
- правилам и приёмам ведения разговоров с клиентами.
Периодически нужно проводить повторные тренинги. Какие тренинги нужны каждому конкретному сотруднику больше всего, вам подскажут аналитические отчеты, а также запись и прослушивание разговоров.
Росту квалификации сотрудников способствует и помощь супервизора или опытных коллег во время разговора. Для этого сотрудники могут воспользоваться внутренним чатом или подключением к разговору эксперта в режиме конференции или суфлирования.
Настройте нужные отчеты и постройте систему мониторинга работы колл-центра
Аналитические отчеты – важнейшая функциональность кол-центра. С их помощью вы можете изучать, как меняется поток обращений клиентов со временем, тематику обращений клиентов, продуктивность работы каждого члена команды, качество обслуживания клиентов.
Помимо аналитики важно настроить и систему мониторинга работы колл-центра в реальном времени, чтобы вовремя реагировать на приближающиеся сбои.
Наш Контакт-центр предоставит вам десятки аналитических отчетов и мониторинг работы в реальном времени. Если показатели работы колл-центра выходят за заданные пределы (например, растет количество пропущенных вызовов, не хватает операторов на линии, увеличивается время ожидания клиентом ответа оператора), то вы можете настроить автоматическое извещение об этом через электронную почту или SMS.
Директор филиала, главный инженер, начальник производственного участка, главный механик, высшее образование, зарплата от 50000, Красноярск. Опыт работы 21 год
Опыт работы
Июль 2015 — настоящее время
Начальник участка ГПМ — ЗАО «ПОЛЮС ЛОГИСТИКА»
Организация работы участка, организация и планирование ремонтов и ТО ГПМ
Май 2014 — Июнь 2015
Инженер, преподаватель спец/дисциплин — КГБПОУ «Енисейский многопрофильный тхникум»
Организация работы гаража, организация работы автотранспорта, планирование ремонтов и ТО, преподавание.
Июль 2013 — Апрель 2014
Начальник производственного участка «Верхнепашинский» — ЗАО «Енисйэнергоком»
организация работы производственного участка, работа с заказчиками и подрядными организациями, организация работы автотранспорта, организация и планирование ремонтов и ТО, плпнирование и закупка запчастей, контроль за безопасностью движения.
Декабрь 2012 — Май 2013
Директор филиала «Магадан» — ЗАО «ПОЛЮС ЛОГИСТИКА»
Организация работы производственных участков, работа с заказчиками и подрядными организациями, создание производственных участков и подразделений с «нуля» и т.п.
Май 2012 — Декабрь 2012
Заместитель технического директора по транспорту — ЗАО «ПОЛЮС ЛОГИСТИКА»
Организация работы автотранспорта,организация и планирование ремонтов и ТО, планирование закуа запчастей на 596 ед.техники, контроль за безопасностью движния,работа с контролирующими органами, организация перевозки опасных грузов, составление маршрутов и т.д.
Сентябрь 2011 — Январь 2012
Заместитель технического директора по производству — ЗАО «ПОЛЮС ЛОГИСТИКА»
Организация работы производственных участков, производственных баз (Назимово,Лесосибирск), организация и контроль работы складского хозяйства, планирование, поступление и выдача ТМЦ, работа с заказчиками, контроль документооборота и т.д.
Декабрь 2005 — Сентябрь 2011
Прошел уть от водителя до главного инженера автотранспортного цеха. — ЗАО «ПОЛЮС»
В подчинении было 1200 человек
Февраль 1999 — Июль 2005
Начальник автомобильной колонны, в подчинении 120 человек — ОАО «Краснокаменское рудоуправление»
Статья 5. Филиалы и представительства общества / КонсультантПлюс
1. Общество может создавать филиалы и открывать представительства по решению общего собрания участников общества, принятому большинством не менее двух третей голосов от общего числа голосов участников общества, если необходимость большего числа голосов для принятия такого решения не предусмотрена уставом общества.
Создание обществом филиалов и открытие представительств на территории Российской Федерации осуществляются с соблюдением требований настоящего Федерального закона и иных федеральных законов
, а за пределами территории Российской Федерации также в соответствии с законодательством иностранного государства, на территории которого создаются филиалы или открываются представительства, если иное не предусмотрено международными договорами Российской Федерации.
2. Филиалом общества является его обособленное подразделение, расположенное вне места нахождения общества и осуществляющее все его функции или их часть, в том числе функции представительства.
3. Представительством общества является его обособленное подразделение, расположенное вне места нахождения общества, представляющее интересы общества и осуществляющее их защиту.
4. Филиал и представительство общества не являются юридическими лицами и действуют на основании утвержденных обществом положений. Филиал и представительство наделяются имуществом создавшим их обществом.
Руководители филиалов и представительств общества назначаются обществом и действуют на основании его доверенности.
Филиалы и представительства общества осуществляют свою деятельность от имени создавшего их общества. Ответственность за деятельность филиала и представительства общества несет создавшее их общество.
5. Филиалы и представительства общества должны быть указаны в едином государственном реестре юридических лиц.
(п. 5 в ред. Федерального закона от 29.06.2015 N 209-ФЗ)(см. текст в предыдущей редакции
)
Открыть полный текст документа
Управление филиалами — GitHub Docs
Вы можете использовать ветки, чтобы безопасно экспериментировать с изменениями в вашем проекте. Ветви изолируют вашу разработку от других веток в репозитории. Например, вы можете использовать ветку для разработки новой функции или исправления ошибки.
Вы всегда создаете ветвь из существующей ветки. Как правило, вы можете создать ветку из ветки по умолчанию вашего репозитория. Затем вы можете работать над этой новой веткой отдельно от изменений, которые другие люди вносят в репозиторий.
Вы также можете создать ветку, начиная с предыдущей фиксации в истории ветки. Это может быть полезно, если вам нужно вернуться к более раннему просмотру репозитория, чтобы исследовать ошибку или создать оперативное исправление поверх последней версии.
Когда вы будете удовлетворены своей работой, вы можете создать запрос на перенос, чтобы объединить ваши изменения в текущей ветке в другую ветку. Дополнительные сведения см. В разделах «Создание задачи или запроса на вытягивание» и «О запросах на извлечение».
Вы всегда можете создать ветку в GitHub Desktop, если у вас есть доступ для чтения к репозиторию, но вы можете отправить ветку в GitHub, только если у вас есть права записи в репозиторий.
Администраторы репозитория могут включить защиту в филиале. Если вы работаете с защищенной веткой, вы не сможете удалить или принудительно отправить в ветку. Администраторы репозитория могут включить другие параметры защищенной ветви, чтобы обеспечить выполнение определенных рабочих процессов перед объединением ветви. Для получения дополнительной информации см. «О защищенных ветках».
Совет: Первая новая ветвь, которую вы создадите, будет основана на ветке по умолчанию. Если у вас более одной ветки, вы можете выбрать основание новой ветки на текущей извлеченной ветке или ветке по умолчанию.
- Щелкните История .
- Щелкните правой кнопкой мыши фиксацию, из которой вы хотите создать новую ветку, и выберите Create Branch from Commit .
- В поле Имя введите имя новой ветви.
- Щелкните Создать ответвление .
Если вы создаете ветку на GitHub, вам необходимо опубликовать ветку, чтобы сделать ее доступной для совместной работы на GitHub.
- В верхней части приложения щелкните Текущая ветвь , затем щелкните ветку, которую вы хотите опубликовать.
- Щелкните Опубликовать ветку .
Вы можете просматривать и делать коммиты в любой из веток вашего репозитория. Если у вас есть незафиксированные сохраненные изменения, вам нужно решить, что делать с вашими изменениями, прежде чем вы сможете переключать ветки. Вы можете зафиксировать свои изменения в текущей ветке, спрятать свои изменения, чтобы временно сохранить их в текущей ветке, или перенести изменения в новую ветку. Если вы хотите зафиксировать изменения перед переключением ветвей, см. «Фиксация и проверка изменений в вашем проекте.«
Совет : Вы можете установить поведение по умолчанию для переключения ветвей в настройках Advanced . Для получения дополнительной информации см. «Настройка основных параметров».
- На рабочем столе GitHub щелкните Current Branch .
- В списке веток щелкните ветку, на которую хотите переключиться.
- Если вы сохранили незафиксированные изменения, выберите Оставить мои изменения или Перенести мои изменения , затем щелкните Переключить ветвь .
Вы не можете удалить ветку, если она в настоящее время связана с открытым запросом на вытягивание. Вы не можете отменить удаление ветки.
- В верхней части приложения щелкните Current Branch , затем щелкните ветвь, которую вы хотите удалить.
- В строке меню щелкните Branch , затем щелкните Удалить … . Вы также можете нажать shift ⌘ command D .
- В верхней части приложения щелкните Текущая ветвь , затем щелкните ветвь, которую вы хотите удалить.
- В строке меню щелкните Branch , затем щелкните Удалить … . Также можно нажать Ctrl Shift D .
Почему мои взносы не отображаются в моем профиле?
Проблемы, запросы на вытягивание и обсуждения
Проблемы, запросы на вытягивание и обсуждения появятся на вашем графике вкладов, если они были открыты в автономном репозитории, а не в вилке.
Совершает
Коммитов появятся на графике ваших вкладов, если они соответствуют всем из следующих условий:
- Адрес электронной почты, используемый для коммитов, связан с вашей учетной записью GitHub.
- Коммиты были сделаны в автономном репозитории, а не в вилке.
- Сделано коммитов:
- В ветке репозитория по умолчанию
- В ветке
gh-pages
(для репозиториев с сайтами проектов)
Дополнительные сведения о сайтах проектов см. В разделе «О страницах GitHub».
Кроме того, должен выполняться хотя бы один из следующего:
- Вы являетесь соавтором репозитория или членом организации, владеющей репозиторием.
- Вы разделили репозиторий.
- Вы открыли пул-реквест или проблему в репозитории.
- Вы отметили репозиторий.
Примечания:
- При перемещении коммитов первоначальные авторы коммита и лицо, которое перебазировало коммиты, в командной строке или на GitHub, получают кредит за вклад.
Коммит выполнен менее 24 часов назад
После совершения фиксации, отвечающей требованиям для засчета взноса, вам может потребоваться подождать до 24 часов, чтобы увидеть, как вклад появится на вашем графике вкладов.
Ваш локальный адрес электронной почты фиксации Git не связан с вашей учетной записью
Коммиты должны выполняться с помощью адреса электронной почты, который подключен к вашей учетной записи на GitHub, или предоставленного GitHub адреса электронной почты noreply
, указанного вам в настройках электронной почты, чтобы они отображались на диаграмме ваших вкладов. Дополнительные сведения об адресах электронной почты или
см. В разделе «Настройка адреса электронной почты для фиксации».
Вы можете проверить адрес электронной почты, используемый для фиксации, добавив .патч
до конца URL-адреса фиксации, например https://github.com/octocat/octocat.github.io/commit/67c0afc1da354d8571f51b6f0af8f2794117fd10.patch:
Из источника 67c0afc1da354d8571f51b6f0af8f2794117fd10 Пн, 17 сен, 00:00:00 2001
От: Octocat
Дата: 27 апреля 2014 г., 15:36:39 +0530
Тема: [PATCH] обновленный индекс для лучшего приветственного сообщения
Адрес электронной почты в поле От:
— это адрес, который был установлен в локальных настройках конфигурации git.В этом примере для фиксации используется адрес электронной почты [email protected]
.
Если адрес электронной почты, используемый для фиксации, не связан с вашей учетной записью на GitHub, вы должны добавить адрес электронной почты в свою учетную запись GitHub. График ваших вкладов будет автоматически перестроен, когда вы добавите новый адрес.
Общие адреса электронной почты, такие как [email protected]
, нельзя добавить в учетные записи GitHub. Если вы используете такой адрес электронной почты для своих коммитов, они не будут связаны с вашим профилем GitHub и не будут отображаться на диаграмме ваших вкладов.
Фиксация не была сделана по умолчанию или
gh-pages ветка
Коммиты засчитываются, только если они сделаны в ветке по умолчанию или в ветке gh-pages
(для репозиториев с сайтами проектов). Для получения дополнительной информации см. «О страницах GitHub».
Если ваши коммиты находятся в ветке не по умолчанию или не в gh-pages и вы хотите, чтобы они учитывались в ваших вкладах, вам нужно будет выполнить одно из следующих действий:
Изменение ветки репозитория по умолчанию изменит ее для всех соавторов репозитория.Делайте это только в том случае, если вы хотите, чтобы новая ветка стала базой, на которой будут выполняться все будущие запросы на вытягивание и фиксации.
Коммит выполнен в вилке
Коммиты, сделанные в вилке, не засчитываются в ваш вклад. Чтобы они засчитывались, вы должны выполнить одно из следующих действий:
- Откройте запрос на перенос, чтобы ваши изменения были объединены в родительский репозиторий.
- Чтобы отсоединить вилку и превратить ее в автономный репозиторий на GitHub, обратитесь в службу поддержки GitHub или в службу поддержки GitHub Premium.Если у вилки есть собственные вилки, сообщите службе поддержки GitHub, должны ли вилки перемещаться вместе с вашим репозиторием в новую сеть или оставаться в текущей сети. Для получения дополнительной информации см. «О вилках».
Создание организационной схемы и управление ею - Справка и поддержка Docebo
Введение
Ваша платформа позволяет вам организовывать пользователей в папки и подпапки (также называемые ветвями и вложенными ветвями), что означает, что вы можете структурировать своих учащихся таким же образом, как и в организационной схеме вашей компании.Имена веток всегда можно отредактировать на вашей платформе, а вложенные ветки можно создать, выбрав новую ветку, а затем вставив папку в эту ветку. Кроме того, отдельные папки можно перетаскивать внутри ваших веток, так что вы можете упорядочить их по своему усмотрению.
Создание филиала в организационной структуре
Чтобы создать организационную диаграмму, войдите в свою платформу как суперадмин. Затем войдите в меню администратора , наведя указатель мыши на значок шестеренки в правом верхнем углу.В меню администратора найдите раздел E-Learning , затем нажмите элемент Users .
На главной странице Все пользователи вы можете распределить пользователей по разным папкам в уникальном порядке или иерархически. Каждый пользователь, которого вы создаете, помещается в ветку. Это важно для организации и создания разных папок для каждого офиса, агентства, подразделения, подразделения, страны и т. Д. Вновь созданные пользователи всегда будут помещаться в вашу корневую ветвь, если вы не укажете конкретную ветвь или дочернюю ветвь, в которую их нужно поместить. в процессе создания.
Чтобы добавить новую ветку (папку), нажмите кнопку плюс в правом верхнем углу страницы, затем нажмите элемент New Branch . На выдвижной панели дайте ветви имя и код. Обратите внимание, что если для папки задан определенный язык, который не является языком по умолчанию на платформе, имя папки по-прежнему отображается на языке платформы по умолчанию. Помните, что код, который вы назначаете, будет одинаковым для каждого языка. Код представляет собой буквенно-цифровое значение, отличное от нуля, и не является обязательным полем. Обратите внимание, что если вы не назначите код филиалу, он не будет виден и доступен для выбора в форме регистрации платформы. Теперь в разделе панели Destination решите, где разместить папку. Если вы хотите, чтобы эта новая ветвь была папкой в корневой ветке, выберите корневую ветвь (папку в верхней части списка). В качестве альтернативы, если вы хотите, чтобы новая ветвь была вложенной папкой (вложенной веткой), выберите папку из списка, в которую вы хотите поместить эту новую вложенную ветвь.По завершении нажмите Подтвердите .
Управление папкой или ветвью
Для управления филиалом нажмите значок папки в верхнем левом углу страницы Все пользователи . На выдвижной панели слева отобразится ваша организационная диаграмма. Вы можете использовать панель поиска в верхней части панели для поиска определенной ветви или дочерней ветви. Чтобы управлять веткой, наведите указатель мыши на имя папки на панели, затем нажмите появившийся значок с многоточием .Теперь вы можете переместить ветку, отредактировать имя и код ветки или удалить ветку.
Если ветвь связана с условием на основе ветвей , регулирующим заполнение автоматических групп, вам не будет разрешено удалить ее, если вы сначала не удалите ее из условия группы (групп), в которой она участвует.
Добавление пользователей в филиал
Чтобы добавить пользователей в ветку, выберите пользователей из списка на странице Все пользователи , затем нажмите значок с многоточием в правом нижнем углу страницы.В меню нажмите на пункт Добавить в ветку . На выдвижной панели выберите ветку, в которую вы хотите поместить выбранных пользователей, затем нажмите Подтвердить .
Подсказка: Старайтесь не помещать пользователя в несколько ветвей, так как это часто может усложнить управление пользователями и взаимодействие с пользователем (т. Вместо того, чтобы помещать пользователя в две или более ветки, вы можете поместить пользователя в одну ветку, а затем поместить его в разные группы.
Перемещение пользователей в филиал
Чтобы переместить пользователей из одной ветви в другую, выберите пользователей из списка на странице Все пользователи , затем нажмите значок с многоточием в правом нижнем углу страницы. В меню нажмите на пункт Перейти к ветке . На выдвижной панели выберите ветку, в которую вы хотите поместить выбранных пользователей, затем нажмите Подтвердить . Теперь все выбранные пользователи будут удалены из ранее назначенных ветвей и помещены во вновь выбранную ветку.
Удаление пользователей из филиала
Чтобы удалить пользователей из ветви, выберите пользователей из списка на странице Все пользователи , затем нажмите значок с многоточием в правом нижнем углу страницы. В меню нажмите Удалить из ветки . На выдвижной панели выберите ветку, в которую вы хотите поместить выбранных пользователей, затем нажмите Подтвердить . В этом случае убедитесь, что все выбранные пользователи принадлежат к одной ветке.Помните, что вы не можете удалять пользователей из корневой ветви.
Лучшие Лрактики
- Поскольку пользователя можно перемещать из ветки в другую, только вручную и через API или CSV, учтите, что очень вложенную структуру ветвей может быть трудно поддерживать в актуальном состоянии, особенно если ваши пользователи очень часто переходят из ветки в другую. . Подготовьте свою ветвящуюся структуру с учетом того, как вы хотите доставлять учебный контент (по BU, по ролям, по региону ...), а не копировать иерархическую структуру компании.Если в организационной структуре вашей компании происходят постоянные изменения, постарайтесь сохранить филиалы на более высоком уровне и работать с автоматическими группами с помощью дополнительных полей, которые могут быть обновлены вами как суперадмином или самими пользователями.
- Старайтесь по возможности избегать использования корневой ветви (уровень 0), поскольку она ведет себя иначе, чем все другие ветви (например, вы не сможете отображать пользователей, которые ТОЛЬКО в корневой ветви: система всегда будет в этом случае отображать пользователей из всего дерева организационной диаграммы).Пользователи всегда должны размещаться в структуре ветвей под корнем, это поможет фильтровать при выборе пользователей для отчетности и регистрации.
Разработка и развертывание с ветвями • Руководства по Beanstalk
Введение
Начало работы с системой управления версиями может открыть глаза. Вы, наверное, уже сказали себе, «Как я работал без этого?»
. Теперь, когда вы ознакомились с основами управления версиями, вы хотите начать работать по-настоящему продуктивно, продолжая улучшать свой рабочий процесс.Ваш следующий шаг - научиться кодировать в ветках.
Кодирование в ветвях - это простая практика, которая помогает вам и вашей работе быть более организованными. Филиалы позволяют легко поддерживать «незавершенную» работу отдельно от завершенного, протестированного и стабильного кода. Это не только эффективный способ сотрудничества с другими, но также позволяет автоматизировать развертывание обновлений и исправлений на ваших серверах.
Кодирование в главном / магистральном «ответвлениях»
Даже если вы не знаете, как использовать ветвление в процессе разработки, вы уже использовали ветвление, просто передав свой код в систему контроля версий.Во всех основных системах управления версиями каждое репо по умолчанию содержит как минимум одну ветвь, ваша рабочая ветка :
- в Subversion это папка с названием
trunk
, - в Git это ветка под названием
master
.
Без какой-либо настройки ваша первая фиксация в любом репозитории будет сделана в эту рабочую ветвь.
Каждая система контроля версий использует свой подход к созданию, объединению и удалению веток.Мы сосредоточимся на общем процессе разработки и предлагаем вам обратиться к документации на предпочитаемый вами VCS для получения конкретных сведений о командах:
Ветвление рабочего процесса
Использование веток может показаться сложным без каких-либо указаний. Мы собираемся помочь вам, сосредоточив внимание на двух конкретных вариантах использования веток и преимуществах их включения в рабочий процесс.
Преимущества филиалов: особенности построения и исправление ошибок
Большая часть кода попадает в одну из этих двух категорий: вы либо создаете новые функции, либо исправляете ошибки в существующей кодовой базе.Проблема возникает, когда эти две вещи должны происходить одновременно.
Представьте, что вы недавно запустили большую функцию Feature X . Поначалу дела идут хорошо, поэтому вы переходите к следующей задаче в вашем списке дел, потрясающая Feature Y . Вы начинаете кодировать и фиксировать изменения в своем репозитории, но по ходу дела обнаруживаете проблему с большой функцией Feature X , которую вам нужно исправить прямо сейчас. Что вы делаете?
Если вся ваша работа выполняется в рабочей ветке по умолчанию вашего репозитория, вам нужно выяснить, как сохранить работу, которую вы сделали до сих пор на Feature Y , вернуть ваш репозиторий в состояние, в котором оно было в, когда вы развернули Feature X , внесите исправление, а затем повторно представьте свою работу из Feature Y .Это беспорядочно, и вы потенциально можете потерять часть своей работы или внести новые ошибки.
Вместо этого вы должны выполнять всю свою работу в ветвях feature или для исправления ошибок и позволить VCS делать тяжелую работу за вас. Вы должны разветвлять свой репозиторий с того места, где был развернут Feature X , создавая альтернативную рабочую копию, над которой вы можете выполнять новую работу. Ваша ветка Feature Y включает всю историю и код репозитория, но отдельная история «начинается» с момента создания ветки.Это позволяет вам работать с ветвью Feature Y , отдавая предпочтение вашему сердцу, не нарушая код, который вы развернули для выпуска Feature X .
Только после того, как функция будет протестирована и завершена и готова к развертыванию, вы можете объединить из этой ветви обратно в вашу основную рабочую ветвь.
Это также означает, что вы можете переключаться между функциональной веткой и рабочей веткой по умолчанию в любое время, чтобы создавать новые ветки с этой точки - как исправление ошибки, которое вам нужно сделать.После переключения обратно в рабочую ветку вы создадите ветку с исправлением ошибок. Работа над исправлением ошибки в собственной ветке может показаться необязательной, если исправление небольшое, но следование этой практике поможет вам избежать ситуаций, когда небольшие исправления ошибок превращаются в более крупные исправления ошибок, потенциально оставляя вашу рабочую ветку в беспорядочном состоянии. .
Лучшие практики с ветвями функций и ошибок
- Старайтесь не передавать незавершенную работу в рабочую ветвь вашего репозитория по умолчанию.
- Создавайте ветку каждый раз, когда вы начинаете нетривиальную работу, включая функции и сложные исправления ошибок.
- Не забудьте удалить ветки функций после того, как они были объединены в стабильную ветку. Это сохранит ваш репозиторий в чистоте.
Преимущества ветвления: ветки серверной среды
Еще одна причина использовать контроль версий - это то, что вы можете использовать свой репозиторий в качестве источника для развертывания кода на ваших серверах. Так же, как ветки функций и исправлений ошибок, ветки среды позволяют легко отделить текущий код от стабильного кода.Использование ветвей среды и развертывание из них означает, что вы всегда будете точно знать , какой код выполняется на ваших серверах в каждой из ваших сред.
Мы говорили о вашей «рабочей ветке по умолчанию», но вы также можете думать об этом как о ветке среды разработки. Рекомендуется содержать эту ветку в чистоте - это легко сделать, используя ветки функций и исправлений ошибок и объединяя их обратно в ветку разработки только после того, как они будут протестированы. Другими словами, в любой момент времени ваша ветка разработки должна содержать только стабильный код.Поэтому с этого момента в этом руководстве мы будем использовать имя «стабильный» для обозначения этой ветки.
Использование производственных и промежуточных филиалов
В дополнение к среде разработки у вас, вероятно, будет как минимум еще одна среда: production , в которой фактически работает ваш веб-сайт или приложение. Наличие ветки производственной среды и создание этого единственного источника кода, который идет в производственную среду, гарантирует, что у вас будет моментальный снимок того, что находится на вашем производственном сервере в любое время, а также подробная история того, что и когда было добавлено в производственную среду.
В большинстве случаев у вас также будет промежуточная среда , где ваша команда или клиенты могут вместе анализировать изменения. Наличие ветки промежуточной среды поможет вам сохранить эту среду с теми же преимуществами, что и производственная ветвь.
Различия ветвей для упрощенного просмотра кода и примечания к выпуску
Когда ваша среда разработки была обновлена с помощью протестированных функций и исправлений ошибок, вы можете использовать свой VCS , чтобы провести различие между стабильной ветвью и промежуточной ветвью, чтобы увидеть, что будет развернуто, чего в настоящее время нет.Это прекрасная возможность найти некачественный или неполный код, отладочный код и другие остатки разработки, которые не следует развертывать. Эта разница также может быть полезна при написании заметок о выпуске.
Никогда не выполняйте слияние с ветвями среды без развертывания
Чтобы поддерживать синхронизацию ветвей среды со средами, рекомендуется выполнять слияние в ветку среды только во время развертывания. Если вы завершите слияние без развертывания, ваша ветка среды не будет синхронизирована с вашей реальной производственной средой.
С ветвями среды вы никогда не захотите фиксировать изменения непосредственно в ветке. Объединяя код только из стабильной ветки в промежуточную или производственную ветвь, вы гарантируете, что изменения будут происходить в одном направлении: от ветвей функций и исправлений ошибок к стабильной и промежуточной средам и от стабильной к производственной. Это сохраняет вашу историю в чистоте и, опять же, позволяет вам быть уверенным в том, какой код работает в каких средах.
Этап 1. Разработка новой функции. Этап 2. Функция завершена и протестирована. Этап 3. Выполняется выпуск функции.Лучшие практики с ветвями среды
- Используйте рабочую ветвь репозитория по умолчанию в качестве «стабильной» ветки.
- Создайте ветвь для каждой среды, включая промежуточную и производственную.
- Никогда не выполняйте слияние с ветвью среды, если вы не готовы к развертыванию в этой среде.
- Выполните различие между ветвями перед объединением - это может помочь предотвратить объединение чего-то, что не было запланировано, а также может помочь в написании примечаний к выпуску.
- Слияние должно происходить только в одном направлении: сначала от функции к стадии тестирования; затем от функции к стабильной после тестирования; затем из стабильного в производство для отправки.
Дополнительная литература: ветвление с помощью бобового стебля
Это всего лишь обзор некоторых наиболее распространенных практик использования веток в управлении версиями. Если вы используете Beanstalk, мы включили несколько ресурсов, которые помогут вам воспользоваться преимуществами ветвления.
Изучите ветвление с помощью Bitbucket Cloud
Цель
Это руководство научит вас основам создания, работы, проверки и объединения веток с использованием Git и Bitbucket Cloud.
Это руководство для вас, если вы уже понимаете базовый рабочий процесс Git, в том числе:
- Клонировать : копирование удаленного репозитория в Bitbucket Cloud в вашу локальную систему
- Добавить или этап : принять внесенные вами изменения и подготовьте их для добавления в вашу историю git
- Commit : добавьте новые или измененные файлы в историю git для репозитория
- Pull : получите новые изменения, которые другие добавили в репозиторий, в ваш локальный репозиторий
- Push : переносите изменения из локальной системы в удаленный репозиторий
Если вы не знакомы с основами Git, не волнуйтесь, просто ознакомьтесь с нашим руководством Learn Git with Bitbucket Cloud, и вы быстро научитесь .
Почему ветвление имеет значение
Ветвление - один из лучших способов получить максимальную отдачу от Git для контроля версий. Ветвление в Git позволяет:
- иметь несколько команд, работающих одновременно в одном репозитории.
- Пусть члены команды из любой точки мира используют Bitbucket Cloud для совместной работы.
- Одновременное выполнение нескольких линий разработки независимо друг от друга без необходимости зависания кода.
Подготовка
Поскольку мы хотим, чтобы вы чувствовали себя так, как будто вы работаете в команде, в общем репозитории Bitbucket, мы предложим вам форк публичного репозитория, который мы предоставили.
Что такое вилка?
Вилка - еще один способ сохранения клона или копии. Термин fork (в программировании) происходит от системного вызова Unix, который создает копию существующего процесса. Таким образом, в отличие от ветки, вилка не зависит от исходного репозитория. Если исходный репозиторий удаляется, вилка остается. Если вы создадите форк репозитория, вы получите этот репозиторий и все его ветки.
- Перейдите к tutorials / tutorials.git.bitbucket.org
- Щелкните +> Разветвить этот репозиторий в левой части экрана.
- Измените Имя , чтобы оно было уникальным для вашей команды, затем щелкните Репозиторий форков .
- Создайте каталог для репозитория, в который будет легко переходить. Вы можете выбрать что-то вроде этого:
$ mkdir test-repositories $ cd test-repositories / $ test-repositories
- Клонируйте разветвленный репозиторий в только что созданный каталог. Это может выглядеть примерно так:
$ git clone https: //[email protected]/dstevenstest/mygittutorial.bitbucket.io.git Клонирование в mygittutorial.bitbucket.io ... удаленный: Подсчет объектов: 12392, сделано. remote: Сжатие объектов: 100% (12030/12030), готово. удаленный: Всего 12392 (дельта 8044), повторно 564 (дельта 360) Получение объектов: 100% (12392/12392), 2,72 МБ | 701.00 Кбайт / с, готово.Разрешение дельт: 100% (8044/8044), готово. $ cd mygittutorial.bitbucket.io/
Создайте ветку и измените что-нибудь, используя рабочий процесс ветвления
Вы собираетесь добавить расценки на своем сайте в этой ветке.
- Создайте ветку с помощью команды git branch.
$ git branch test-1
- Проверьте только что созданную ветку с помощью команды git checkout.
$ git checkout test-1 Переключено на ветку test-1
- Перечислите ветки, которые у вас есть локально, с помощью команды git branch.
$ git branch main * test-1
- Обновите файл editme.html, добавив цитату. Вы можете использовать что-то вроде следующего:
Это цитата, и она мне нравится.
Цитата: Искусство цитирования - Добавьте это изменение.
git добавить editme.html
- Зафиксируйте изменение с описательным сообщением о фиксации.
git commit editme.html -m'added a new quote '[test-1 063b772] добавил новую цитату 1 файл изменен, 3 вставки (+), 3 удаления (-)
- Отправьте это изменение в Bitbucket с помощью команды git push.
git push fatal: текущая ветвь test-1 не имеет восходящей ветки. Чтобы протолкнуть текущую ветвь и установить удаленный как восходящий поток, используйте git push --set-upstream origin test-1
- Нажмите ветку и измените ее с помощью команды git push branch.
$ git push origin test-1 Подсчет объектов: 3, готово. Дельта-сжатие с использованием до 8 потоков.Сжатие объектов: 100% (3/3), готово. Запись объектов: 100% (3/3), 363 байта | 0 байт / с, готово. Всего 3 (дельта 2), повторно используется 0 (дельта 0) удаленный: удаленный: создать запрос на вытягивание для теста-1: удаленный: https://bitbucket.org/dstevenstest/dans.git.bitbucket.org/pull-requests/new ? source = test-1 & t = 1 remote: на https://bitbucket.org/dstevenstest/dans.git.bitbucket.org.git * [новая ветка] test-1 -> test-1
- Откройте репозиторий учебников и щелкните Ветви.Теперь вы должны увидеть как основную ветку, так и ветку test-1. Это должно выглядеть примерно так:
Создание, выборка и проверка удаленной ветки.
Когда вы работаете в команде, вам, скорее всего, придется извлекать или извлекать ветки, которые создают другие члены команды, и отправлять их в Bitbucket. Этот пример познакомит вас с основами создания веток, созданных другими, и работы с ними.
- Перейдите в репозиторий учебников в Bitbucket и щелкните Ветви .Вы должны увидеть что-то вроде этого:
- Щелкните Create branch , назовите ветку test-2 и щелкните Create .
- Скопируйте команду git fetch в диалоговом окне проверки ветки. Вероятно, это будет выглядеть примерно так:
$ git fetch && git checkout test-2 Из https://bitbucket.org/dstevenstest/dans.git.bitbucket.org * [новая ветка] test-2 -> origin / test -2 Тест-2 ветки настроен для отслеживания удаленного теста-2 ветки от источника. Переключился на новую ветку test-2
- Используйте команду git branch в своем терминале.Вы должны увидеть список веток примерно так:
$ git branch main test-1 * test-2
- Используйте команду git status, и вы увидите что-то вроде этого:
$ git status В ветке test-2 Ваша ветка обновлена с 'origin / test-2'. нечего фиксировать, рабочее дерево очищено
- Используйте команду git checkout, чтобы снова переключить фокус на другую ветку. Команда будет выглядеть примерно так:
$ git checkout test-1 Переключено на ветку 'test-1' Ваша ветка опережает 'origin / test-1' на 3 коммита. (используйте "git push" для публикации ваших локальных коммитов)
Нажать изменение и создать запрос на вытягивание
Теперь пришло время проверить ваше первое изменение и объединить ветку.
- Щелкните +> Создать запрос на вытягивание . Вы можете видеть свою ветку test-1 как исходную ветку и главную в целевой ветке.
Поскольку мы создали этот репозиторий путем разветвления существующего репозитория, в качестве места назначения устанавливается основная ветвь репозитория, который мы разветвили.
Чтобы исправить это, вам необходимо изменить целевую ветку репозитория (ветку, в которую вы будете объединять свои изменения) с tutorials / tutorials.git.bitbucket.org на ваш репозиторий.
Вы также можете добавить рецензентов в свою команду к запросу на вытягивание. Подробнее о запросах на вытягивание
- Нажмите Создать запрос на вытягивание .
- Добавьте комментарий в запрос на перенос, выбрав строку в diff (область, отображающая изменение, которое вы внесли в файл editme.html).
- Щелкните Утвердить в левом верхнем углу страницы. Конечно, в реальном запросе на вытягивание рецензенты будут комментировать
- Нажмите Объединить .
- (Необязательно) Обновите сообщение Фиксация , добавив дополнительные сведения.
- Выберите Merge commit Merge commit из двух вариантов:
- Merge commit - Сохраняет все коммиты из исходной ветки и делает их частью целевой ветки. Этот параметр аналогичен вводу git merge --no-ff в командной строке.
- Squash — Объединяет ваши коммиты, когда вы объединяете исходную ветвь с целевой ветвью. Этот параметр аналогичен вводу git merge --squash в командной строке.
- Щелкните Commits , и вы увидите, как ветвь, которую вы только что слили, вписывается в более крупную схему изменений.
Удалить ветку и перетащить основную в локальную рабочую ветку
Теперь вы прошли базовый рабочий процесс ветвления, и изменения внесены в main. Последнее, что мы узнаем, - это как удалить ветку, которую вы только что слили, вытащить обновленную главную ветку и объединить обновленную главную ветку с веткой test-2.
Зачем удалять ветку?
Помните, что ветвление в Git отличается от SVN или аналогичных систем управления версиями тем, что ветки используются как в качестве длительных ветвей, таких как основная ветвь и ветвь разработки, так и в качестве краткосрочных ветвей разработки, таких как примеры, которые мы используем в этом руководстве. Поскольку это так, неплохо удалить локальные ветки, чтобы ваша локальная среда оставалась чистой.
Зачем тянуть main и объединять в test-2?
Мы используем это как пример вашей работы с репозиторием, в котором работает другой член команды.Рекомендуется время от времени вносить изменения в рабочую ветку, чтобы предотвратить конфликты слияния в запросах на перенос.
- Откройте свой терминал и запустите команду git status, результат должен выглядеть примерно так:
$ git status В ветке test-1 нечего фиксировать, рабочее дерево очищено
- Переключитесь на основную ветку, выполнив команду git checkout main. Результат должен выглядеть примерно так:
git checkout main Переключено на ветку main. Ваша ветка обновлена с помощью origin / main.
- Запустите команду git pull.Результат должен выглядеть примерно так:
$ git pull remote: Подсчет объектов: 1, готово. удаленный: всего 1 (дельта 0), повторно используется 0 (дельта 0) Распаковка объектов: 100% (1/1), выполнено. Из https://bitbucket.org/dstevenstest/dans.git.bitbucket.org 2d4c0ab..dd424cb main -> origin / main Обновление 2d4c0ab..dd424cb Перемотка вперед editme.html | 6 +++ --- 1 файл изменен, 3 вставки (+), 3 удаления (-)
- Запустите команду git branch -d {branch_name}, чтобы удалить ветвь test-1. Результат будет выглядеть примерно так:
$ git branch -d test-1 Deleted branch test-1 (was 063b772)
- Переключитесь на ветку test-2 с помощью команды git checkout.
$ git checkout test-2 Переключено на ветку 'test-2' Ваша ветка обновлена с 'origin / test-2'.
- Слейте основную ветвь с вашей рабочей веткой с помощью команды git merge main test-2. Результат будет выглядеть примерно так:
$ git merge main test-2 Обновление 2d4c0ab..dd424cb Перемотка вперед editme.html | 6 +++ --- 1 файл изменен, 3 вставки (+), 3 удаления (-)
- Активная ветвь имеет значение.Если вы хотите объединить main в test-2, вы хотите, чтобы test-2 был проверен (активен). То же самое верно, если вы хотите объединить test-2 с основным, вам необходимо проверить main.
- Чтобы узнать, какая ветка активна в любое время, используйте ветку git, и активная ветка будет иметь звездочку или использовать статус git, и он сообщит вам, что ветка, в которой вы находитесь, и есть ли ожидающие локальные изменения.
Мы надеемся, что вы немного узнали о ветвлении и задействованных командах. Давайте рассмотрим то, что мы только что рассмотрели:
Просмотрите рабочий процесс ветвления
Рабочий процесс Git Feature Branch - это эффективный способ наладить совместную работу с вашей командой в Bitbucket.В этом рабочем процессе вся разработка функций происходит в ветвях, отдельных от основной ветки. В результате несколько разработчиков могут работать над своими собственными функциями, не затрагивая основной код.
Начать с основной веткиЭтот рабочий процесс поможет вам совместно работать над кодом хотя бы с одним человеком. Если ваш Bitbucket и локальные репозитории обновлены, вы готовы приступить к работе. | |
Создайте новую веткуИспользуйте отдельную ветку для каждой функции или проблемы, над которой вы работаете.После создания ветки проверьте ее локально, чтобы все изменения, которые вы вносили, были в этой ветке. | |
Обновление, добавление, фиксация и отправка измененийРаботайте над функцией и делайте коммиты, как при любом использовании Git. Когда будете готовы, отправьте свои коммиты, обновив функциональную ветку на Bitbucket. | |
Рассмотрите свой кодЧтобы получить отзывы о своем коде, создайте запрос на вытягивание в Bitbucket. Оттуда вы можете добавить рецензентов и убедиться, что все в порядке перед объединением. | |
Разрешить отзывТеперь ваши товарищи по команде комментируют и одобряют. Разрешайте их комментарии локально, фиксируйте и отправляйте изменения в Bitbucket. Ваши обновления отображаются в запросе на перенос. | |
Объедините свою веткуПеред объединением вам может потребоваться разрешить конфликты объединения, если другие внесли изменения в репо. Когда ваш пул-реквест одобрен и свободен от конфликтов, вы можете добавить свой код в основную ветку. Слияние из запроса на вытягивание в Bitbucket. |
Возможности этого руководства ограничены, чтобы показать, как ветви делают команды более эффективными. Существует несколько подходов к ветвлению, и мы обсуждаем некоторые из них в: Сравнение рабочих процессов.
Build репозиториев GitHub - Azure Pipelines
- 54 минуты для чтения
В этой статье
Трубопроводы Azure
Azure Pipelines может автоматически создавать и проверять каждый запрос на вытягивание и фиксировать его в репозитории GitHub.В этой статье описывается, как настроить интеграцию между GitHub и Azure Pipelines.
Если вы новичок в интеграции Azure Pipelines с GitHub, выполните действия, описанные в разделе Создание первого конвейера, чтобы первый конвейер работал с репозиторием GitHub, а затем вернитесь к этой статье, чтобы узнать больше о настройке и настройке интеграции между GitHub. и Azure Pipelines.
Организации и пользователи
GitHub и Azure Pipelines - это две независимые службы, которые хорошо интегрируются друг с другом.У каждого из них своя организация и управление пользователями. В этом разделе даются рекомендации по репликации организации и пользователей из GitHub в Azure Pipelines.
Организации
Структура GitHub состоит из организаций и учетных записей пользователей , которые содержат репозиториев . См. Документацию GitHub.
СтруктураAzure DevOps состоит из организаций, , которые содержат проектов, . См. Планирование организационной структуры.
Azure DevOps может отражать вашу структуру GitHub с помощью:
- Организация Azure DevOps для вашей организации GitHub или учетной записи пользователя
- Azure DevOps Проекты для репозиториев GitHub
Чтобы настроить идентичную структуру в Azure DevOps:
- Создайте организацию Azure DevOps с именем вашей организации GitHub или учетной записи пользователя. У него будет URL-адрес типа
https: // dev.azure.com/your-organization
. - В организации Azure DevOps создайте проекты, названные в честь ваших репозиториев. У них будут URL-адреса типа
https://dev.azure.com/your-organization/your-repository
. - В проекте Azure DevOps создайте конвейеры с именами организации и репозитория GitHub, которые они создают, например
your-organization.your-repository
. Тогда становится ясно, для каких репозиториев они нужны.
Следуя этому шаблону, ваши репозитории GitHub и проекты Azure DevOps будут иметь совпадающие URL-пути.Например:
Сервис | URL |
---|---|
GitHub | https://github.com/python/cpython |
Azure DevOps | https://dev.azure.com/python/cpython |
Пользователи
Пользователи GitHub не получают доступ к Azure Pipelines автоматически. Azure Pipelines ничего не знает об удостоверениях GitHub. По этой причине нет способа настроить Azure Pipelines для автоматического уведомления пользователей об ошибке сборки или ошибке проверки PR с использованием их идентификатора GitHub и адреса электронной почты.Вы должны явно создать новых пользователей в Azure Pipelines для репликации пользователей GitHub. После создания новых пользователей вы можете настроить их разрешения в Azure DevOps, чтобы они отражали их разрешения в GitHub. Вы также можете настроить уведомления в Azure DevOps, используя их удостоверение Azure DevOps.
Роли организации GitHub
Роли участников организации GitHub находятся по адресу https://github.com/orgs/your-organization/people
(замените your-organization
).
Разрешения для членов организации Azure DevOps находятся по адресу https: // dev.azure.com/your-organization/_settings/security
(замените your-organization
).
Роли в организации GitHub и эквивалентные роли в организации Azure DevOps показаны ниже.
Роль организации GitHub | Эквивалент организации Azure DevOps |
---|---|
Владелец | Член администраторов коллекции проектов |
Биллинг-менеджер | Член администраторов коллекции проектов |
Член | Член коллекции проектов Действительные пользователи .По умолчанию у этой группы нет прав на создание новых проектов. Чтобы изменить это, установите для группы Создание новых проектов разрешение на Разрешить или создайте новую группу с необходимыми разрешениями. |
Роли учетной записи пользователя GitHub
Учетная запись пользователя GitHub имеет одну роль - владение учетной записью.
Разрешения для членов организации Azure DevOps находятся по адресу https://dev.azure.com/your-organization/_settings/security
(замените your-organization
).
Роль учетной записи пользователя GitHub сопоставляется с разрешениями организации Azure DevOps следующим образом.
Роль учетной записи пользователя GitHub | Эквивалент организации Azure DevOps |
---|---|
Владелец | Член администраторов коллекции проектов |
Разрешения репозитория GitHub
разрешения репозитория GitHub находятся по адресу https://github.com/your-organization/your-repository/settings/collaboration
(замените your-organization
и your-repository
).
Разрешения проекта Azure DevOps находятся по адресу https://dev.azure.com/your-organization/your-project/_settings/security
(замените your-organization
и your-project
).
Эквивалентные разрешения между репозиториями GitHub и проектами Azure DevOps следующие.
Разрешение репозитория GitHub | Эквивалент проекта Azure DevOps |
---|---|
Администратор | Член Администраторов проекта |
Написать | Член авторов |
Чтение | Член Читателей |
Если ваш репозиторий GitHub предоставляет разрешения для команд, вы можете создавать соответствующие команды в разделе Teams
настроек вашего проекта Azure DevOps.Затем добавьте команды в указанные выше группы безопасности, как и пользователей.
Разрешения для конкретного трубопровода
Чтобы предоставить разрешения пользователям или группам для определенных конвейеров в проекте Azure DevOps, выполните следующие действия:
- Посетите страницу проекта Pipelines (например,
https://dev.azure.com/your-organization/your-project/_build
). - Выберите конвейер, для которого нужно установить определенные разрешения.
- В контекстном меню « ... » выберите Безопасность .
- Щелкните Добавить ... , чтобы добавить конкретного пользователя, команду или группу и настроить их разрешения для конвейера.
Доступ к репозиториям GitHub
Вы создаете новый конвейер, сначала выбирая репозиторий GitHub, а затем файл YAML в этом репозитории. Репозиторий, в котором находится файл YAML, называется репозиторием self
. По умолчанию это репозиторий, который строит ваш конвейер.
Позже вы можете настроить конвейер для извлечения из другого репозитория или нескольких репозиториев.Чтобы узнать, как это сделать, см. Раздел «Оформление заказа с несколькими репо».
Вы создаете новый конвейер, сначала выбирая GitHub в качестве типа репозитория, а затем один из репозиториев, к которым у вас есть доступ.
Azure Pipelines должен получить доступ к вашим репозиториям, чтобы запускать их сборки и получать их код во время сборок.
Существует 3 типа аутентификации для предоставления Azure Pipelines доступа к вашим репозиториям GitHub при создании конвейера.
Аутентификация приложения GitHub
Приложение GitHub для Azure Pipelines - это рекомендованный тип аутентификации для конвейеров непрерывной интеграции.Установив приложение GitHub в свою учетную запись или организацию GitHub, ваш конвейер может работать без использования вашего личного удостоверения GitHub. Обновления статуса сборки и GitHub будут выполняться с использованием удостоверения Azure Pipelines. Приложение работает с GitHub Checks для отображения результатов сборки, тестирования и покрытия кода в GitHub.
Чтобы использовать приложение GitHub, установите его в своей организации или учетной записи пользователя GitHub для некоторых или всех репозиториев. Приложение GitHub можно установить и удалить с домашней страницы приложения.
После установки приложение GitHub станет методом аутентификации Azure Pipelines по умолчанию для GitHub (вместо OAuth) при создании конвейеров для репозиториев.
Если вы устанавливаете приложение GitHub для всех репозиториев в организации GitHub, вам не нужно беспокоиться о том, что Azure Pipelines отправляет массовые электронные письма или автоматически настраивает конвейеры от вашего имени. В качестве альтернативы установке приложения для всех репозиториев администраторы репозиториев могут устанавливать его по одному для отдельных репозиториев.Это требует дополнительных усилий со стороны администраторов, но не имеет ни преимуществ, ни недостатков.
Разрешения, необходимые в GitHub
Для установки приложения Azure Pipelines GitHub необходимо быть владельцем организации GitHub или администратором репозитория. Кроме того, чтобы создать конвейер для репозитория GitHub с непрерывной интеграцией и триггерами запроса на вытягивание, у вас должны быть настроены необходимые разрешения GitHub. В противном случае репозиторий не появится в списке репозиториев при создании конвейера.В зависимости от типа аутентификации и владельца репозитория убедитесь, что настроен соответствующий доступ.
Если репо находится в вашей личной учетной записи GitHub, установите приложение Azure Pipelines GitHub в свою личную учетную запись GitHub. Вы сможете указать этот репозиторий при создании конвейера в Azure Pipelines.
Если репо находится в чужой личной учетной записи GitHub, другой человек должен установить приложение Azure Pipelines GitHub в своей личной учетной записи GitHub.Вы должны быть добавлены в качестве соавтора в настройках репозитория в разделе «Соавторы». Примите приглашение стать соавтором, используя ссылку, отправленную вам по электронной почте. Как только вы это сделаете, вы можете создать конвейер для этого репозитория.
Если репо находится в организации GitHub, которой вы владеете, установите приложение Azure Pipelines GitHub в организации GitHub. Вы также должны быть добавлены в качестве соавтора или ваша команда должна быть добавлена в настройках репозитория в разделе «Соавторы и команды».
Если репо находится в организации GitHub, которой владеет кто-то другой, владелец организации GitHub или администратор репозитория должен установить приложение Azure Pipelines GitHub в организации. Вы должны быть добавлены в качестве соавтора или ваша команда должна быть добавлена в настройках репозитория в разделе «Соавторы и команды». Примите приглашение стать соавтором, используя ссылку, отправленную вам по электронной почте.
Разрешения приложения GitHub
Приложение GitHub запрашивает следующие разрешения во время установки:
Разрешение | Что с этим делает Azure Pipelines |
---|---|
Запись кода доступа | Только после вашего осознанного действия Azure Pipelines упростит создание конвейера, зафиксировав файл YAML в выбранной ветке вашего репозитория GitHub. |
Доступ для чтения к метаданным | Azure Pipelines получит метаданные GitHub для отображения репозитория, веток и проблем, связанных со сборкой, в сводке сборки. |
Доступ для чтения и записи к чекам | Azure Pipelines будет читать и записывать собственные результаты сборки, тестирования и покрытия кода, которые будут отображаться на GitHub. |
Доступ для чтения и записи запросов на вытягивание | Только после вашего осознанного действия Azure Pipelines упростит создание конвейера, создав запрос на вытягивание для файла YAML, который был зафиксирован в выбранной ветке вашего репозитория GitHub.Azure Pipelines будет извлекать метаданные запроса на вытягивание для отображения в сводках сборки, связанных с запросами на вытягивание. |
Устранение неполадок при установке приложения GitHub
GitHub может отображать ошибку, например:
У вас нет разрешения на изменение этого приложения в вашей организации. Пожалуйста, свяжитесь с владельцем организации.
Это означает, что приложение GitHub, скорее всего, уже установлено для вашей организации. Когда вы создаете конвейер для репозитория в организации, приложение GitHub будет автоматически использоваться для подключения к GitHub.
Создание конвейеров в нескольких организациях и проектах Azure DevOps
После установки приложения GitHub можно создавать конвейеры для репозиториев организации в различных организациях и проектах Azure DevOps. Однако если вы создаете конвейеры для одного репозитория в нескольких организациях Azure DevOps, только конвейеры первой организации могут автоматически запускаться посредством коммитов GitHub или запросов на вытягивание. Сборки вручную или по расписанию по-прежнему возможны во вторичных организациях Azure DevOps.
Аутентификация OAuth
OAuth - это самый простой тип аутентификации для репозиториев в вашей личной учетной записи GitHub. Обновления статуса GitHub будут выполняться от имени вашей личной личности GitHub. Чтобы конвейеры продолжали работать, доступ к вашему репозиторию должен оставаться активным. Некоторые функции GitHub, такие как проверки, недоступны с OAuth и требуют приложения GitHub.
Чтобы использовать OAuth, щелкните Выберите другое соединение под списком репозиториев при создании конвейера.Затем нажмите Авторизовать , чтобы войти в GitHub и авторизоваться с помощью OAuth. Соединение OAuth будет сохранено в вашем проекте Azure DevOps для дальнейшего использования, а также будет использоваться в создаваемом конвейере.
Разрешения, необходимые в GitHub
Чтобы создать конвейер для репозитория GitHub с непрерывной интеграцией и триггерами запроса на вытягивание, у вас должны быть настроены необходимые разрешения GitHub. В противном случае репозиторий не появится в списке репозиториев при создании конвейера.В зависимости от типа аутентификации и владельца репозитория убедитесь, что настроен соответствующий доступ.
Если репо находится в вашей личной учетной записи GitHub, хотя бы один раз авторизуйтесь в GitHub с помощью OAuth, используя свои личные учетные данные GitHub. Это можно сделать в настройках проекта Azure DevOps в разделе «Конвейеры»> «Подключения к службам»> «Новое подключение к службе»> «GitHub»> «Авторизовать». Предоставьте Azure Pipelines доступ к своим репозиториям в разделе «Разрешения» здесь.
Если репо находится в чьей-то личной учетной записи GitHub, хотя бы один раз, другой человек должен пройти аутентификацию на GitHub с помощью OAuth, используя свои личные учетные данные GitHub. Это можно сделать в настройках проекта Azure DevOps в разделе «Конвейеры»> «Подключения к службам»> «Новое подключение к службе»> «GitHub»> «Авторизовать». Другой человек должен предоставить Azure Pipelines доступ к своим репозиториям в разделе «Разрешения» здесь. Вы должны быть добавлены в качестве соавтора в настройках репозитория в разделе «Соавторы».Примите приглашение стать соавтором, используя ссылку, отправленную вам по электронной почте.
Если репо находится в организации GitHub, которой вы владеете, хотя бы один раз авторизуйтесь на GitHub с помощью OAuth, используя свои личные учетные данные GitHub. Это можно сделать в настройках проекта Azure DevOps в разделе «Конвейеры»> «Подключения к службам»> «Новое подключение к службе»> «GitHub»> «Авторизовать». Предоставьте доступ к Azure Pipelines своей организации в разделе «Доступ организации» здесь. Вы должны быть добавлены в качестве соавтора или ваша команда должна быть добавлена в настройках репозитория в разделе «Соавторы и команды».
Если репо находится в организации GitHub, которой владеет кто-то другой, хотя бы один раз, владелец организации GitHub должен пройти аутентификацию на GitHub с помощью OAuth, используя свои личные учетные данные GitHub. Это можно сделать в настройках проекта Azure DevOps в разделе «Конвейеры»> «Подключения к службам»> «Новое подключение к службе»> «GitHub»> «Авторизовать». Владелец организации должен предоставить организации доступ к Azure Pipelines в разделе «Доступ организации» здесь. Вы должны быть добавлены в качестве соавтора или ваша команда должна быть добавлена в настройках репозитория в разделе «Соавторы и команды».Примите приглашение стать соавтором, используя ссылку, отправленную вам по электронной почте.
Отменить доступ OAuth
После авторизации Azure Pipelines на использование OAuth, чтобы позже отозвать его и предотвратить дальнейшее использование, перейдите на страницу «Приложения OAuth» в настройках GitHub. Вы также можете удалить его из списка подключений службы GitHub в настройках проекта Azure DevOps.
Аутентификация токена личного доступа (PAT)
PATфактически такие же, как OAuth, но позволяют контролировать, какие разрешения предоставляются Azure Pipelines.Сборки и обновления статуса GitHub будут выполняться от имени вашей личной идентичности GitHub. Чтобы сборки продолжали работать, доступ к вашему репозиторию должен оставаться активным.
Чтобы создать PAT, посетите Персональные токены доступа в настройках GitHub.
Необходимые разрешения: репо
, admin: repo_hook
, read: user
и user: email
. Это те же разрешения, которые требуются при использовании OAuth выше. Скопируйте сгенерированный PAT в буфер обмена и вставьте его в новое подключение службы GitHub в настройках проекта Azure DevOps.На всякий случай назовите соединение с сервисом после своего имени пользователя GitHub. Он будет доступен в вашем проекте Azure DevOps для дальнейшего использования при создании конвейеров.
Разрешения, необходимые в GitHub
Чтобы создать конвейер для репозитория GitHub с непрерывной интеграцией и триггерами запроса на вытягивание, у вас должны быть настроены необходимые разрешения GitHub. В противном случае репозиторий не появится в списке репозиториев при создании конвейера. В зависимости от типа аутентификации и владения репозиторием убедитесь, что настроен следующий доступ.
Если репо находится в вашей личной учетной записи GitHub, PAT должен иметь необходимые области доступа в разделе Персональные токены доступа:
репо
,admin: repo_hook
,read: user
иuser: email
.Если репо находится в чьей-то личной учетной записи GitHub, PAT должен иметь необходимые области доступа в разделе Персональные токены доступа:
репо
,admin: repo_hook
,read: user
иuser: email
.Вы должны быть добавлены в качестве соавтора в настройках репозитория в разделе «Соавторы». Примите приглашение стать соавтором, используя ссылку, отправленную вам по электронной почте.Если репо находится в организации GitHub, которой вы владеете, PAT должен иметь необходимые области доступа в разделе Персональные токены доступа:
репо
,admin: repo_hook
,read: user
иuser: email
. Вы должны быть добавлены в качестве соавтора или ваша команда должна быть добавлена в настройках репозитория в разделе «Соавторы и команды».Если репо находится в организации GitHub, которой владеет кто-то другой, PAT должен иметь необходимые области доступа в разделе Персональные токены доступа:
репо
,admin: repo_hook
,read: user
иuser: email
. Вы должны быть добавлены в качестве соавтора или ваша команда должна быть добавлена в настройках репозитория в разделе «Соавторы и команды». Примите приглашение стать соавтором, используя ссылку, отправленную вам по электронной почте.
Отменить доступ к PAT
После авторизации Azure Pipelines на использование PAT, чтобы впоследствии удалить его и предотвратить дальнейшее использование, перейдите на страницу «Персональные токены доступа» в настройках GitHub.Вы также можете удалить его из списка подключений службы GitHub в настройках проекта Azure DevOps.
Триггеры CI
Триггеры непрерывной интеграции (CI) вызывают запуск конвейера всякий раз, когда вы отправляете обновление в указанные ветви или отправляете указанные теги.
КонвейерыYAML по умолчанию настроены с триггером CI на всех ветвях.
Филиалы
Вы можете управлять тем, какие ветви будут получать триггеры CI, с помощью простого синтаксиса:
триггер:
- владелец
- релизы / *
Вы можете указать полное имя ветки (например, master
) или подстановочный знак (например, Release / *
).См. Подстановочные знаки для получения информации о синтаксисе подстановочных знаков.
Примечание
Вы не можете использовать переменные в триггерах, поскольку переменные оцениваются во время выполнения (после срабатывания триггера).
Примечание
Если вы используете шаблоны для создания файлов YAML, то вы можете указать триггеры только в основном файле YAML для конвейера. Вы не можете указать триггеры в файлах шаблонов.
Для более сложных триггеров, которые используют исключить
или пакет
, необходимо использовать полный синтаксис, как показано в следующем примере.
# сборка конкретной ветки
спусковой крючок:
ветви:
включают:
- владелец
- релизы / *
исключать:
- релизы / старые *
В приведенном выше примере конвейер будет запущен, если изменение будет отправлено в мастер или в любую ветвь релизов. Однако он не сработает, если будет внесено изменение в ветку релизов, которая начинается с старого
.
Если вы укажете предложение exclude
без предложения include
, то это эквивалентно указанию *
в предложении include
.
Помимо указания имен ветвей в списках ветвей
, вы также можете настроить триггеры на основе тегов, используя следующий формат:
триггер:
ветви:
включают:
- refs / tags / {tagname}
исключать:
- refs / tags / {othertagname}
Если вы не укажете никаких триггеров, значение по умолчанию будет таким, как если бы вы написали:
триггер:
ветви:
включают:
- '*' # должен заключаться в кавычки, поскольку "*" является зарезервированным символом YAML; мы хотим строку
Важно
Когда вы указываете триггер, он заменяет неявный триггер по умолчанию, и только нажатие на ветки, которые явно настроены для включения, будут запускать конвейер.Сначала обрабатываются включения, а затем исключения удаляются из этого списка.
Дозирование запусков CI
Если у вас много членов команды, которые часто загружают изменения, вы можете уменьшить количество запускаемых запусков.
Если вы установите batch
на true
, когда конвейер запущен, система ожидает завершения выполнения, а затем запускает еще один прогон со всеми изменениями, которые еще не были созданы.
# сборка конкретной ветки с пакетной обработкой
спусковой крючок:
партия: правда
ветви:
включают:
- владелец
Чтобы прояснить этот пример, предположим, что нажатие A
для мастеринга привело к запуску вышеуказанного конвейера.Пока этот конвейер работает, в репозиторий происходят дополнительные нажатия B
и C
. Эти обновления не запускают новые независимые запуски немедленно. Но после завершения первого прогона все нажатия до этого момента времени объединяются и запускается новый прогон.
Примечание
Если конвейер имеет несколько заданий и стадий, то первый прогон все равно должен достичь конечного состояния, выполнив или пропустив все свои задания и стадии, прежде чем может начаться второй прогон.По этой причине вы должны проявлять осторожность при использовании этой функции в конвейере с несколькими этапами или утверждениями. Если вы хотите группировать свои сборки в таких случаях, рекомендуется разделить процесс CI / CD на два конвейера - один для сборки (с пакетной обработкой) и один для развертываний.
Дорожки
Вы можете указать пути к файлам, которые нужно включить или исключить.
# сборка по конкретному пути
спусковой крючок:
ветви:
включают:
- владелец
- релизы / *
пути:
включают:
- документы
исключать:
- документы / README.мкр
При указании путей необходимо явно указать ветви для запуска. Вы не можете запустить конвейер только с фильтром пути; у вас также должен быть фильтр веток, и измененные файлы, соответствующие фильтру пути, должны быть из ветви, которая соответствует фильтру ветвей.
Советы:
- Подстановочные знаки не поддерживаются фильтрами пути.
- Пути всегда указываются относительно корня репозитория.
- Если вы не устанавливаете фильтры пути, по умолчанию неявно включается корневая папка репо.
- Если вы исключаете путь, вы также не можете включить его, если не определите его для более глубокой папки. Например, если вы исключите / tools , вы можете включить / tools / trigger-run-on-these
- Порядок фильтров пути не имеет значения.
- Пути в Git чувствительны к регистру . Обязательно используйте тот же футляр, что и настоящие папки.
- Вы не можете использовать переменные в путях, поскольку переменные оцениваются во время выполнения (после срабатывания триггера).
Теги
В дополнение к указанию тегов в списках ветвей
, как описано в предыдущем разделе, вы можете напрямую указать теги для включения или исключения:
# специфический тег
спусковой крючок:
теги:
включают:
- v2. *
исключать:
- v2.0
Если вы не укажете триггеры тегов, по умолчанию теги не будут запускать конвейеры.
Важно
Если вы указываете теги в сочетании с фильтрами ветвей, триггер срабатывает, если удовлетворяется либо фильтр ветвления, либо фильтр тегов.Например, если отправляемый тег удовлетворяет фильтру ветвления, конвейер запускается, даже если тег исключен фильтром тегов, потому что отправка удовлетворяет фильтру ветвления.
Отказ от CI
Отключение триггера CI
Вы можете полностью отказаться от триггеров CI, указав триггер : нет
.
# Трубопровод без триггера CI
триггер: нет
Важно
Когда вы отправляете изменение в ветку, файл YAML в этой ветке оценивается, чтобы определить, следует ли запускать выполнение CI.
Для получения дополнительной информации см. Триггеры в схеме YAML.
Выберите Включить непрерывную интеграцию на вкладке Триггеры , чтобы включить этот триггер, если вы хотите, чтобы сборка запускалась всякий раз, когда кто-то проверяет код.
Пакетные изменения
Установите этот флажок, если у вас много членов команды, которые часто загружают изменения, и вы хотите уменьшить количество выполняемых сборок. Если вы выберете эту опцию, когда сборка запущена, система ожидает завершения выполнения, а затем ставит в очередь еще один запуск всех изменений, которые еще не были построены.
Вы можете группировать изменения и создавать их вместе.
Примечание
Если вы используете пакетирование с многоступенчатым конвейером YAML, то запуск должен достичь конечного состояния, прежде чем может начаться следующий. Это часто нежелательно, так как многоступенчатый конвейер может проходить утверждения и длительные этапы развертывания. В этих случаях рекомендуется использовать одно из следующих решений:
- не использовать дозирование
- разделяет конвейер на два отдельных конвейера - один для CI и один для CD
- устанавливает соответствующие условия на этапах, чтобы пропустить их и быстро завершить цикл
Отводные фильтры
Вы можете указать ветви, в которых вы хотите запускать сборки.Если вы хотите использовать подстановочные знаки, введите спецификацию ветви (например, features / modules / *
) и нажмите Enter.
Пути фильтры
Если ваше репозиторий Git находится в Azure Repos или TFS, вы также можете указать фильтры пути, чтобы уменьшить набор файлов, которые вы хотите запустить сборку.
Советы:
- Пути всегда указываются относительно корня репозитория.
- Если вы не устанавливаете фильтры пути, по умолчанию неявно включается корневая папка репо.
- Если вы исключаете путь, вы также не можете включить его, если не определите его для более глубокой папки. Например, если вы исключите / tools , вы можете включить / tools / trigger-run-on-these
- Порядок фильтров пути не имеет значения.
- Пути в Git чувствительны к регистру. Обязательно используйте тот же футляр, что и настоящие папки.
Пример
Например, вы хотите, чтобы ваша сборка запускалась изменениями в главной и большей части, но не всех ветвей функций.Вы также не хотите, чтобы сборки запускались при изменении файлов в папке инструментов.
Пропуск CI для отдельных коммитов
Вы также можете указать Azure Pipelines пропустить запуск конвейера, который обычно запускается фиксацией. Просто включите [skip ci]
в сообщение фиксации или описание фиксации HEAD, и Azure Pipelines пропустит запуск CI. Вы также можете использовать любой из приведенных ниже вариантов.
-
[skip ci]
or[ci skip]
-
пропуск проверки: верно
илипропуск проверки: верно
-
[пропустить azurepipelines]
или[пропустить azurepipelines]
-
[пропустить azpipelines]
или[azpipelines skip]
-
[пропустить азп]
или[азп пропустить]
-
*** NO_CI ***
Использование триггера в условиях
Это распространенный сценарий для запуска различных шагов, заданий или стадий в конвейере в зависимости от типа триггера, запустившего выполнение.Это можно сделать с помощью системной переменной Build.Reason
. Например, добавьте следующее условие к своему шагу, заданию или этапу, чтобы исключить его из проверки PR.
условие: and (success (), ne (variables ['Build.Reason'], 'PullRequest'))
Поведение триггеров при создании новых веток
Обычно для одного и того же репозитория настраивают несколько конвейеров. Например, у вас может быть один конвейер для создания документации для вашего приложения, а другой - для создания исходного кода.Вы можете настроить триггеры CI с соответствующими фильтрами ветвлений и фильтрами путей в каждом из этих конвейеров. Например, вы можете захотеть, чтобы один конвейер запускался при отправке обновления в папку docs
, а другой запускался при отправке обновления в код вашего приложения. В этих случаях нужно понимать, как запускаются конвейеры при создании новой ветки.
Вот поведение, когда вы отправляете новую ветку (которая соответствует фильтрам веток) в ваш репозиторий:
- Если в вашем конвейере есть фильтры пути, он будет запущен только в том случае, если новая ветвь содержит изменения в файлах, которые соответствуют этому фильтру пути.
- Если в вашем конвейере нет фильтров пути, он будет запущен, даже если в новой ветви нет изменений.
Подстановочные знаки
При указании ветви или тега вы можете использовать точное имя или подстановочный знак.
Шаблоны подстановочных знаков позволяют *
соответствовать нулю или более символам, а ?
для соответствия одиночному символу.
- Если вы начинаете свой шаблон с
*
в конвейере YAML, вы должны заключить его в кавычки, например"* -releases"
. - Для филиалов и меток:
- Подстановочный знак может появляться в любом месте шаблона.
- Для дорожек:
- Вы можете включить
*
в качестве последнего символа, но это не делает ничего иначе, чем указание имени каталога само по себе. - Вы можете , а не включать
*
в середину фильтра пути, и вы не можете использовать?
.
- Вы можете включить
триггер:
ветви:
включают:
- владелец
- релизы / *
- особенность/*
исключать:
- релизы / старые *
- особенность / * - работает
пути:
включают:
- '*' # то же, что '/' для корня репозитория
исключать:
- 'docs / *' # то же, что 'docs /'
Триггеры PR
Триггеры запроса на извлечение (PR) вызывают запуск конвейера всякий раз, когда запрос на извлечение открывается с одной из указанных целевых ветвей, или когда в такой пул-реквест вносятся обновления.
Филиалы
Вы можете указать целевые ветви при проверке запросов на вытягивание.
Например, для проверки запросов на вытягивание, которые
target master выпуски
и / *
, вы можете использовать следующий триггер pr
.
пр:
- владелец
- релизы / *
Эта конфигурация запускает новый запуск при первом создании нового запроса на извлечение и после каждого обновления, сделанного в запросе на извлечение.
Вы можете указать полное имя ветки (например, master
) или подстановочный знак (например, Release / *
).
Примечание
Вы не можете использовать переменные в триггерах, поскольку переменные оцениваются во время выполнения (после срабатывания триггера).
Примечание
Если вы используете шаблоны для создания файлов YAML, то вы можете указать триггеры только в основном файле YAML для конвейера. Вы не можете указать триггеры в файлах шаблонов.
GitHub создает новый ref при создании запроса на вытягивание. Ссылка указывает на фиксацию слияния , которая представляет собой объединенный код между исходной и целевой ветвями запроса на вытягивание.Конвейер проверки PR создает фиксацию, на которую указывает ссылка. Это означает, что файл YAML, который используется для запуска конвейера, также является слиянием исходной и целевой ветвей. В результате изменения, которые вы вносите в файл YAML в исходной ветви запроса на перенос, могут переопределить поведение, определенное файлом YAML в целевой ветви.
Если в вашем YAML-файле нет триггеров pr
, проверка запросов на вытягивание автоматически включается для всех
ветки, как будто вы написали следующий триггер пр
.Эта конфигурация запускает сборку, когда
Запрос на вытягивание создается, и когда коммиты попадают в исходную ветку любого активного запроса на вытягивание.
пр:
ветви:
включают:
- '*' # должен заключаться в кавычки, поскольку "*" является зарезервированным символом YAML; мы хотим строку
Важно
Когда вы указываете триггер pr
, он заменяет неявный триггер pr
по умолчанию, и только отправка в ветви, которые явно настроены для включения, будет запускать конвейер.
Для более сложных триггеров, которые должны исключать определенные ветви, необходимо использовать полный синтаксис, как показано в следующем примере.
# конкретная ветка
пр:
ветви:
включают:
- владелец
- релизы / *
исключать:
- релизы / старые *
Дорожки
Вы можете указать пути к файлам, которые нужно включить или исключить. Например:
# конкретный путь
пр:
ветви:
включают:
- владелец
- релизы / *
пути:
включают:
- документы
исключать:
- документы / README.мкр
Советы:
- Подстановочные знаки не поддерживаются фильтрами пути.
- Пути всегда указываются относительно корня репозитория.
- Если вы не устанавливаете фильтры пути, по умолчанию неявно включается корневая папка репо.
- Если вы исключаете путь, вы также не можете включить его, если не определите его для более глубокой папки. Например, если вы исключите / tools , вы можете включить / tools / trigger-run-on-these
- Порядок фильтров пути не имеет значения.
- Пути в Git чувствительны к регистру . Обязательно используйте тот же футляр, что и настоящие папки.
- Вы не можете использовать переменные в путях, поскольку переменные оцениваются во время выполнения (после срабатывания триггера).
Множественные обновления PR
Вы можете указать, должны ли дополнительные обновления PR отменять выполняющиеся проверки для того же PR. По умолчанию , правда
.
# auto cancel false
пр:
autoCancel: false
ветви:
включают:
- владелец
Черновик подтверждения PR
По умолчанию триггеры pull request срабатывают как для черновых, так и для готовых к рассмотрению запросов на вытягивание.Чтобы отключить триггеры запросов на вытягивание для черновиков запросов на вытягивание, установите для свойства drafts
значение false
.
пр:
autoCancel: boolean # указывает, должны ли дополнительные нажатия на PR отменять выполняющиеся прогоны для того же PR. По умолчанию true
ветви:
include: [string] # имена веток, которые вызовут сборку
exclude: [string] # имена веток, которые не будут
пути:
include: [строка] # пути к файлам, которые должны совпадать для запуска сборки
exclude: [string] # пути к файлам, по которым не запускается сборка
drafts: boolean # строить ли черновики PR, по умолчанию true
Отказ от проверки PR
Вы можете полностью отказаться от проверки запроса на вытягивание, указав pr: none
.
# нет триггеров PR
пр: нет
Для получения дополнительной информации см. Триггер PR в схеме YAML.
Примечание
Если триггер pr
не срабатывает, выполните действия по устранению неполадок, описанные в FAQ.
Выберите триггер Проверка запроса на извлечение и установите флажок Включить проверку запроса на извлечение , чтобы разрешить сборки по запросам на извлечение.
Вы можете указать ветви для включения и исключения.Выберите имя ветки в раскрывающемся меню и выберите Включить или Исключить в зависимости от ситуации. Для включенных ветвей сборка будет запускаться при каждом нажатии на пул-реквест, нацеленный на эту ветку.
Охраняемые филиалы
Вы можете запускать проверочную сборку с каждой фиксацией или пул-реквестом, нацеленной на ветку, и даже предотвращать слияние пул-реквестов до тех пор, пока не завершится успешная проверка.
Чтобы настроить сборки обязательной проверки для репозитория GitHub, вы должны быть его владельцем, соавтором с ролью администратора или членом организации GitHub с ролью записи.
Сначала создайте конвейер для репозитория и постройте его хотя бы один раз, чтобы его статус был опубликован на GitHub, тем самым сообщая GitHub имя конвейера.
Далее следуйте документации GitHub для настройки защищенных веток в настройках репозитория.
Для проверки состояния выберите имя конвейера в списке Проверки состояния .
Важно
Если ваш конвейер не отображается в этом списке, убедитесь в следующем:
Взносы из внешних источников
Если ваш репозиторий GitHub имеет открытый исходный код, вы можете сделать свой проект Azure DevOps общедоступным, чтобы любой мог просматривать результаты сборки, журналы и результаты тестирования вашего конвейера без входа в систему.Когда пользователи за пределами вашей организации формируют ваш репозиторий и отправляют запросы на вытягивание, они могут просматривать статус сборок, которые автоматически проверяют эти запросы на вытягивание.
При использовании Azure Pipelines в общедоступном проекте при принятии вкладов из внешних источников следует учитывать следующие соображения.
Ограничения доступа
Помните о следующих ограничениях доступа при запуске конвейеров в общедоступных проектах Azure DevOps:
- Секреты: По умолчанию секреты, связанные с вашим конвейером, не доступны для проверки запросов на вытягивание для вилок.См. Раздел Подтверждение вклада форков.
- Межпроектный доступ: Все конвейеры в общедоступном проекте Azure DevOps выполняются с токеном доступа, ограниченным проектом. Конвейеры в общедоступном проекте могут получать доступ к таким ресурсам, как артефакты сборки или результаты тестирования, только внутри проекта, а не в других проектах организации Azure DevOps.
- Пакеты артефактов Azure: Если вашим конвейерам нужен доступ к пакетам из артефактов Azure, вы должны явно предоставить разрешение учетной записи Project Build Service для доступа к каналам пакетов.
Вклады вилки
Важно
Эти настройки влияют на безопасность вашего конвейера.
Когда вы создаете конвейер, он автоматически запускается для запросов на вытягивание от форков вашего репозитория. Вы можете изменить это поведение, внимательно изучив его влияние на безопасность. Чтобы включить или отключить это поведение:
- Перейдите в свой проект Azure DevOps. Выберите Pipelines , найдите свой конвейер и выберите Edit .
- Выберите вкладку Триггеры . После включения триггера запроса на извлечение включите или отключите флажок Сборка запросов на извлечение из форков этого репозитория .
По умолчанию в конвейерах GitHub секреты, связанные с конвейером сборки, не доступны для сборок запросов на вытягивание для вилок. Эти секреты включены по умолчанию в конвейерах GitHub Enterprise Server. Секретов включают:
- Маркер безопасности с доступом к вашему репозиторию GitHub.
- Эти элементы, если ваш конвейер использует их:
Чтобы обойти эту меру предосторожности в конвейерах GitHub, установите флажок Делать секреты доступными для сборок форков . Помните о влиянии этого параметра на безопасность.
Важные соображения безопасности
Пользователь GitHub может создать ответвление вашего репозитория, изменить его и создать запрос на вытягивание, чтобы предложить изменения в вашем репозитории. Этот запрос на перенос может содержать вредоносный код для запуска в рамках вашей запущенной сборки.Такой код может причинить вред следующими способами:
Утечка секретов из вашего трубопровода. Чтобы снизить этот риск, не устанавливайте флажок Делать секреты доступными для сборок форков , если ваш репозиторий является общедоступным или если ненадежные пользователи могут отправлять запросы на вытягивание, которые автоматически запускают сборки. По умолчанию эта опция отключена.
Взломать машину, на которой запущен агент, чтобы украсть код или секреты из других конвейеров. Чтобы смягчить это:
Используйте пул агентов, размещенный в Microsoft, для создания запросов на вытягивание из вилок.Машины с агентами, размещенные на сервере Microsoft, сразу же удаляются после завершения сборки, поэтому их компрометация не оказывает длительного воздействия.
Если вам необходимо использовать собственный агент, не храните никаких секретов и не выполняйте другие сборки и выпуски, использующие секреты на том же агенте, за исключением случаев, когда ваш репозиторий является частным и вы не доверяете создателям запросов на вытягивание.
Соавторы репозитория могут комментировать запрос на вытягивание для ручного запуска конвейера.Вот несколько распространенных причин, по которым вы можете захотеть это сделать:
- Возможно, вы не захотите автоматически создавать запросы на вытягивание от неизвестных пользователей, пока их изменения не будут просмотрены. Вы хотите, чтобы один из членов вашей команды сначала проверил свой код, а затем запустил конвейер. Это обычно используется в качестве меры безопасности при сборке кода из разветвленных репозиториев.
- Возможно, вы захотите запустить дополнительный набор тестов или дополнительную сборку для проверки.
Чтобы включить триггеры комментариев, необходимо выполнить следующие два шага:
- Включите триггеры запроса на вытягивание для конвейера и убедитесь, что вы не исключили целевую ветвь.
- В веб-интерфейсе Azure Pipelines выберите вкладку Триггеры в настройках конвейера. Затем в разделе Проверка запроса на извлечение включите Только триггер сборки для комментариев запроса на извлечение соавторов и сохраните конвейер.
С этими двумя изменениями сборка проверки запроса на вытягивание не будет запускаться автоматически. Только владельцы репозитория и соавторы с разрешением «Запись» могут запускать сборку, комментируя запрос на вытягивание с помощью / AzurePipelines run
или / AzurePipelines run
.
В комментариях к Azure Pipelines можно вводить следующие команды:
Команда | Результат |
---|---|
/ Справка по AzurePipelines | Показать справку по всем поддерживаемым командам. |
/ AzurePipelines help <имя-команды> | Показать справку по указанной команде. |
/ AzurePipelines run | Запустить все конвейеры, связанные с этим репозиторием и триггеры которых не исключают этот запрос на вытягивание. |
/ AzurePipelines run | Запускает указанный конвейер, если его триггеры не исключают этот запрос на вытягивание. |
Примечание
Для краткости вы можете комментировать, используя / azp
вместо / AzurePipelines
.
Важно
Ответы на эти команды появятся в обсуждении запроса на вытягивание, только если ваш конвейер использует приложение Azure Pipelines GitHub.
Устранение неполадок, связанных с триггерами комментариев запроса на вытягивание
Если у вас есть необходимые разрешения для репозитория, но конвейеры не запускаются вашими комментариями, убедитесь, что ваше членство - общедоступное в организации репозитория, или напрямую добавьте себя в качестве соавтора репозитория.Azure Pipelines не может видеть членов частной организации, если они не являются прямыми соавторами или не принадлежат к группе, которая является прямым соавтором. Вы можете изменить свое членство в организации GitHub с частного на публичное здесь (замените Your-Organization
на название своей организации): https://github.com/orgs/Your-Organization/people
.
Касса
Когда запускается конвейер, Azure Pipelines извлекает исходный код из репозитория Azure Repos Git.Вы можете контролировать различные аспекты того, как это происходит.
Предпочитаемая версия Git
Агент Windows поставляется с собственной копией Git.
Если вы предпочитаете предоставить свой собственный Git, а не использовать прилагаемую копию, установите для System.PreferGitFromPath
значение true
.
Этот параметр всегда верен для агентов, отличных от Windows.
Расчетный путь
Если вы извлекаете единый репозиторий, по умолчанию ваш исходный код будет извлечен в каталог с именем s
.Для конвейеров YAML это можно изменить, указав checkout
с путем
. Указанный путь относительно $ (Agent.BuildDirectory)
. Например: если значение пути оформления заказа - mycustompath
и $ (Agent.BuildDirectory)
- C: \ agent \ _work \ 1
, то исходный код будет извлечен в C: \ agent \ _work \ 1 \ mycustompath
.
Если вы используете несколько шагов checkout
и проверяете несколько репозиториев и не указываете явно папку с использованием пути
, каждый репозиторий помещается в подпапку s
, названную в честь репозитория.Например, если вы проверяете два репозитория с именами tools
и code
, исходный код будет извлечен в C: \ agent \ _work \ 1 \ s \ tools
и C: \ agent \ _work \ 1 \ s \ код
.
Обратите внимание, что значение пути оформления заказа не может быть установлено для перехода на любой уровень каталога выше $ (Agent.BuildDirectory)
, поэтому путь \ .. \ anotherpath
приведет к действительному пути оформления заказа (т.е. C: \ agent \ _work \ 1 \ anotherpath
), но значение вроде .. \ invalidpath
не будет (т.е. C: \ agent \ _work \ invalidpath
).
Вы можете настроить параметр path
на этапе Checkout вашего конвейера.
шагов:
- checkout: self # self представляет репо, в котором был найден исходный файл YAML конвейеров.
clean: boolean # очищать ли каждый раз
fetchDepth: number # глубина коммитов для запроса Git на выборку
lfs: boolean # загружать ли файлы Git-LFS
подмодули: true | рекурсивный # установлен в 'true' для одного уровня подмодулей или 'рекурсивный' для получения подмодулей подмодулей
path: string # путь для проверки исходного кода относительно каталога сборки агента (e.г. \ _work \ 1)
persistCredentials: boolean # установлен в 'true', чтобы оставить токен OAuth в конфигурации Git после начальной выборки
Этот параметр не настраивается в классическом редакторе. Ваш исходный код будет извлечен в каталог с именем s
, который соответствует $ (Agent.BuildDirectory)
. Например: если $ (Agent.BuildDirectory)
- это C: \ agent \ _work \ 1
, то исходный код будет извлечен в C: \ agent \ _work \ 1 \ mycustompath
.
Субмодули
Вы можете настроить подмодули
на этапе Checkout вашего конвейера, если вы хотите загружать файлы из подмодулей.
шагов:
- checkout: self # self представляет репо, в котором был найден исходный файл YAML конвейеров.
clean: boolean # очищать ли каждый раз
fetchDepth: number # глубина коммитов для запроса Git на выборку
lfs: boolean # загружать ли файлы Git-LFS
подмодули: true | рекурсивный # установлен в 'true' для одного уровня подмодулей или 'рекурсивный' для получения подмодулей подмодулей
path: string # путь для проверки исходного кода относительно каталога сборки агента (e.г. \ _work \ 1)
persistCredentials: boolean # установлен в 'true', чтобы оставить токен OAuth в конфигурации Git после начальной выборки
Вы можете настроить параметр Submodules в свойствах задачи Get sources в вашем конвейере, если вы хотите загружать файлы из подмодулей.
Конвейер сборки будет проверять ваши подмодули Git, если они:
Альтернатива использованию опции подмодулей Checkout
В некоторых случаях вы не можете использовать опцию субмодулей Checkout .У вас может быть сценарий, в котором для доступа к подмодулям требуется другой набор учетных данных. Это может произойти, например, если ваш основной репозиторий и репозитории подмодулей не хранятся в одной организации Azure DevOps или если ваш токен доступа к заданию не имеет доступа к репозиторию в другом проекте.
Если вы не можете использовать опцию Checkout submodules , то вместо этого вы можете использовать настраиваемый шаг скрипта для выборки подмодулей.
Сначала получите токен персонального доступа (PAT) и добавьте к нему префикс pat:
.Затем закодируйте эту строку с префиксом base64, чтобы создать базовый токен аутентификации.
Наконец, добавьте этот скрипт в свой конвейер:
git -c http.https: // .extraheader = "AUTHORIZATION: Basic " обновление подмодуля --init --recursive
Обязательно замените «
Используйте секретную переменную в своем проекте или конвейере сборки для хранения сгенерированного вами базового токена аутентификации.Используйте эту переменную для заполнения секрета в приведенной выше команде Git.
Примечание
Вопрос: Почему я не могу использовать диспетчер учетных данных Git на агенте? A: Хранение учетных данных подмодуля в диспетчере учетных данных Git, установленном на вашем частном агенте сборки, обычно неэффективно, поскольку диспетчер учетных данных может предложить вам повторно ввести учетные данные при каждом обновлении подмодуля. Это нежелательно во время автоматизированных сборок, когда взаимодействие с пользователем невозможно.
Мелкий участок
Вы можете ограничить время загрузки в истории. Фактически это приводит к git fetch --depth = n
. Если ваш репозиторий большой, этот вариант может сделать ваш конвейер сборки более эффективным. Ваш репозиторий может быть большим, если он используется в течение длительного времени и имеет значительную историю. Он также может быть большим, если вы добавляли, а затем удаляли большие файлы.
Вы можете настроить параметр fetchDepth
на этапе Checkout вашего конвейера.
шагов:
- checkout: self # self представляет репо, в котором был найден исходный файл YAML конвейеров.
clean: boolean # очищать ли каждый раз
fetchDepth: number # глубина коммитов для запроса Git на выборку
lfs: boolean # загружать ли файлы Git-LFS
подмодули: true | рекурсивный # установлен в 'true' для одного уровня подмодулей или 'рекурсивный' для получения подмодулей подмодулей
path: string # путь для проверки исходного кода относительно каталога сборки агента (e.г. \ _work \ 1)
persistCredentials: boolean # установлен в 'true', чтобы оставить токен OAuth в конфигурации Git после начальной выборки
Вы можете настроить параметр Shallow fetch в свойствах задачи Get sources в конвейере.
В этих случаях этот параметр может помочь вам сэкономить ресурсы сети и хранилища. Это также может сэкономить время. Причина, по которой это не всегда экономит время, заключается в том, что в некоторых ситуациях серверу может потребоваться потратить время на вычисление коммитов для загрузки для указанной вами глубины.
Примечание
При запуске конвейера создаваемая ветвь преобразуется в идентификатор фиксации. Затем агент выбирает ветку и проверяет желаемую фиксацию. Есть небольшое окно между тем, когда ветвь разрешается в идентификатор фиксации и когда агент выполняет проверку. Если ветка обновляется быстро и вы устанавливаете очень маленькое значение для неглубокой выборки, фиксация может не существовать, когда агент пытается чтобы проверить это. В этом случае увеличьте настройку глубины неглубокой выборки.
Не синхронизировать источники
Вы можете пропустить получение новых коммитов. Эта опция может быть полезна в случаях, когда вы хотите:
Git init, config и fetch, используя ваши собственные параметры.
Используйте конвейер сборки, чтобы просто запустить автоматизацию (например, некоторые сценарии), которая не зависит от кода в системе управления версиями.
Вы можете настроить Не синхронизировать источники на этапе Checkout вашего конвейера, установив checkout: none
.
шагов:
- оформление заказа: нет # Не синхронизировать источники
Выберите параметр Не синхронизировать источники в свойствах задачи Получить источники в конвейере.
Примечание
При использовании этого параметра агент также пропускает выполнение команд Git, очищающих репозиторий.
Чистая сборка
Вы можете выполнять различные формы очистки рабочего каталога вашего локального агента перед запуском сборки.
В общем, для повышения производительности ваших локальных агентов не очищайте репозиторий. В этом случае, чтобы получить максимальную производительность, убедитесь, что вы также строите поэтапно, отключив любую опцию Clean задачи или инструмента, которые вы используете для сборки.
Если вам действительно нужно очистить репо (например, чтобы избежать проблем, вызванных остаточными файлами из предыдущей сборки), ваши варианты приведены ниже.
Примечание
Очистка неэффективна, если вы используете агент, размещенный на сервере Microsoft, потому что каждый раз вы будете получать новый агент.
Вы можете настроить параметр clean
на этапе Checkout вашего конвейера.
шагов:
- checkout: self # self представляет репо, в котором был найден исходный файл YAML конвейеров.
clean: boolean # очищать ли каждый раз
fetchDepth: number # глубина коммитов для запроса Git на выборку
lfs: boolean # загружать ли файлы Git-LFS
подмодули: true | рекурсивный # установлен в 'true' для одного уровня подмодулей или 'рекурсивный' для получения подмодулей подмодулей
path: string # путь для проверки исходного кода относительно каталога сборки агента (e.г. \ _work \ 1)
persistCredentials: boolean # установлен в 'true', чтобы оставить токен OAuth в конфигурации Git после начальной выборки
Если для параметра clean
установлено значение true
, конвейер сборки выполняет отмену любых изменений в $ (Build.SourcesDirectory)
. Более конкретно, следующие команды Git выполняются до выборки источника.
git clean -ffdx
git reset --hard HEAD
Для получения дополнительных опций вы можете настроить рабочее пространство для задания.
вакансий:
- job: string # название работы, A-Z, a-z, 0-9 и подчеркивание
...
Рабочее пространство:
чистый: выходы | ресурсы | all # что убрать перед запуском задания
Это дает следующие чистые параметры.
выводит : та же операция, что и параметр очистки, описанный в предыдущей задаче проверки, плюс: удаляет и воссоздает
$ (Build.BinariesDirectory)
. Обратите внимание, что$ (Build.ArtifactStagingDirectory),
и$ (Common.TestResultsDirectory)
всегда удаляются и воссоздаются перед каждой сборкой независимо от любого из этих параметров.ресурсов : удаляет и воссоздает
$ (Build.SourcesDirectory)
. Это приводит к инициализации нового локального репозитория Git для каждой сборки.все : удаляет и воссоздает
$ (Agent.BuildDirectory)
. Это приводит к инициализации нового локального репозитория Git для каждой сборки.
Выберите параметр Очистить в свойствах задачи Получить источники в конвейере и выберите один из следующих параметров.
Источники : конвейер сборки выполняет отмену любых изменений в
$ (Build.SourcesDirectory)
. Более конкретно, следующие команды Git выполняются до выборки источника.git clean -ffdx git reset --hard HEAD
Источники и каталог вывода : та же операция, что и вариант Источники выше, плюс: удаляет и воссоздает
$ (Build.BinariesDirectory)
.Обратите внимание, что$ (Build.ArtifactStagingDirectory)
и$ (Common.TestResultsDirectory)
всегда удаляются и воссоздаются перед каждой сборкой независимо от любого из этих параметров.Каталог исходных файлов : удаляет и воссоздает
$ (Build.SourcesDirectory)
. Это приводит к инициализации нового локального репозитория Git для каждой сборки.Все каталоги сборки : удаляет и воссоздает
$ (Agent.BuildDirectory)
. Это приводит к инициализации нового локального репозитория Git для каждой сборки.
Источники этикеток
Вы можете пометить файлы исходного кода, чтобы ваша группа могла легко определить, какая версия каждого файла включена в завершенную сборку. У вас также есть возможность указать, следует ли помечать исходный код для всех сборок или только для успешных сборок.
В настоящее время вы не можете настроить этот параметр в YAML, но можете в классическом редакторе.При редактировании конвейера YAML вы можете получить доступ к классическому редактору, выбрав Triggers в меню редактора YAML.
В классическом редакторе выберите YAML , выберите задачу Получить источники , а затем настройте там нужные свойства.
Вы можете настроить параметр Источники тегов в свойствах задачи Получить источники в вашем конвейере.
В формате тега вы можете использовать определяемые пользователем и предварительно определенные переменные, которые имеют область действия «Все."Например:
$ (Build.DefinitionName) _ $ (Build.DefinitionVersion) _ $ (Build.BuildId) _ $ (Build.BuildNumber) _ $ (Моя.Переменная)
Первые четыре переменные предопределены. Моя.Переменная
может быть определена вами на вкладке переменных.
Конвейер сборки помечает ваши источники тегом Git.
Некоторые переменные сборки могут давать значение, не являющееся допустимой меткой. Например, такие переменные, как $ (Build.RequestedFor)
и $ (Build.DefinitionName)
может содержать пробелы. Если значение содержит пробелы, тег не создается.
После того, как источники помечаются конвейером сборки, в завершенную сборку автоматически добавляется артефакт с Git ref refs / tags / {tag}
. Это дает вашей команде дополнительную отслеживаемость и более удобный способ перехода от сборки к созданному коду. Тег считается артефактом сборки, поскольку он создается сборкой. Когда сборка удаляется вручную или с помощью политики хранения, тег также удаляется.
Предопределенные переменные
Когда вы создаете репозиторий GitHub, большинство предопределенных переменных становятся доступными для ваших заданий. Однако, поскольку Azure Pipelines не распознает личность пользователя, выполняющего обновление в GitHub, для следующих переменных устанавливается идентификатор системы, а не идентификатор пользователя:
-
Сборка.Запрошено для
-
Build.RequestedForId
-
Сборка.RequestedForEmail
Обновления статуса
Существует два типа статусов, которые Azure Pipelines отправляет обратно на GitHub: базовые статусы и GitHub Check Runs.Функциональность GitHub Checks доступна только в приложениях GitHub.
Статусы конвейера отображаются в разных местах пользовательского интерфейса GitHub.
- Для PR они отображаются на вкладке PR-бесед.
- Для отдельных коммитов они отображаются при наведении курсора на отметку состояния после времени фиксации на вкладке коммитов репо.
Подключения PAT или OAuth GitHub
Для конвейеров, использующих подключения PAT или OAuth GitHub, статусы отправляются обратно в фиксацию / PR, которая инициировала запуск.API статуса GitHub используется для публикации таких обновлений. Эти статусы содержат ограниченную информацию: статус конвейера (сбой, успех), URL-адрес для обратной ссылки на конвейер сборки и краткое описание статуса.
Статусы для подключений PAT или OAuth GitHub отправляются только на уровне выполнения. Другими словами, вы можете обновить один статус для всего цикла. Если у вас есть несколько заданий в прогоне, вы не можете публиковать отдельный статус для каждого задания. Однако несколько конвейеров могут публиковать разные статусы в одной и той же фиксации.
Проверки GitHub
Для конвейеров, настроенных с помощью приложения Azure Pipelines GitHub), статус отправляется обратно в форме проверок GitHub. GitHub Checks позволяет отправлять подробную информацию о состоянии конвейера, а также о тестах, покрытии кода и ошибках. GitHub Checks API можно найти здесь.
Для каждого конвейера, использующего приложение GitHub, чеки отправляются обратно для всего выполнения, а также для каждого задания в этом запуске.
GitHub допускает три варианта, когда один или несколько проверочных прогонов не выполняются для PR / фиксации.Вы можете выбрать «повторно запустить» отдельную проверку, повторно запустить все неудавшиеся проверки для этого PR / фиксации или повторно запустить все проверки, независимо от того, были ли они успешными изначально или нет.
Если щелкнуть ссылку «Повторный запуск» рядом с именем «Проверить запуск», Azure Pipelines попытается повторить запуск, который сгенерировал этот запуск. Результирующий запуск будет иметь тот же номер запуска и будет использовать ту же версию исходного кода, конфигурации и файла YAML, что и исходная сборка. Только те задания, которые не удалось выполнить при первоначальном запуске, и все зависимые нижестоящие задания будут запущены снова.Нажатие на ссылку «Повторно запустить все неудачные проверки» даст тот же эффект. Это то же поведение, что и при нажатии кнопки «Повторить попытку» в пользовательском интерфейсе Azure Pipelines. Нажатие на «Повторно запустить все проверки» приведет к новому запуску с новым номером запуска и внесет изменения в конфигурацию или файл YAML.
FAQ
Проблемы, связанные с интеграцией GitHub, делятся на следующие категории:
- Типы подключения: Я не уверен, какой тип подключения использую для подключения моего конвейера к GitHub.
- Неудачные триггеры: Мой конвейер не запускается, когда я отправляю обновление в репо.
- Ошибка проверки: Мой конвейер запускается, но на этапе проверки произошел сбой.
- Неправильная версия: Мой конвейер работает, но использует неожиданную версию исходного кода / YAML.
- Отсутствуют обновления статуса: Мои PR на GitHub заблокированы, поскольку Azure Pipelines не сообщает об обновлении статуса.
Типы подключения
Как узнать тип подключения GitHub, который я использую для своего конвейера, для устранения неполадок триггеров?
Устранение проблем с триггерами во многом зависит от типа соединения GitHub, которое вы используете в своем конвейере.Есть два способа определить тип подключения - из GitHub и из Azure Pipelines.
Из GitHub: если репо настроено для использования приложения GitHub, то статусы PR и коммитов будут Check Runs. Если в репозитории Azure Pipelines настроены подключения OAuth или PAT, статусы будут в «старом» стиле. Быстрый способ определить, являются ли статусы проверочными прогонами или простыми статусами, - взглянуть на вкладку «беседа» в PR GitHub.
- Если ссылка «Подробности» перенаправляет на вкладку «Проверки», это означает выполнение проверки и репо использует приложение.
- Если ссылка «Подробности» перенаправляет на конвейер Azure DevOps, тогда статус является статусом «старого стиля», и репозиторий не использует приложение.
Из Azure Pipelines: вы также можете определить тип подключения, проверив конвейер в пользовательском интерфейсе Azure Pipelines. Откройте редактор конвейера. Выберите Триггеры , чтобы открыть классический редактор конвейера. Затем выберите вкладку YAML , а затем шаг Получить источники . Вы увидите баннер Авторизовано с использованием соединения: , указывающий на соединение службы, которое использовалось для интеграции конвейера с GitHub.Название сервисного подключения представляет собой гиперссылку. Выберите его, чтобы перейти к свойствам подключения службы. В свойствах служебного подключения будет указан тип используемого подключения:
- Приложение Azure Pipelines указывает на подключение приложения GitHub
- oauth указывает на соединение OAuth
- personalaccesstoken указывает на аутентификацию PAT
Как переключить конвейер на использование приложения GitHub вместо OAuth?
Использование приложения GitHub вместо соединения OAuth или PAT - это рекомендуемая интеграция между GitHub и Azure Pipelines.Чтобы переключиться на приложение GitHub, выполните следующие действия:
- Перейдите сюда и установите приложение в организации GitHub вашего репозитория.
- Во время установки вы будете перенаправлены в Azure DevOps, чтобы выбрать организацию и проект Azure DevOps. Выберите организацию и проект, содержащие классический конвейер сборки, для которого вы хотите использовать приложение. Этот выбор связывает установку приложения GitHub с вашей организацией Azure DevOps. Если вы выбрали неправильный вариант, вы можете посетить эту страницу, чтобы удалить приложение GitHub из своей организации GitHub и начать заново.
- На следующей открывшейся странице вам не нужно продолжать создание нового конвейера.
- Измените конвейер, посетив страницу конвейеров (например, https://dev.azure.com/YOUR_ORG_NAME/YOUR_PROJECT_NAME/_build), выбрав свой конвейер и нажав «Изменить».
- Если это конвейер YAML, выберите меню Триггеры , чтобы открыть классический редактор.
- Выберите в конвейере шаг «Получить источники».
- На зеленой полосе с текстом «Авторизовано с использованием подключения» нажмите «Изменить» и выберите подключение приложения GitHub с тем же именем, что и организация GitHub, в которую вы установили приложение.
- На панели инструментов выберите «Сохранить и поставить в очередь», а затем «Сохранить и поставить в очередь». Щелкните ссылку на запуск конвейера, который был поставлен в очередь, чтобы убедиться, что он успешно завершен.
- Создайте (или закройте и снова откройте) запрос на вытягивание в репозитории GitHub, чтобы убедиться, что сборка успешно поставлена в очередь в разделе «Проверки».
Почему я не могу выбрать репозиторий GitHub в Azure Pipelines?
В зависимости от типа аутентификации и владельца репозитория требуются определенные разрешения.
Когда я выбираю репозиторий во время создания конвейера, я получаю сообщение об ошибке «Репозиторий {repo-name} используется с приложением Azure Pipelines GitHub в другой организации Azure DevOps».
Это означает, что ваш репозиторий уже связан с конвейером в другой организации. События CI и PR из этого репозитория не будут работать, поскольку они будут доставлены в другую организацию. Вот шаги, которые вы должны предпринять, чтобы удалить сопоставление с другой организацией, прежде чем приступить к созданию конвейера.
Откройте запрос на перенос в репозитории GitHub и сделайте комментарий
/ azp, где
. Это сообщает об организации Azure DevOps, с которой сопоставлен репозиторий.Чтобы изменить сопоставление, удалите приложение из организации GitHub и переустановите его. При повторной установке убедитесь, что выбрали правильную организацию при перенаправлении в Azure DevOps.
Неисправные триггеры
Я только что создал новый конвейер YAML с триггерами CI / PR, но конвейер не запускается.
Выполните каждый из следующих шагов, чтобы устранить неисправные триггеры:
Переопределяются ли триггеры YAML CI или PR настройками конвейера в пользовательском интерфейсе? При редактировании конвейера выберите ... , а затем Триггеры .
Проверьте Переопределить триггер YAML отсюда. Настройка для типов триггера ( Непрерывная интеграция или Проверка запроса на извлечение ), доступных для вашего репо.
Используете ли вы соединение с приложением GitHub для подключения конвейера к GitHub? См. Типы подключения, чтобы определить тип вашего подключения. Если вы используете подключение к приложению GitHub, выполните следующие действия:
Правильно ли настроено сопоставление между GitHub и Azure DevOps? Откройте запрос на перенос в репозитории GitHub и сделайте комментарий
/ azp, где
. Это сообщает об организации Azure DevOps, с которой сопоставлен репозиторий.Если ни одна организация не настроена для создания этого репозитория с помощью приложения, перейдите на страницу
https://github.com/
и завершите настройку приложения./ /settings/installations Если сообщается о другой организации Azure DevOps, значит, кто-то уже установил конвейер для этого репозитория в другой организации. В настоящее время у нас есть ограничение: мы можем сопоставить репозиторий GitHub только с одной организацией DevOps.Только конвейеры в первой организации Azure DevOps могут запускаться автоматически. Чтобы изменить сопоставление, удалите приложение из организации GitHub и переустановите его. При повторной установке убедитесь, что выбрали правильную организацию при перенаправлении в Azure DevOps.
Используете ли вы OAuth или PAT для подключения конвейера к GitHub? См. Типы подключения, чтобы определить тип вашего подключения. Если вы используете соединение GitHub, выполните следующие действия:
Подключения OAuth и PAT полагаются на веб-перехватчики для передачи обновлений в Azure Pipelines.В GitHub перейдите к настройкам вашего репозитория, а затем к Webhooks. Убедитесь, что веб-перехватчики существуют. Обычно вы должны видеть три веб-перехватчика - push, pull_request и issue_comment. Если вы этого не сделаете, вы должны повторно создать подключение к службе и обновить конвейер, чтобы использовать новое подключение к службе.
Выберите каждый из веб-перехватчиков в GitHub и убедитесь, что полезная нагрузка, соответствующая фиксации пользователя, существует и была успешно отправлена в Azure DevOps. Здесь вы можете увидеть ошибку, если о событии не удалось передать в Azure DevOps.
GitHub может регулировать трафик из Azure DevOps. Когда Azure Pipelines получает уведомление от GitHub, он пытается связаться с GitHub и получить дополнительные сведения о репозитории и файле YAML. Если у вас есть репо с большим количеством обновлений и запросов на вытягивание, этот вызов может завершиться ошибкой из-за такого регулирования. В этом случае посмотрите, можно ли снизить частоту сборок с помощью пакетной обработки или более строгих фильтров путей / ветвей.
Ваш конвейер приостановлен или отключен? Откройте редактор конвейера, а затем выберите Настройки для проверки.Если ваш конвейер приостановлен или отключен, триггеры не работают.
Вы обновили файл YAML в правильной ветке? Если вы отправляете обновление в ветку, то файл YAML в той же ветке управляет поведением CI. Если вы отправляете обновление в исходную ветвь, то YAML-файл, полученный в результате слияния исходной ветки с целевой ветвью, управляет поведением PR. Убедитесь, что файл YAML в правильной ветке имеет необходимую конфигурацию CI или PR.
Правильно ли настроили триггер? Когда вы определяете триггер YAML, вы можете указать предложения include и exclude для ветвей, тегов и путей.Убедитесь, что предложение include соответствует деталям вашего коммита и что предложение exclude не исключает их. Проверьте синтаксис триггеров и убедитесь, что он точен.
Использовали ли вы переменные при определении триггера или путей? Это не поддерживается.
Вы использовали шаблоны для своего файла YAML? Если это так, убедитесь, что ваши триггеры определены в основном файле YAML. Триггеры, определенные в файлах шаблонов, не поддерживаются.
Вы исключили ветви или пути, на которые вы отправили свои изменения? Протестируйте, нажав изменение включенного пути во включенной ветке.Обратите внимание, что пути в триггерах чувствительны к регистру. При указании путей в триггерах убедитесь, что вы используете тот же регистр, что и для реальных папок.
Есть ли в фильтрах пути подстановочные знаки? Узнайте об ограничениях использования подстановочных знаков в ваших путях, как описано в этой статье.
Вы только что запихнули новую ветку? Если это так, новая ветка может не начать новый запуск. См. Раздел «Поведение триггеров при создании новых веток».
Мои триггеры CI или PR работают нормально.Но теперь они перестали работать.
Сначала выполните действия по устранению неполадок, указанные в предыдущем вопросе. Затем выполните следующие дополнительные действия:
Есть ли у вас конфликты слияния в вашем PR? Для PR, который не запускал конвейер, откройте его и проверьте, есть ли у него конфликт слияния. Разрешите конфликт слияния.
Возникли задержки в обработке событий push или PR? Обычно вы можете проверить это, посмотрев, является ли проблема специфической для одного конвейера или является общей для всех конвейеров или репозиториев в вашем проекте.Если push-обновление или PR-обновление любого из репозиториев демонстрирует этот симптом, у нас могут быть задержки в обработке событий обновления. Проверьте, не происходит ли сбой в обслуживании на нашей странице статуса. Если на странице состояния отображается проблема, значит, наша команда уже начала работать над ней. Часто проверяйте страницу на наличие обновлений по проблеме.
Я не хочу, чтобы пользователи переопределяли список ветвей для триггеров при обновлении файла YAML. Как я могу это сделать?
Пользователи с разрешениями на внесение кода могут обновлять файл YAML и включать / исключать дополнительные ветки.В результате пользователи могут включать свою собственную функцию или пользовательскую ветвь в свой YAML-файл и отправлять это обновление в функцию или пользовательскую ветвь. Это может привести к запуску конвейера для всех обновлений этой ветви. Если вы хотите предотвратить такое поведение, вы можете:
- Измените конвейер в пользовательском интерфейсе Azure Pipelines.
- Перейдите в меню Триггеры .
- Выберите Отсюда переопределите триггер непрерывной интеграции YAML .
- Укажите ветви, которые нужно включить или исключить для триггера.
При выполнении этих шагов любые триггеры CI, указанные в файле YAML, игнорируются.
Неудача при оформлении заказа
Я вижу следующую ошибку в файле журнала на этапе проверки. Как мне это исправить?
удаленный: репозиторий не найден.
фатальный: репозиторий не найден
Это могло быть вызвано отключением GitHub. Попробуйте получить доступ к репозиторию в GitHub и убедитесь, что у вас есть такая возможность.
Неправильная версия
В конвейере используется неправильная версия файла YAML.Это почему?
- Для триггеров CI файл YAML, который находится в ветке, которую вы нажимаете, оценивается, чтобы определить, следует ли запускать сборку CI.
- Для триггеров PR файл YAML, полученный в результате слияния исходной и целевой ветвей PR, оценивается, чтобы определить, следует ли запускать сборку PR.
Отсутствуют обновления статуса
Мой PR в GitHub заблокирован, поскольку Azure Pipelines не обновлял статус.
Это может быть временная ошибка, из-за которой Azure DevOps не может взаимодействовать с GitHub.Повторите проверку в GitHub, если вы используете приложение GitHub. Или сделайте тривиальное обновление PR, чтобы увидеть, можно ли решить проблему.
Статьи по теме
Контроль версий - фабрика данных Azure
- Читать 15 минут
В этой статье
ОТНОСИТСЯ К: Фабрика данных Azure Azure Synapse Analytics
По умолчанию пользовательский интерфейс (UX) фабрики данных Azure создается непосредственно для службы фабрики данных.Этот опыт имеет следующие ограничения:
- Служба фабрики данных не включает репозиторий для хранения объектов JSON для ваших изменений. Единственный способ сохранить изменения - нажать кнопку « Опубликовать все» , и все изменения публикуются непосредственно в службе фабрики данных.
- Служба фабрики данных не оптимизирована для совместной работы и контроля версий.
- Шаблон Azure Resource Manager, необходимый для развертывания самой фабрики данных, не включен.
Чтобы обеспечить лучший опыт разработки, фабрика данных Azure позволяет настроить репозиторий Git с помощью репозитория Azure или GitHub. Git - это система контроля версий, которая упрощает отслеживание изменений и совместную работу. В этой статье будет описано, как настраивать и работать в репозитории git, а также выделены лучшие практики и руководство по устранению неполадок.
Примечание
Для Azure Government Cloud доступен только GitHub Enterprise Server .
Чтобы узнать больше о том, как фабрика данных Azure интегрируется с Git, просмотрите 15-минутное обучающее видео ниже:
Преимущества интеграции с Git
Ниже приведен список некоторых преимуществ, которые интеграция git дает при разработке:
- Управление исходным кодом: Поскольку рабочие нагрузки вашей фабрики данных становятся критически важными, вы можете интегрировать свою фабрику с Git, чтобы использовать несколько преимуществ системы управления версиями, например:
- Возможность отслеживать / проверять изменения.
- Возможность отменить изменения, внесшие ошибки.
- Частичное сохранение: При разработке с использованием службы фабрики данных нельзя сохранить изменения в виде черновика, и все публикации должны пройти проверку фабрики данных. Независимо от того, не завершены ли ваши конвейеры или вы просто не хотите терять изменения в случае сбоя компьютера, интеграция с git позволяет вносить инкрементные изменения ресурсов фабрики данных независимо от того, в каком состоянии они находятся. Настройка репозитория git позволяет сохранять изменения, позволяя вы публикуете только после того, как проверили свои изменения к своему удовлетворению.
- Сотрудничество и контроль: Если у вас есть несколько членов команды, работающих на одной фабрике, вы можете позволить своим товарищам по команде сотрудничать друг с другом с помощью процесса проверки кода. Вы также можете настроить свою фабрику так, чтобы не все участники имели одинаковые права. Некоторым членам команды может быть разрешено вносить изменения только через Git, и только определенные люди в команде могут публиковать изменения в фабрике.
- Улучшенный CI / CD: Если вы развертываете в нескольких средах с непрерывным процессом доставки, интеграция с git упрощает определенные действия.Некоторые из этих действий включают:
- Настройте конвейер выпуска так, чтобы он запускался автоматически при любых изменениях, внесенных в фабрику разработчиков.
- Настройте свойства на заводе, которые доступны в качестве параметров в шаблоне диспетчера ресурсов. Может быть полезно сохранить в качестве параметров только необходимый набор свойств, а все остальное жестко запрограммировать.
- Лучшая производительность: Средняя фабрика с интеграцией git загружается в 10 раз быстрее, чем одна авторинговая служба фабрики данных.Это улучшение производительности связано с тем, что ресурсы загружаются через Git.
Примечание
Создание непосредственно с помощью службы фабрики данных отключено в пользовательском интерфейсе фабрики данных Azure при настройке репозитория Git. Изменения, внесенные с помощью PowerShell или SDK, публикуются непосредственно в службе фабрики данных и не вводятся в Git.
Подключиться к репозиторию Git
Существует четыре различных способа подключения репозитория Git к вашей фабрике данных как для Azure Repos, так и для GitHub.После подключения к репозиторию Git вы можете просматривать и управлять своей конфигурацией в концентраторе управления в разделе Конфигурация Git в разделе Source control
Метод настройки 1: Домашняя страница
На домашней странице фабрики данных Azure выберите Настроить репозиторий кода вверху.
Метод конфигурации 2: холст для разработки
На холсте разработки UX фабрики данных Azure выберите раскрывающееся меню Фабрики данных , а затем выберите Настроить репозиторий кода .
Метод настройки 3: Центр управления
Перейдите к концентратору управления в ADF UX. Выберите Git configuration в разделе Source control . Если у вас нет подключенного репозитория, нажмите Настроить .
Метод конфигурации 4: Во время создания фабрики
При создании новой фабрики данных на портале Azure вы можете настроить информацию о репозитории Git на вкладке Конфигурация Git .
Примечание
При настройке git на портале Azure такие параметры, как имя проекта и имя репо, необходимо вводить вручную, а не в раскрывающемся списке.
Автор с интеграцией Azure Repos Git
Визуальная разработка с интеграцией Azure Repos с Git поддерживает управление версиями и совместную работу над конвейерами фабрики данных. Вы можете связать фабрику данных с репозиторием организации Azure Repos Git для управления версиями, совместной работы, управления версиями и т. Д.Одна организация Azure Repos Git может иметь несколько репозиториев, но репозиторий Azure Repos Git может быть связан только с одной фабрикой данных. Если у вас нет организации или репозитория Azure Repos, следуйте этим инструкциям, чтобы создать свои ресурсы.
Примечание
Вы можете хранить файлы сценариев и данных в репозитории Azure Repos Git. Однако вам необходимо вручную загрузить файлы в хранилище Azure. Конвейер фабрики данных не передает автоматически скрипт или файлы данных, хранящиеся в репозитории Azure Repos Git, в хранилище Azure.
Настройки Azure Repos
На панели конфигурации отображаются следующие параметры репозитория кода Azure Repos:
Настройка | Описание | Значение |
---|---|---|
Тип репозитория | Тип репозитория кода Azure Repos. | Azure DevOps Git или GitHub |
Azure Active Directory | Имя вашего клиента Azure AD. | <ваше имя арендатора> |
Организация Azure Repos | Название вашей организации Azure Repos. Вы можете найти название своей организации в Azure Repos по адресу https: // {название организации} .visualstudio.com . Вы можете войти в свою организацию Azure Repos, чтобы получить доступ к своему профилю Visual Studio и просмотреть свои репозитории и проекты. | <название вашей организации> |
Название проекта | Имя вашего проекта Azure Repos.Вы можете найти название своего проекта Azure Repos по адресу https: // {название организации} .visualstudio.com / {название проекта} . | <название вашего проекта Azure Repos> |
Имя репозитория | Имя репозитория кода Azure Repos. Проекты Azure Repos содержат репозитории Git для управления исходным кодом по мере роста проекта. Вы можете создать новый репозиторий или использовать существующий репозиторий, который уже находится в вашем проекте. | <имя репозитория вашего кода Azure Repos> |
Филиал сотрудничества | Ваша ветка совместной работы Azure Repos, используемая для публикации.По умолчанию это основной . Измените этот параметр, если вы хотите публиковать ресурсы из другой ветки. | <название вашего филиала> |
Корневая папка | Ваша корневая папка в ветке совместной работы Azure Repos. | <имя корневой папки> |
Импорт существующих ресурсов фабрики данных в репозиторий | Указывает, следует ли импортировать существующие ресурсы фабрики данных из холста разработки UX в репозиторий Azure Repos Git.Установите флажок, чтобы импортировать ресурсы фабрики данных в связанный репозиторий Git в формате JSON. Это действие экспортирует каждый ресурс отдельно (то есть связанные службы и наборы данных экспортируются в отдельные JSON). Если этот флажок не установлен, существующие ресурсы не импортируются. | Выбрано (по умолчанию) |
Филиал для импорта ресурсов в | Указывает, в какой ветви находятся ресурсы фабрики данных (конвейеры, наборы данных, связанные службы и т. Д.).) импортируются. Вы можете импортировать ресурсы в одну из следующих веток: a. Сотрудничество b. Создать новый c. Использовать существующий |
Примечание
Если вы используете Microsoft Edge и не видите никаких значений в раскрывающемся списке учетной записи Azure DevOps, добавьте https: //*.visualstudio.com в список надежных сайтов.
Используйте другой клиент Azure Active Directory
Репозиторий Azure Repos Git может находиться в другом клиенте Azure Active Directory. Чтобы указать другой клиент Azure AD, у вас должны быть разрешения администратора для подписки Azure, которую вы используете.Для получения дополнительной информации см. Изменение администратора подписки
.Важно
Чтобы подключиться к другому каталогу Azure Active Directory, вошедший в систему пользователь должен быть частью этого активного каталога.
Используйте свою личную учетную запись Microsoft
Чтобы использовать личную учетную запись Microsoft для интеграции с Git, вы можете связать свое личное репозиторий Azure с Active Directory вашей организации.
Добавьте свою личную учетную запись Microsoft в Active Directory своей организации в качестве гостя.Дополнительные сведения см. В разделе Добавление пользователей для совместной работы Azure Active Directory B2B на портале Azure.
Войдите на портал Azure, используя свою личную учетную запись Microsoft. Затем переключитесь на Active Directory вашей организации.
Перейдите в раздел Azure DevOps, где вы увидите свое личное репо. Выберите репо и подключитесь к Active Directory.
После этих шагов настройки ваше личное репозиторий станет доступным при настройке интеграции Git в пользовательском интерфейсе фабрики данных.
Дополнительные сведения о подключении Azure Repos к Active Directory вашей организации см. В разделе Подключение организации Azure DevOps к Azure Active Directory.
Автор с интеграцией GitHub
Визуальное создание с интеграцией GitHub поддерживает управление версиями и совместную работу над конвейерами фабрики данных. Вы можете связать фабрику данных с репозиторием учетной записи GitHub для управления версиями, совместной работы и управления версиями. Одна учетная запись GitHub может иметь несколько репозиториев, но репозиторий GitHub может быть связан только с одной фабрикой данных.Если у вас нет учетной записи или репозитория GitHub, следуйте этим инструкциям, чтобы создать свои ресурсы.
Интеграция GitHub с фабрикой данных поддерживает как общедоступный GitHub (то есть https://github.com), так и GitHub Enterprise. Вы можете использовать как общедоступные, так и частные репозитории GitHub с фабрикой данных, если у вас есть права на чтение и запись в репозиторий в GitHub.
Для настройки репозитория GitHub у вас должны быть права администратора для подписки Azure, которую вы используете.
Настройки GitHub
На панели конфигурации отображаются следующие настройки репозитория GitHub:
Настройка | Описание | Значение |
---|---|---|
Тип репозитория | Тип репозитория кода Azure Repos. | GitHub |
Использовать GitHub Enterprise | Установите флажок для выбора GitHub Enterprise | не выбран (по умолчанию) |
GitHub Enterprise URL | Корневой URL-адрес GitHub Enterprise (для локального сервера GitHub Enterprise должен быть HTTPS).Например: https://github.mydomain.com . Требуется, только если выбрано Использовать GitHub Enterprise | <корпоративный URL-адрес GitHub> |
Аккаунт GitHub | Имя вашей учетной записи GitHub. Это имя можно найти по адресу https://github.com/{account name} / {repository name}. При переходе на эту страницу вам будет предложено ввести учетные данные GitHub OAuth в свою учетную запись GitHub. | <имя вашей учетной записи GitHub> |
Имя репозитория | Имя репозитория вашего кода GitHub.Учетные записи GitHub содержат репозитории Git для управления вашим исходным кодом. Вы можете создать новый репозиторий или использовать существующий репозиторий, который уже находится в вашей учетной записи. | <имя вашего репозитория> |
Филиал сотрудничества | Ваша ветка совместной работы GitHub, используемая для публикации. По умолчанию это main. Измените этот параметр, если вы хотите публиковать ресурсы из другой ветки. | <ваша ветвь сотрудничества> |
Корневая папка | Ваша корневая папка в ветке совместной работы GitHub. | <имя корневой папки> |
Импорт существующих ресурсов фабрики данных в репозиторий | Указывает, следует ли импортировать существующие ресурсы фабрики данных из холста разработки UX в репозиторий GitHub. Установите флажок, чтобы импортировать ресурсы фабрики данных в связанный репозиторий Git в формате JSON. Это действие экспортирует каждый ресурс отдельно (то есть связанные службы и наборы данных экспортируются в отдельные JSON).Если этот флажок не установлен, существующие ресурсы не импортируются. | Выбрано (по умолчанию) |
Филиал для импорта ресурсов в | Указывает, в какую ветвь импортируются ресурсы фабрики данных (конвейеры, наборы данных, связанные службы и т. Д.). Вы можете импортировать ресурсы в одну из следующих веток: a. Сотрудничество b. Создать новый c. Использовать существующий |
GitHub организаций
Для подключения к организации GitHub требуется, чтобы организация предоставила разрешение фабрике данных Azure.Пользователь с разрешениями ADMIN в организации должен выполнить следующие шаги, чтобы разрешить фабрике данных подключиться.
Первое подключение к GitHub в фабрике данных Azure
Если вы впервые подключаетесь к GitHub из фабрики данных Azure, выполните следующие действия, чтобы подключиться к организации GitHub.
- На панели конфигурации Git введите название организации в поле Учетная запись GitHub . Появится запрос на вход в GitHub.
- Войдите, используя свои учетные данные.
- Вам будет предложено авторизовать фабрику данных Azure как приложение под названием AzureDataFactory . На этом экране вы увидите возможность предоставить ADF разрешение на доступ к организации. Если вы не видите возможность предоставить разрешение, попросите администратора вручную предоставить разрешение через GitHub.
После выполнения этих шагов ваша фабрика сможет подключаться как к общедоступным, так и к частным репозиториям в вашей организации. Если вам не удается подключиться, попробуйте очистить кеш браузера и повторите попытку.
Уже подключен к GitHub через личный кабинет
Если вы уже подключились к GitHub и предоставили разрешение на доступ только к личной учетной записи, выполните следующие действия, чтобы предоставить разрешения организации.
Перейдите на GitHub и откройте Настройки .
Выберите приложения . На вкладке Авторизованные приложения OAuth вы должны увидеть AzureDataFactory .
Выберите приложение и предоставьте приложению доступ к вашей организации.
После выполнения этих шагов ваша фабрика сможет подключаться как к общедоступным, так и к частным репозиториям в вашей организации.
Известные ограничения GitHub
Вы можете хранить файлы сценариев и данных в репозитории GitHub. Однако вам необходимо вручную загрузить файлы в хранилище Azure. Конвейер фабрики данных не отправляет автоматически скрипты или файлы данных, хранящиеся в репозитории GitHub, в хранилище Azure.
GitHub Enterprise с версией старше 2.14.0 не работает в браузере Microsoft Edge.
Интеграция GitHub с инструментами визуального создания фабрики данных работает только в общедоступной версии фабрики данных.
Из одной ветки GitHub можно получить не более 1000 сущностей для каждого типа ресурса (например, конвейеров и наборов данных). Если этот предел достигнут, предлагается разделить ваши ресурсы на отдельные фабрики. В Azure DevOps Git этого ограничения нет.
Контроль версий
Системы контроля версий(также известные как система контроля версий , ) позволяют разработчикам совместно работать над кодом и отслеживать изменения, вносимые в базу кода.Контроль версий - важный инструмент для проектов с несколькими разработчиками.
Создание веток функций
Каждый репозиторий Azure Repos Git, связанный с фабрикой данных, имеет ветвь совместной работы. ( main
) - ветвь сотрудничества по умолчанию). Пользователи также могут создавать ветви функций, щелкнув + New Branch в раскрывающемся списке ветви. Когда появится новая панель ветки, введите имя своей ветки функции.
Когда вы будете готовы объединить изменения из ветки функций в ветку совместной работы, щелкните раскрывающееся меню ветки и выберите Создать запрос на перенос .Это действие приведет вас к Azure Repos Git, где вы можете создавать запросы на вытягивание, выполнять проверку кода и объединять изменения в свою ветку совместной работы. ( основной
по умолчанию). Вам разрешено публиковать в службе фабрики данных только из вашей ветки совместной работы.
Настройка параметров публикации
По умолчанию фабрика данных генерирует шаблоны Resource Manager опубликованной фабрики и сохраняет их в ветке с именем adf_publish
. Чтобы настроить настраиваемую ветку публикации, добавьте файл publish_config.json
в корневую папку в ветке совместной работы. При публикации ADF считывает этот файл, ищет поле publishBranch
и сохраняет все шаблоны Resource Manager в указанном месте. Если ветка не существует, фабрика данных автоматически создаст ее. И пример того, как выглядит этот файл, ниже:
{
"publishBranch": "factory / adf_publish"
}
Фабрика данных Azure может иметь только одну ветвь публикации одновременно. Когда вы указываете новую ветвь публикации, фабрика данных не удаляет предыдущую ветвь публикации.Если вы хотите удалить предыдущую ветку публикации, удалите ее вручную.
Примечание
Фабрика данных считывает файл publish_config.json
только при загрузке фабрики. Если у вас уже есть фабрика, загруженная на портал, обновите браузер, чтобы изменения вступили в силу.
Опубликовать изменения кода
После объединения изменений в ветвь совместной работы ( основной,
- по умолчанию), нажмите Опубликовать , чтобы вручную опубликовать изменения кода в основной ветке в службе фабрики данных.
Откроется боковая панель, на которой вы подтверждаете, что ветка публикации и ожидающие изменения верны. После подтверждения изменений нажмите ОК , чтобы подтвердить публикацию.
Важно
Основная ветвь не является репрезентативной для того, что развернуто в службе фабрики данных. Основная ветвь должна быть опубликована вручную в службе фабрики данных.
Лучшие практики интеграции Git
Разрешения
Обычно вы не хотите, чтобы у каждого члена команды были разрешения на обновление фабрики данных.Рекомендуются следующие настройки разрешений:
- Все члены группы должны иметь разрешения на чтение фабрики данных.
- Только избранным людям должно быть разрешено публиковать данные в фабрике данных. Для этого они должны иметь роль участника фабрики данных в группе ресурсов , которая содержит фабрику данных. Дополнительные сведения о разрешениях см. В разделе Роли и разрешения для фабрики данных Azure.
Рекомендуется не разрешать прямую регистрацию в ветке совместной работы.Это ограничение может помочь предотвратить ошибки, так как каждая регистрация будет проходить через процесс проверки запроса на вытягивание, описанный в разделе Создание веток функций.
Использование паролей из Azure Key Vault
Рекомендуется использовать Azure Key Vault для хранения любых строк подключения или паролей или управляемой проверки подлинности для связанных служб фабрики данных. По соображениям безопасности фабрика данных не хранит секреты в Git. Любые изменения в связанных службах, содержащие секреты, такие как пароли, немедленно публикуются в службе фабрики данных Azure.
Использование Key Vault или аутентификации MSI также упрощает непрерывную интеграцию и развертывание, поскольку вам не нужно будет предоставлять эти секреты во время развертывания шаблона Resource Manager.
Устранение неполадок интеграции с Git
Устаревшая ветка публикации
Если ветка публикации не синхронизирована с основной веткой и содержит устаревшие ресурсы, несмотря на недавнюю публикацию, попробуйте выполнить следующие действия:
- Удалите текущий репозиторий Git
- Перенастройте Git с теми же настройками, но убедитесь, что выбран Импортировать существующие ресурсы фабрики данных в репозиторий и выберите Новая ветка
- Создайте запрос на перенос, чтобы объединить изменения в ветку сотрудничества
Ниже приведены некоторые примеры ситуаций, которые могут вызвать устаревшую ветку публикации:
- У пользователя несколько ветвей.В одной функциональной ветке они удалили связанный сервис, который не ассоциирован с AKV (не связанные с AKV сервисы публикуются немедленно, независимо от того, находятся они в Git или нет) и никогда не объединяли функциональную ветвь с ветвью сотрудничества.
- Пользователь изменил фабрику данных с помощью SDK или PowerShell.
- Пользователь переместил все ресурсы в новую ветку и впервые попытался опубликовать. Связанные сервисы следует создавать вручную при импорте ресурсов.
- Пользователь вручную загружает не связанный с AKV сервис или среду выполнения интеграции JSON.Они ссылаются на этот ресурс из другого ресурса, например набора данных, связанной службы или конвейера. Служба, не связанная с AKV, созданная через UX, публикуется немедленно, потому что учетные данные должны быть зашифрованы. Если вы загрузите набор данных, ссылающийся на эту связанную службу, и попытаетесь опубликовать, UX разрешит это, потому что он существует в среде git. Он будет отклонен во время публикации, поскольку он не существует в службе фабрики данных.
Перейти в другой репозиторий Git
Чтобы переключиться на другой репозиторий Git, перейдите на страницу конфигурации Git в концентраторе управления в разделе Управление исходным кодом .Выберите Отключить .
Введите имя своей фабрики данных и нажмите Подтвердите , чтобы удалить репозиторий Git, связанный с вашей фабрикой данных.
После удаления связи с текущим репо вы можете настроить параметры Git для использования другого репо, а затем импортировать существующие ресурсы фабрики данных в новое репо.
Важно
Удаление конфигурации Git из фабрики данных ничего не удаляет из репозитория.Фабрика будет содержать все опубликованные ресурсы. Вы можете продолжить редактировать фабрику прямо в сервисе.