Установка Concourse CI в Unix/Linux

Concourse CI — это современная система непрерывной интеграции, которая автоматизирует конвейеры тестирования.

Он очень самоуверен в нескольких вещах:

  • Идемпотентность,
  • Неизменность,
  • Имеет декларативный конфиг,
  • Stateless workers (воркеры без сохранения состояния),
  • Воспроизводимые сборки.

Пайплайн выглядит следующим образом:

Перейдем к установке.

Установка Concourse CI в Unix/Linux

Concourse можно установить несколькими способами. Приведу примеры установок.

Установка Concourse CI используя бинарный файл

Скачиваем архивы (для MacOS):

$ wget https://github.com/concourse/concourse/releases/download/v5.3.0/concourse-5.3.0-darwin-amd64.tgz && wget https://github.com/concourse/concourse/releases/download/v5.3.0/fly-5.3.0-darwin-amd64.tgz

Скачиваем архивы (для Linux):

$ wget https://github.com/concourse/concourse/releases/download/v5.3.0/concourse-5.3.0-linux-amd64.tgz && wget https://github.com/concourse/concourse/releases/download/v5.3.0/fly-5.3.0-linux-amd64.tgz

Замините архивы для своих целей (версию или тип ОС).

Распаковываем:

$ tar -xfvz concourse-*.tgz -C /usr/local
$ tar -xfvz fly-*.tgz -C /usr/local

ЗАМЕЧАНИЕ: Нужно добавить PATH для использования данных тулов (если этого не было сделано). Например, у меня такой:

export PATH="$PATH:/usr/local/bin:/usr/local/sbin:/opt/X11/bin:/usr/local/git/bin:/usr/local/go/bin:/sbin:/bin:/opt/local/bin:/opt/local/sbin"

Добавил я его в:

$ vim ~/.bash_profile 

Чтобы настройка применилась, выполняем:

$ source ~/.bash_profile 

или:

$ . ~/.bash_profile 

Вот и вся установка.

Установка Concourse CI используя исходный код

Скачаем архив:

$ wget -O concourse-latest.tar.gz https://github.com/concourse/concourse/archive/v5.3.0.tar.gz

Распаковываем:

$ tar xfvz concourse-latest.tar.gz

В папке concourse-5.3.0 лежит исходный код ( на golang). Можно перейти в папку и скомпилировать:

$ cd concourse-*

PS: Компилировать я не стал (не было необходимости). Использую докер для своих реализаций. Будет время, дополню материал….

Возможно, кто-то хочет помогать мне в этом — я буду не против.

Установка Concourse CI используя Docker

Ставим Docker, docker-compose, статьи вот тут:

Установка Docker на CentOS/RedHat/Fedora

Установка Docker на Debian/Ubuntu

Установка docker-compose в Unix/Linux

Работа с docker + docker-compose в Unix/Linux

Другие полезные статьи:

Запустить Docker контейнер от пользователя в Unix/Linux

Создание docker контейнера в Unix/Linux

Остановить/Удалить все Docker контейнеры/images

Запуск docker контейнеров в Unix/Linux

Запустить bash/SSH в контейнере с Docker

Использование статического IP адреса в docker-compose

Работа с сетью (Networking) в Docker

Работа с томами (Volumes) в Docker

Работа с логами (Logs) в Docker

Приступим….

Для консоурса, нужны 3 сервиса, можно получить помощь так:

$ docker run -t concourse/concourse --help
$ docker run -t concourse/concourse web --help
$ docker run -t concourse/concourse worker --help

Понять что и как работает и потом запустить. Честно говоря, я не использовал данный вариант, я использовал установку через docker-compose. Скачиваем файл:

$ wget https://concourse-ci.org/docker-compose.yml

Запускаем билд консоурса:

$ docker-compose up
Creating docs_concourse-db_1 ... done
Creating docs_concourse_1    ... done

PS: Можно скачать архив (вытянуть все через git):

$ git clone https://github.com/concourse/concourse-docker.git && cd concourse-docker

Можно сгенерировать ключи:

$ ./keys/generate
Unable to find image 'concourse/concourse:latest' locally
latest: Pulling from concourse/concourse
6abc03819f3e: Already exists
05731e63f211: Already exists
0bd67c50d6be: Already exists
f81c432f3eb1: Pull complete
28ed15a59bee: Pull complete
Digest: sha256:df37aa611cc0f75fdd400665a0c422211974cbfe09d3cca6311cc90b17a079e2
Status: Downloaded newer image for concourse/concourse:latest
wrote private key to /keys/session_signing_key
wrote private key to /keys/tsa_host_key
wrote ssh public key to /keys/tsa_host_key.pub
wrote private key to /keys/worker_key
wrote ssh public key to /keys/worker_key.pub

Ну и потом выполнить запуск сервиса:

$ docker-compose up -d
Creating network "concourse-docker_default" with the default driver
Pulling db (postgres:)...
latest: Pulling from library/postgres
fc7181108d40: Pull complete
81cfa12d39e9: Pull complete
793d305ca761: Pull complete
41e3ced3a2aa: Pull complete
a300bc9d5405: Pull complete
3c6a5c3830ed: Pull complete
fb8c79b24338: Pull complete
fcda1144379f: Pull complete
476a22a819cc: Pull complete
78b36b49bb24: Pull complete
6a096a28591f: Pull complete
c0cb89b5217b: Pull complete
778f1469a309: Pull complete
7c4413fcad87: Pull complete
Digest: sha256:1518027f4aaee49b836c5cf4ece1b4a16bdcd820af873402e19e1cc181c1aff2
Status: Downloaded newer image for postgres:latest
Creating concourse-docker_db_1 ... done
Creating concourse-docker_web_1 ... done
Creating concourse-docker_worker_1 ... done

Чтобы проверить старталули ли сервисы, проверяем:

$ docker ps

Поглядеть логи, можно так:

$ docker-compose logs -f

Если все стартануло и без каких либо ошибок, — переходим к проверке работоспсобности и настройке.

Установка Concourse CI используя BOSH

Пока, не было обходимости в этой настройке…

Установка Concourse CI используя Kubernetes

Установка k8s описана тут:

Установка Kubernetes в Unix/Linux

Установка Kubernetes кластера в Unix/Linux

Ставим утилиту через чарт:

$ helm install --name concourse-ci stable/concourse

Удалить можно так:

$ helm delete concourse-ci

На этом у меня закончилось тестирование concourse-ci. Перейдем к использованию.

Настройка Concourse CI в Unix/Linux

Я установил Concourse через docker-compose. После установки данной утилиты, сервис должен работать по 127.0.0.1:8080 УРЛ. Выглядит это так:

Как видно с экрана, можно выполнить вход в панель, для этого нажать нужно на «Login». Логин/пароль — test и test.

Fly — это утилита командной строки, которая позволяет управлять всем вашим кластером ConcourseCI из терминала. Ставится на ваш рабочий компьютер и упралвяет сервером. С ней вы можете совершать все необходимые операции и обслуживать кластер.

Скачиваем утилиту fly:

  • Если вы сиспользуете MacOS:
$ wget -O /usr/local/bin/fly --user=test --password=test "http://localhost:8080/api/v1/cli?arch=amd64&platform=darwin"
  • Если вы сиспользуете Linux:

$ wget -O /usr/local/bin/fly --user=test --password=test "http://localhost:8080/api/v1/cli?arch=amd64&platform=linux"

После скачивания файла, выставим права на исполнение данного бинарника:

$ chmod +x /usr/local/bin/fly

Получить помошь, можно:

$ fly --help

Выполним вход в сервис через утилиту fly:

$ fly -t ci login -c http://127.0.0.1:8080 -u test -p test
logging in to team 'main'


target saved

Смотрим какой таргет используем сейчас:

$ fly targets
name  url                    team  expiry
ci    http://127.0.0.1:8080  main  Sat, 15 Jun 2019 13:05:43 UTC

Проверить статус можно так:

$ fly -t ci status
logged in successfully

Смотрим информацию по таргету:

$ fly -t ci userinfo
username  team/role
test      main/owner

Чтобы выйти:

$ fly -t ci logout

Чтобы очистить свой токен для всех targets:

$ fly logout -a

Чтобы изменить имя, команду или URL-адрес target-а, выполните:

$ fly -t ci edit-target \
    --target-name new-name \
    --concourse-url http://127.0.0.1:8080 \
    --team-name my-team
Updated target: ci

И проверяем что вышло:

$ fly targets
name      url                    team     expiry
new-name  http://127.0.0.1:8080  my-team  Sat, 15 Jun 2019 13:05:43 UTC

Удалить таргет можно следующим образом:

$ fly -t new-name delete-target

Чтобы удалить все таргеты, выполните:

$ fly delete-target -a

Время от времени утилиты обновляетсяи выходят релизы, чтобы обновить локальную версию тулы можно использовать:

$ fly -t new-name sync
version 5.3.0 already matches; skipping

Работа с локальными юзерами (Добавление/Удаление) в concourse

Все операции с юзерами выполняються на web ноде, т.к я использую докер, для добавление юзеров, стоит открыть:

$ vim docker-compose.yml

И привести к виду:

CONCOURSE_ADD_LOCAL_USER: test:test,your_user:your_password
CONCOURSE_MAIN_TEAM_LOCAL_USER: test,your_user

Ну и потом, запустить:

$ docker-compose up -d

Проверим:

$ fly --target ci login --username=captain --password=captain --team-name main
logging in to team 'main'


target saved

Работа с team-ами в concourse

Пример создания тимы:

$ fly -t ci set-team --team-name new-team \
 >   --local-user captain
setting team: new-team

role owner:
  users:
  - local:captain

  groups:
    none

apply team configuration? [yN]: y
team created

Логинимся в тиму:

$ fly --target ci login -n new-team --concourse-url http://localhost:8080 -k -u captain  -p captain

Чтобы посмотреть team-ы:

$ fly -t ci teams
name
main
new-team

Или, с более подробной инфой:

$ fly -t ci teams -d
name/role       users                     groups
main/owner      local:test,local:captain  none
new-team/owner  local:captain             none

Чтобы посмотреть найтройки тимы, выполните:

$ fly -t ci get-team -n new-team
name/role       users          groups
new-team/owner  local:captain  none

Для переименования тимы, можно заюзать:

$ fly -t ci rename-team --old-name new-team --new-name cool-team
Team successfully renamed to cool-team

Смотрим что вышло:

$ fly -t ci teams
name
cool-team
main

Для удаления тимы, служит команда:

$ fly -t ci destroy-team --team-name cool-team
!!! this will remove all data for team `cool-team`

please type the team name to confirm: cool-team

`cool-team` deleted

Приступим к пайплайнам.

Конфигурация Concourse CI pipeline-ов в Unix/Linux

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

Логинимся:

$ fly -t ci login -c http://127.0.0.1:8080 -u captain -p captain
logging in to team 'main'


target saved

Чтобы просмотреть список настроенных конвейеров и их приостановленное состояние, выполните:

$ fly -t ci pipelines
name  paused  public

Т.к у меня чистый\только созданный проект, у меня нет никаких пайплайнов.

Чтобы переименовать конвейер, запустите:

$ fly -t ci rename-pipeline \
    --old-name my-pipeline \
    --new-name my-cool-pipeline

Чтобы приостановить конвейер, запустите:

$ fly -t ci pause-pipeline --pipeline pipeline_name_here

Данная команда, предотвратит планирование заданий и прекратит периодическую проверку новых версий ресурсов. Сборки, которые находятся уже в запуске, будут закончены.

Чтобы снять с паузы пайплайн, запустите:

$ fly -t ci unpause-pipeline --pipeline pipeline_name_here

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

$ fly -t ci expose-pipeline --pipeline pipeline_name_here

Если вы понимаете, что совершили ужасную ошибку что дали доступ к пайплайну другим тимам, можно скрыть:

$ fly -t ci hide-pipeline --pipeline pipeline_name_here

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

$ fly -t ci get-pipeline --pipeline pipeline_name_here

PS: чтобы получить вывод в JSON вместо YAML, вы можете использовать аргумент -j или —json. Это может быть полезно при проверке вашей конфигурации с утилитой jq.

Чтобы остановить работу конвейера и удалить все данные, собранные конвейером, включая историю сборки и собранные версии, можно выполнив:

$ fly -t ci destroy-pipeline --pipeline pipeline_name_here

Чтобы настроить порядок трубопроводов, выполните:

$ fly -t ci order-pipelines \
    --pipeline pipeline-1 \
    --pipeline pipeline-2 \
    --pipeline pipeline-3

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

Для валидации, можно использовать:

$ fly validate-pipeline --config your_pipeline_name_here.yml
looks good

Так же, можно выполнить команду и проверить форматинг:

$ fly format-pipeline --config your_pipeline_name_here.yml

Перейдем к примеру(ам). У Concourse еет графического интерфейса для настройки пайплайнов и вместо этого, пайплайны настраиваются как декларативные YAML файлы. Выглядит это так:

jobs:
- name: hello-world
  plan:
  - task: say-hello
    config:
      platform: linux
      image_resource:
        type: docker-image
        source: {repository: alpine}
      run:
        path: echo
        args: ["Hello, world!"]

Сохраните данный вывод в файл (например: hello.yml) и потом, запустите:

$ fly -t ci set-pipeline -p hello -c hello.yml
jobs:
  job hello-world has been added:
+ name: hello-world
+ plan:
+ - task: say-hello
+   config:
+     platform: linux
+     image_resource:
+       type: docker-image
+       source:
+         repository: alpine
+     run:
+       path: echo
+       args:
+       - Hello, world!

apply configuration? [yN]: y
pipeline created!
you can view your pipeline here: http://127.0.0.1:8080/teams/main/pipelines/hello

the pipeline is currently paused. to unpause, either:
  - run the unpause-pipeline command:
    fly -t ci unpause-pipeline -p hello
  - click play next to the pipeline in the web ui

Написало что нужно анпаузить проект:

$ fly -t ci unpause-pipeline -p hello
unpaused 'hello'

Открываем веб-линку с консоурсом и смотрим что вышло. Написание пайплайнов будет позже. Я дополню данную статью или создам новую.

Вот и все, статья «Установка Concourse CI в Unix/Linux» завершена.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.