Як ми впроваджували DevOps: публікація образу в Docker Hub з допомогою Visual Studio Team Services

Продовжуємо цикл статей «Як ми впроваджували DevOps» від команди Vorlon.JS. Під катом ви дізнаєтеся, як вони використовували систему складання Visual Studio Team Services (VSTS) для автоматизації створення і публікації образу в репозиторії з застосуванням Linux-агента.



Введення
Docker Hub дозволяє зробити образи створених вами контейнерів доступними для всіх користувачів Docker.



Примітка. Ця стаття буде актуальною і для користувачів Docker Trusted Registry.

Параметри агента складання Linux
Нова система складання Visual Studio Team Services працює з агентами складання. Можна використовувати безкоштовний агент Windows в хмарі (Hosted agent), а так само завантажити агенти під Windows, Linux або Mac OS (Default agent), і встановити їх самостійно. Це дозволить вам запускати процеси, які не підтримуються агентом Windows в хмарі, або використовувати вже налаштовані сценарії та інструменти, які, можливо, вже розгорнуті на ваших машинах Linux.

У даному випадку необхідний нам Docker для складання образу, тому ми зупинилися на агента для Linux.

Для початку вам знадобиться виртеальная машина з Linux. Ви можете створити її в Microsoft Azure. В даному випадку ми розгорнули просту машину з Ubuntu 14.04 LTS з Azure.



Після старту машини, запустіть SSH-сесію та встановіть все необхідне для процесу складання. В нашому випадку на машині встановлений docker-engine і інструменти Node.js. В даному випадку, для складання образу Vorlon.JS Dashboard Docker нам більше нічого не потрібно.

Далі необхідно налаштувати агент VSTS. Для доступу до вашого облікового запису агенту знадобиться Personal Access Token. Щоб його створити, виберіть свого імені на порталі VSTS (вгорі праворуч) і виберіть My profile. Перейшовши на вкладку Security, натисніть на правій панелі кнопку Add. Натисніть Create Token і збережіть створений маркер, він знадобиться для запуску агента.

Тепер ви повинні прийняти ваш обліковий запис для використання пулу агентів. Натисніть на значок налаштування в правому верхньому кутку панелі VSTS. Перейдіть на вкладку Agent Pools та виберіть Default pool. Додайте свій обліковий запис в дві групи: Agent Pool Administrator Agent Pool Service Accounts.

Поверніться до віртуальній машині Linux і створіть каталог vsts-agent. Перейдіть в цей каталог і введіть наступну команду:

curl -skSL https://aka.ms/xplatagent | bash

Система завантажить все необхідне для запуску агента VSTS.

Для установки і запуску агента введіть:
./run.sh


Система попросить вас ввести такі відомості.
  • username — це поле ігнорується, якщо використовується персональної токен доступу, так що ви можете ввести абсолютно будь-ім'я користувача;
  • password — ведіть свій Personal Access Token, збережений раніше;
  • agent name — ім'я агента (буде використовуватися для відображення агента в чергах агентів VSTS);
  • pool name — можна залишити значення за умовчанням;
  • server url — URL вашого облікового запису (https://youraccount.visualstudio.com).
Для всіх інших параметрів залиште значення за замовчуванням. Дочекайтеся запуску агента.

Після запуску ви можете повернутися в налаштування Agent pool на порталі VSTS, там ви побачите агент, який щойно налаштували.



Примітка. Всі необхідні відомості про агента VSTS для Linux і Mac OS ви можете знайти на цієї сторінці.

Підготовка визначення збірки для створення образу Docker
Створити образ Docker насправді дуже просто. Для Vorlon.JS у нас є два підходящих елемента в репозиторії нашого проекту:

1. Dockerfile для складання образу.
# use the node argon (4.4.3) image as base
FROM node:argon
# Set the Vorlon.JS Docker Image maintainer
MAINTAINER Julien Corioland (Microsoft, DX)
# Expose port 1337
EXPOSE 1337
# Set the entry point
ENTRYPOINT ["npm", "start"]
# Create the application directory
RUN mkdir -p /usr/src/vorlonjs
# Copy the application content
COPY . /usr/src/vorlonjs/
# Set app as root working directory
WORKDIR /usr/src/vorlonjs
# Run npm install
RUN npm install

2. Bash-скрипт, що використовує команди docker build, docker login і docker push для складання образу, входу в Docker Hub і відправки створеного образу.
#!/bin/bash
# get version from package.json
appVersion=$(cat package.json | jq -r '.version')
echo "Building Docker Vorlon.JS image version $appVersion"
docker build -t vorlonjs/dashboard:$appVersion .
docker login –username="$1" –password="$2"
echo "Pushing image..."
docker push vorlonjs/dashboard:$appVersion
docker logout
exit 0

Як бачите, в Bash-скрипт ми отримуємо версію прямо з файлу package.json, ми також оголошуємо змінні $1 $2, які VSTS буде використовувати при запуску нової збірки.

Давайте створимо для визначення своєї збірки!

Перейдіть в розділ BUILD свого проекту VSTS і додайте новий визначення складання. Почніть з пустого шаблону. В даному випадку нам просто потрібно запустити shell-скрипт.



Цей крок досить просто налаштувати, всього лише вказати шлях до потрібного Bash-срипту і аргументи, які повинні бути передані в цей скрипт. Як видно з скріншоту вище, ім'я користувача та пароль не використовуються безпосередньо, замість цього ми ставимо дві змінні: $(docker.username) $(docker.password).

Ці змінні можна налаштувати на вкладці Variables визначення складання.



Це облікові дані вашого профілю Docker Hub, які передаються у вигляді аргументів команді docker login.

Перейдіть на вкладку General і переконайтеся, що у визначенні складання використовуються черзі Default агентів, які ви додали агент Linux VSTS.

На цьому все! Тепер просто натисніть Save, щоб зберегти визначення складання і поставити нову збірку в чергу.



Відразу після створення збірки образ буде опублікований в репозиторії Docker Hub.



Таким чином, ми зробили образ VorlonJS доступним для всіх користувачів Docker Hub. Хочете спробувати? Просто введіть наступну команду на будь-Docker-хості:
docker run -d -p 80:1337 vorlonjs/dashboard:0.2.1

Використовуйте Visual Studio Team Services для складання власних образів. Вам обов'язково сподобається!
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.