Вы, наверное, слышали о CI/CD или DevOps. Может быть, вы прочитали мою статью для инструментов или выслушали Технологический варенье Подкаст я со-ведущий.
Создайте/тестируйте/разверните приложение Go, используя IBM Cloud Chans
Лиам Конрой Хэмптон ・ 24 сентября 2010 ・ 10 мин. читать
Где бы вы это ни слышали, это горячая тема, и в ней так много элементов. В этом блоге я покажу вам, как я развертываю два микросервиса в два разных облака. Однако у меня есть поворот сюжета. Я использую только 1 трубопровод. Это называется мульти-облачным развертыванием, методом, который имеет много преимуществ от экономии затрат до безопасности и надежности. Это становится более популярным методом развертывания облака, и эта статья просто царапает поверхность.
3 вывода из этой статьи:
- Узнайте что -то новое о CI/CD
- Узнайте, как написать трубопровод Tekton
- Понять, как легко развернуться в более чем одно облако
Для контекста я написал клиентское приложение в Golang и приложение Server в Node.js. Приложение GO отправит/опубликует часть данных через поле ввода формы, а приложение Node получит это и отобразит его. Довольно просто Но это делает работу.
Если вы также хотите сделать это, вот несколько предварительных рек:
- IBM Cloud Account
- Digitalocean Cloud Account
- Github account
- 2 микросервиса (убедитесь, что они находятся в GitHub или эквивалентны). Не стесняйтесь использовать мою и просто подготовить значения на протяжении всей демонстрации
Строительство трубопровода Тектона
Tekton — это цель для рыцарских приложений. Он обрабатывает контейнеры и развертывание в рыжая среда. Принимая во внимание, что ранее у вас был Jenkinsfile или Travis.yaml в корне вашего проекта, вам не обязательно нужно это в Тектоне (по крайней мере, для этой демонстрации).
Трубов Tekton предоставляет новые ресурсы с помощью пользовательских определений ресурсов (CRD). Это:
- Трубопровод
- Задача
- Задача
- Pipelineruns
- PipelinerSources
Тубопровод Tekton может состоять из многих задач, и в рамках задач может быть много шагов. Это станет яснее, когда мы пойдем вместе.
Самая фундаментальная часть всегда помнить, это то, что трубопровод отделен, а строительные блоки являются изолированными контейнерами.
Шаг 1 — Установите учетные записи IBM и DigitaloCean Cloud и приобретать ключи доступа
Просто перейдите по этим ссылкам, чтобы зарегистрироваться (они бесплатны)
IBM токеновое создание
- Войдите в консоли управления облаком IBM
- Manage -> Access (iam) -> API -клавиши ->
Создайте ключ API IBM Cloud
Цифрояковое создание токенов
- Петь в консоли управления DigitalOcean
- Выберите API из списка слева
- Выберите
Токен/ключи
вкладка - Нажмите
Генерировать новый токен
Держите оба этих клавиша API в безопасности и убедитесь, что вы знаете, что такое. Вы не сможете увидеть их снова.
Шаг 2 — Напишите трубопровод YAML
Файл 1 — развертывание-pipeline.yaml
В этом файле вы можете увидеть основной поток трубопровода. Сначала он выполнит Pipeline-IBM-Cloud-Install-Task
А потом он выполнит Pipeline-Do-Cloud-Install-Task
Анкет
apiVersion: tekton.dev/v1beta1 kind: Pipeline metadata: name: deployment-pipeline spec: params: - name: ibmcloudapikey description: The IBM Cloud API Key - name: doauth description: The DigitalOcean API Key - name: file description: The node app repository contents to download - name: uuid description: A unique identifier tasks: - name: pipeline-ibm-cloud-install-task taskRef: name: ibm-cloud-install-task params: - name: ibmcloudapikey value: $(params.ibmcloudapikey) - name: file value: $(params.file) - name: uuid value: $(params.uuid) - name: pipeline-do-cloud-install-task runAfter: pipeline-ibm-cloud-install-task taskRef: name: do-cloud-install-task params: - name: doauth value: $(params.doauth) - name: uuid value: $(params.uuid)
Файл 2 — IBM-Cloud-Install-task.yaml
Это Задача
И у него есть один шаг. Основное изображение, объявленное, является IBMCOM/IBM-Cloud-Developer-Tools-AMD64: 1.2.3
и у него есть ibmcloud cli
Предварительно установлен и настроен. Сначала он загружает молнию моего проекта от GitHub. Во -вторых, он использует IBMCloud CLI для аутентификации моей облачной учетной записи IBM и подтолкнул мой проект в CloudFoundry.
apiVersion: tekton.dev/v1beta1 kind: Task metadata: name: ibm-cloud-install-task spec: params: - name: ibmcloudapikey type: string - name: file type: string - name: uuid type: string steps: - name: login-and-deploy-function image: ibmcom/ibm-cloud-developer-tools-amd64:1.2.3 script: | #!/usr/bin/env sh apk add zip mkdir -p ./application wget $(params.file) -O nodeapp.zip unzip ./nodeapp.zip -d ./application rm nodeapp.zip echo $(params.uuid) cd application/microservice-node-demo-main ibmcloud login -a cloud.ibm.com -r eu-gb -g Default -apikey $(params.ibmcloudapikey) ibmcloud cf install ibmcloud target --cf ibmcloud cf push liams-node-app -m 128M echo PUSHED TO IBM CLOUD CF
Обязательно измените имя вашего приложения, изменив строку ibmcloud cf push
Анкет
Файл 3 — Do-Cloud-Install-Task.yaml
Это Задача
использует ванильное альпийское изображение, устанавливая цифровой CLI ( doctl
), создавая приложение спецификация
(развертывание .yaml
File Digitalocean ожидает), а затем, наконец, развертывание приложения. Приложение спецификация
Состоит из ограничений, которые я хочу навязать свою заявку при развертывании. Как вы можете видеть, у меня есть жесткая переменная среды ( Это может быть субсизировано параметром, но это всего лишь базовая демонстрация.
В приведенном ниже коде убедитесь, что вы скопируете свои собственные значения в биты, которые нуждаются в изменении ( repo_clone_url
и Одобрение
ценность) и адаптируйте его к вашим потребностям приложений. Digitalocean App Spec Анкет
Если вы используете мои репозитории, просто подразделяют значения.
apiVersion: tekton.dev/v1beta1 kind: Task metadata: name: do-cloud-install-task spec: params: - name: doauth type: string - name: uuid type: string steps: - name: login-and-deploy-function image: alpine:3.13.0 script: | #!/usr/bin/env sh echo pipeline-uuid-$(params.uuid) apk add wget wget https://github.com/digitalocean/doctl/releases/download/v1.54.0/doctl-1.54.0-linux-amd64.tar.gz tar xf doctl-1.54.0-linux-amd64.tar.gz mv doctl /usr/local/bin mkdir -p ./appspec cd appspec/ touch client-go-app.yaml ls -la cat >> client-go-app.yaml <branch: do-deploy build_command: go build -o goapp run_command: ./goapp envs: - key: APPROUTE value: https:// .eu-gb.mybluemix.net instance_count: 1 EOF pwd doctl auth init -t $(params.doauth) doctl apps create --spec client-go-app.yaml echo App deployed to DigitalOcean
В настоящее время это не сработает, и вы узнаете, почему вскоре
После того, как эти файлы будут созданы, создайте новый репозиторий в GitHub и встаньте в него эти файлы.
Шаг 3 — Создайте свой инструмент в IBM Cloud
- Войдите в свое облако IBM учетная запись
- Перейдите в раздел DevOps в IBM Cloud, используя меню навигации слева (оно примерно на полпути вниз по списку)
- Выберите свой регион (я выбрал Лондон), а затем нажмите на
Создайте набор инструментов
- Прокрутите вниз внизу и выберите «Создайте свой собственный инструмент»
- Дайте ему имя и покинуть регион и ресурсную группу в качестве значения по умолчанию
Теперь вы создали основу для строительства. На этом этапе ваш инструмент будет пустой, поэтому давайте заполним его.
- В правом верхнем углу нажмите кнопку
Добавить инструмент
и искатьGitHub
Анкет Это будет использоваться для доступа к микросервисам в GitHub или эквивалентном сервере.
Заполните детали:
- Сервер — где проецирует проекты (по умолчанию github).
- Тип репозитория — изменить это на
Существующий
Поскольку ваши проекты уже существуют. - URL -адрес репозитория — это URL проекта HTTPS (не
.GIT
URL). - Владелец интеграции — Это ваше имя пользователя GitHub. Вы можете быть предложены, чтобы разрешить инструмент доступа к вашему профилю GitHub. После подключения он будет автоматически заполнять.
Игнорировать флажки Включить проблемы GitHub
и Отслеживание развертывания изменений кода
так как мы не нужны для этой демонстрации.
Повторите эти шаги и добавьте новый GitHub Инструмент
в инструментальном положении для каждого репозитория GitHub. 1 для каждого микросервиса и 1 для репозитория трубопровода Tekton.
Как только вы это сделаете, добавьте один последний инструмент. Это верно, последний инструмент! Нажмите Добавить инструмент
и искать Трубопровод доставки
Анкет Это рабочая лошадка в этом инструментальном положении.
Выберите его и продолжайте заполнить следующее:
- Название трубопровода — дайте ему уникальное имя
- Тип трубопровода — Здесь у вас есть 2 варианта.
Классик
, который обеспечивает графический интерфейс и позволяет развернуть ваши приложения в CloudFoundry иTekton
, облачный нативный инструмент CI/CD. ВыберитеTekton
из списка.
Теперь нажмите на Создать интеграцию
Анкет
Если вы получите ящик с ошибкой, говорящий «Требуется непрерывная служба доставки»
не паникуйте. В основной строке поиска облака IBM найдите непрерывную доставку и выберите «Непрерывную доставку» — вам нужно сделать это только один раз! Очень просто настроить эту услугу. Убедитесь, что регион установлен так же, как ваш инструмент (шахта Лондона), дайте ему разумное имя, такое как «Служба доставки инструментов» и нажмите Создать
Анкет Теперь вернитесь к своему набору инструментов, и ошибка должна исчезнуть.
Теперь это должно выглядеть так:
Шаг 4 — Настройте трубопровод Tekton
Нажмите на Трубопровод доставки
инструмент И это приведет вас к Конфигурация TektonPipeline
приборная доска.
В левой стороне экрана вы увидите список. Это следующие:
Определения — Это определяет код трубопровода, который будет выполнен на триггере. Мы создали 3 Tekton .yaml
Файлы на шаге 2. Нажмите на Добавлять
И вам дадут всплывающее окно. Для Репозиторий
Выберите репозиторий трубопровода Tekton, который имеет .yaml
Файлы, которые мы создали ранее. Выбрал Главный
ветвь в следующей коробке и оставить Дорожка
Бланк, если вы оставили файлы в корневом каталоге репозитория проекта. Нажмите Добавить
Анкет Как только код загрузится, нажмите на Подтвердить
, подождите, пока это закончит, а затем нажмите Сохранить
Анкет
Рабочий — По сути, как будет работать ваш трубопровод. Вы можете иметь посвященные частных работников или те, которые из общего пула ресурсов. Мы просто будем использовать общий ресурс, поэтому выберите IBM Managed Workings (Tekton Pipelines vx.xx.x) в Лондоне
и нажмите Сохранить
Анкет
Триггеры — Они указывают, что происходит, когда происходит событие. Чаще всего они будут триггерами событий из веб -крючка на GitHub, например, запрос на притяжение или новый коммит или слияние. Однако в этом блоге мы будем использовать ручный триггер. Мы настроем это в ближайшее время.
Свойства окружающей среды — Ключ: Пары значений, которые можно использовать из вашего трубопровода. Они ссылаются как $ (Params)
в .yaml
файлы Здесь нам нужно Добавить
4 Свойства Evironment для этой трубы правильно работают, и они есть:
Доат | Безопасный | Digitalocean API -ключ |
файл | Текст | .zip URL 1 Repsitory Project (мой проект узел) |
ibmcloudapikey | Безопасный | IBM Cloud API -ключ |
uuid | Текст | Уникальный идентификатор, например, 1234 |
.zip
+/archive/main.zip, например,: https://github.com/liamchampton/microservice-node-demo/archive/main.zip
Другие настройки — Используйте эти настройки для более детального управления над сборками. Для этой демонстрации мы не будем касаться этого.
Теперь все было настроено. Кодекс трубопровода был импортирован, работники были установлены, а свойства Evironment были установлены. Похоже, что хорошо идти .. верно? Попробуйте нажмите на Запустить трубопровод
В правом верхнем углу экрана.
Психо! Попался! Это не сработает, потому что у нас нет триггера. Он не знает, что делать, когда эта кнопка нажимается, поэтому мы должны это сказать.
Как я уже упоминал, это обычно будет триггером из события, которое происходит в репозитории, например, запрос на притяжение или слияние Но мы создадим ручной триггер.
Нам нужно пересмотреть наш репозиторий кода трубопровода и добавить еще несколько файлов. Я назвал это Hello-xxx.yaml
Чтобы дать ощущение, я включаю с ним новый разговор, но вы можете назвать их все, что вам нравится, просто убедитесь, что изменить код корпоспособности.
Файл 4 — Hello-lister.yaml
apiVersion: tekton.dev/v1beta1 kind: EventListener metadata: name: hello-listener spec: triggers: - binding: name: hello-trigger-binding template: name: hello-trigger-template
Файл 5 — hello-trigger-связывание.yaml
apiVersion: tekton.dev/v1beta1 kind: TriggerBinding metadata: name: hello-trigger-binding spec: params: - name: ibmcloudapikey value: $(event.ibmcloudapikey) - name: doauth value: $(event.doauth) - name: file value: $(event.file) - name: uuid value: $(event.uuid)
Файл 6 — hello-trigger-template.yaml
apiVersion: tekton.dev/v1beta1 kind: TriggerTemplate metadata: name: hello-trigger-template spec: params: - name: ibmcloudapikey description: The IBM Cloud API Key - name: doauth description: The DigitalOcean API Key - name: file description: The node app repository to be downloaded - name: uuid description: A unique identifier resourcetemplates: - apiVersion: tekton.dev/v1beta1 kind: PipelineRun metadata: name: pipelinerun-$(params.uuid) spec: pipelineRef: name: deployment-pipeline params: - name: ibmcloudapikey value: $(params.ibmcloudapikey) - name: doauth value: $(params.doauth) - name: file value: $(params.file) - name: uuid value: $(params.uuid)
Вставьте эти новые файлы в свою основную ветвь на GitHub и внутри вашей панели трубопроводов в IBM Cloud, перейдите к Определения
-> Нажмите 3 точки на уже импортированном репозитории -> Редактировать
-> Нажмите на Обновление
Кнопка -> Подтвердить
-> Сохранять
Отправляйтесь в Триггеры
Страница, а затем нажмите Добавить триггер
Анкет Выберите Руководство
. У вас должен быть только 1 EventListener на выбор, и его следует называть Привет-listener
Анкет На Рабочий
поле, выберите опцию Унаследовать от конфигурации трубопровода
Поскольку это будет использовать общий бассейн или работы, точно так же, как мы настроены ранее. Нажмите Сохранить
Анкет
Вахо! Вы закончили настройку своего трубопровода Tekton!
Теперь все, что осталось сделать, это запустить .. Нажмите Запустить трубопровод
, введите uuid
Значение для запуска трубопровода и нажмите Запустить
Анкет Смотрите, как происходит волшебство 🎉
Мой вызов для вас
Создайте новый Задача
Чтобы очистить каждое развертывание в конце пробега трубопровода и дайте мне знать, как вы попали на 😄
Если у вас есть какие -либо вопросы или вы хотите увидеть больше подобного контента, напишите мне!
GitHub Twitter Instagram LinkedIn
Оригинал: «https://dev.to/liamchampton/2-clouds-1-pipeline-19cd»