Рубрики
Uncategorized

Введите секреты в трубопроводы CI/CD

Как вы, возможно, уже знаете, вы никогда не должны включать секреты (такие как клавиши API, симметричный KE … Tagged с DevOps, Dotnet, GIT, TURANTION.

Как вы, возможно, уже знаете, Вы никогда не должны включать секреты (такие как клавиши API, симметричные ключи, сертификаты и т. Д.) В ваших репозиториях Анкет Даже в частных.

Недавно мне пришлось использовать секреты для личного проекта и для клиента. Мне пришлось придумать элегантное решение для моих проектов .NET И я подумал, что поделюсь с вами своими идеями и лучшими практиками.

Вообще говоря, есть два подхода, когда дело доходит до реализации секретов в ваших проектах .NET:

  • Пользовательские секреты : Вы включаете секреты в секретный файл. Приложение .NET загрузит их для вас во время выполнения. В производстве вы указываете секреты с помощью других средств (таких как ключевое хранилище и т. Д.). Обычно это работает для основных проектов ASP.NET и рабочих услуг.
  • Константы : Вы указываете напечатанные секреты в статическом классе и ссылаетесь на класс в своих проектах. Это обычно используется для приложений и тестовых проектов.

В этой статье я сосредоточусь на последнем сценарии для проектов .NET:

  • В моем личном проекте мне пришлось добавить секреты в мое приложение UWP с помощью App Center и GitHub
  • В коммерческом проекте я пошел на TDD, поэтому, естественно, мне пришлось предоставить несколько секретов для моих интеграционных тестов, не переходя на первое место, потому что я хотел, чтобы все было поцеловаться. Для этого я использовал Azure DevOps.

Без лишних слов, давай пойдем.

Первоначальные соображения проекта

Теперь, как именно вы включаете секреты исключительно от вашего проекта. В моем случае я создал частичный статический класс под названием Constants.cs где я определяю требуемые свойства и другой частичный класс Constants.secret.cs это содержит распространенные значения:

Чтобы дать вам идею, вот как выглядят оба файла:

// Constants.cs
public static partial class Constants
{
    public static string ApiKey { get; set; }
}
// Constants.Secret.cs
public static partial class Constants
{
    static Constants()
    {
        ApiKey = "verysecretkey!123"
    }
}

Компилятор с розой автоматически разрешает оба файла для вас. Чтобы использовать класс, не требуется особая конфигурация, и вы можете просто пойти дальше и ссылаться на Константы. Apikey собственность из любого места.

Далее, прежде чем продолжить и посвятить что -либо в GIT, убедитесь, что вы добавите секретный файл в свой файл .gitignore:

Constants.Secret.cs

Это будет игнорировать все файлы, которые соответствуют имени в вашем репозитории, поэтому оно никогда не будет проверено в вашем удаленном хранилище. Довольно удобно, если в вашем решении есть много разных проектов, которые имеют свой собственный набор секретов.

Давай, предоставьте хорошее послание коммита и подтолкните его. Как только вы это сделали, мы сможем заглянуть в сторону CI/CD.

CI/CD

Нам требуется некоторая настройка CI/CD, потому что на данный момент все сборки просто не пройдут, поскольку компилятор не может найти файл constants.secret.cs в репозитории — в первую очередь потому, что он упоминается в нашем решении, но его нельзя найти в удаленном Рабочий каталог репозитория.

Чтобы решить это, я покажу три варианта, которые должны работать для большинства сценариев: GitHub , Azure DevOps и App Center Анкет

Основываясь на этих сценариях, вы должны быть вдохновлены и иметь возможность применять знания к другим услугам.

GitHub

GitHub позволяет хранить секреты в вашем хранилище. Эти секреты могут быть направлены на ваши действия GitHub.

Чтобы управлять своими секретами, перейдите в свой репозиторий и нажмите Настройки> Секреты Анкет

Там создайте новый секрет репозитория и включите содержимое Constants.secret.cs файл. Дайте ему незабываемое имя (я буду называть его с этого момента. Вы должны использовать другое имя) и сохранить секрет.

Теперь пришло время создать файл класса на основе вашего секрета репозитория в файле определения действия, чтобы его можно было создать до того, как произойдет фактическая сборка.

Сценарий может выглядеть так: он просто напишет содержимое секрета файлу.

steps:
- uses: actions/checkout@v2
- name: Create Constants
  run: echo ${{secrets.}} > ".//Constants.Secret.cs"
# ...

Убедитесь, что вы вставили этот шаг перед любыми шагами сборки, которые зависят от вашего файла констант, и не забудьте заменить заполнителя на имя вашего реального секрета.

Сделайте обновленную файл действия, и ваша сборка должна быть успешной.

Лазурные DevOps

Azure DevOps позволяет загружать безопасные файлы. Безопасные файлы являются хорошим решением для управления вашими секретными файлами в ваших трубопроводах. Это позволяет вам управлять, кто может получить доступ к безопасным файлам и какие трубопроводы могут их использовать.

Чтобы управлять всеми своими секретами, убедитесь, что вы включили трубопроводы для своего проекта. Затем перейти к Трубопроводы> Библиотека Анкет Библиотека позволяет повторно использовать переменные и хранить безопасные файлы.

Там, иди в Безопасные файлы Вкладка, загрузите свой класс секретных констант ( constants.secret.cs ) и убедитесь, что вы даете ему хорошее имя — одно, которое позволяет вам отличать постоянные классы друг от друга, если у вас есть более одного из них.

После этого пришло время вывести наш безопасный файл в наш конвейер сборки. Чтобы потреблять безопасные файлы, вы используете задачу SecureFile. Это требует имя задачи и безопасное имя файла в качестве ввода. Имя задачи позволяет ссылаться на файл со всех последовательных этапов сборки:

steps:
- task: DownloadSecureFile@1
  name: constantsFile
  displayName: 'Download Constants for Integration Tests'
  inputs:
    secureFile: 'Constants.Secret.cs'

После того, как это сделано, нам нужно скопировать файл в место, где он должен быть. В противном случае наша сборка потерпит неудачу, потому что компилятор не найдет класс, который упоминается в нашем решении, как упоминалось ранее:

- script: cp $(constantsFile.secureFilePath) /Constants.Secret.cs
  displayName: Copy constants

И вы сделали! Этот шаг теперь скопирует защищенный файл в пункт назначения.

Сохраните определение сборки и запустите его. Ваша сборка должна добиться успеха.

Центр приложений

App Center позволяет запускать пользовательские сценарии на определенных этапах. Вы можете прочитать больше об этом на Документация центра приложений Анкет

Вам нужно будет использовать пользовательский скрипт для введения ваших констант до начала сборки. Однако, поскольку сценарий сборки содержит ваши пропагандированные константы и должен быть проверен в ваш удаленный репозиторий, рекомендуется, чтобы вы либо не включали никаких конфиденциальных деталей, либо распространяете содержимое из переменных безопасной среды.

Если вы решите пойти с прежним подходом, который я буду показывать, вам нужно будет убедиться, что ваше приложение будет вести себя правильно даже без каких -либо постоянных значений.

Если вы планируете использовать App Center только для целей CI, все будет в порядке. Хотя, если вы планируете распространять пакет приложений для ваших тестеров, вам нужно будет найти способы распространения ваших констант.

В этом случае рассмотрите возможность использования переменных среды, когда вы создаете класс Constants или предоставляете способы распространять значения во время выполнения пользователем (например, файлы конфигурации и т. Д.).

Я построил приложение UWP, и мне пришлось распространить несколько константов в мое приложение. Чтобы добавить скрипт Post Clone, добавьте файл скрипта в корневой путь вашего репозитория.

Для сборок на основе Windows, таких как UWP (Appcenter-post-clone.ps1)

"namespace 
{
    public static partial class Constants
    {
        static Constants() { }
    }
}" | Out-File -FilePath ".\\\\Constants.Secret.cs

Для сборки на основе Mac (Appcenter-post-clone.sh)

echo "namespace \
{\
    public static partial class Constants\
    {\
        static Constants() { } \
    }\
}" > "/Constants.Secret.cs.cs"

Оба сценария записывают встроенный контент в файл. Убедитесь, что вы совершаете и подтолкните файл в свой репозиторий и позволили запустить сборку. Если вы боретесь с этим, посмотрите на Официальные образцы для справочных целей.

Я надеюсь, что эта статья поможет и вдохновляет вас. Дайте мне знать, что вы думаете.

Я недавно стал Microsoft Learn Ambassador . Если вы хотите, чтобы я опубликовал больше статей в будущем, обязательно следуйте за мной в dev.to и Twitter Анкет Проверить Мои другие профили Анкет Кроме того, посмотрите на другие мои статьи!

Ура, и спасибо за чтение!

Оригинал: «https://dev.to/ginomessmer/inject-secrets-into-your-ci-cd-pipelines-2edh»