Это поле у JavaBean - то есть это приватный field, у которого есть гетер и сетер.
воскресенье, 26 февраля 2017 г.
суббота, 25 февраля 2017 г.
Groovy Metaprogramming
Runtime MetaProgramming
MOP - Meta Object Protocol, набор правил, как обрабатывается системой реального времени Groovy вызов в метод объекта и как контролируется промежуточный слой в объектах.вторник, 21 февраля 2017 г.
Groovy для себя
* Методы классов по умолчанию публичные.
* Поля классов по умолчанию приватные.
* Поля одного типа можно писать через запятую
* Groovy по-умолчанию импортирует основные(наиболее часто используемые) Java пакеты JDK, по этому импортировать нам приходится не часто.
* самовыполняемый скрипт
Например hello.groovy файл:
* чтобы Groovy не генерировал для нас гетеры и сетеры нам нужно указать область видимости явно для поля
* Поля классов по умолчанию приватные.
* Поля одного типа можно писать через запятую
* Groovy по-умолчанию импортирует основные(наиболее часто используемые) Java пакеты JDK, по этому импортировать нам приходится не часто.
* самовыполняемый скрипт
Например hello.groovy файл:
#!/usr/bin/env groovy println "Hello!"никакой магии, просто env это не просто посмотреть переменные среды а
$ man env
ENV(1) BSD General Commands Manual ENV(1)
NAME
env -- set environment and execute command, or print environment
...
* чтобы обойти гетер в бине, а достучаться напрямую к полю нужно применять оператор .@ * чтобы Groovy не генерировал для нас гетеры и сетеры нам нужно указать область видимости явно для поля
понедельник, 20 февраля 2017 г.
set магия bash
$ set -xвыводит команды, которые выполняются в фоне.
Например есть put_out_the_trash.sh:
#!/bin/bash set -x touch cookiewrap mv cookiewrap dustbin mv dustbin trashcan_kitchen mv trashcan_kitchen outside
Если его выполнить веведется:
$ ./put_out_the_trash.sh + touch cookiewrap + mv cookiewrap dustbin + mv dustbin trashcan_kitchen + mv trashcan_kitchen outside $
$ set -eОзначает, что нужно прекратить работу скрипта, если хотя бы одна команда выполняемая в пайплайне вернет ненулевой результат
machinelearning and data science ресурсы
http://machinelearningmastery.com/best-machine-learning-resources-for-getting-started/
https://dou.ua/lenta/articles/data-science-in-outsource/?from=comment-digest_post&utm_source=transactional&utm_medium=email&utm_campaign=digest-comments
https://www.coursera.org/learn/machine-learning
https://dou.ua/lenta/articles/data-science-in-outsource/?from=comment-digest_post&utm_source=transactional&utm_medium=email&utm_campaign=digest-comments
воскресенье, 19 февраля 2017 г.
Logging with docker-compose
Есть множество драйверов для логирования: json-file, syslog, journald, gelf,awslogs и другие. json-file формат по умолчанию.
Теперь же можно настроить логирование на внешний сервис, который напримиер принимает логи в формате syslog
version: '2'
services:
worker:
image: tutum/hello-world
command: sh - c "while true; do echo test; done"
container_name: logs_gutler
logging:
driver: json-file
options:
max-file: "5"
max-size: "1m"
$ docker-compose up -d
$ docker inspect --format '{{.LogPath}}' logs_gutler
/var/lib/docker/containers/12fgsfgsdfgsdf....
Теперь же можно настроить логирование на внешний сервис, который напримиер принимает логи в формате syslog
version: '2'
services:
worker:
image: tutum/hello-world
command: sh - c "while true; do echo test; done"
container_name: logs_gutler
logging:
driver: syslog
options:
syslog-address: "udp://logs4.papertrailapp.com:33624"
Voluming with Docker-compose
Можно маунтить вольюмы в режиме только чтение(:ro):
Ну и конечно же мы можем подключать внешние томы, согданные вне компоуза
Чудесный прием для теста, согдать контейнр с образа, увидить то, что было нужно и удалить его после закрытия
version: '2'
services:
nginx:
image: nginx
volumes:
- ./cong.d:/etc/nginx/conf.d/:ro
ports:
- 80
Кстати, когда мы не указываем к какому именно порту примаунтить выставленный из контейнера порт, он маунтится на случайный свободный. Чтобы увидить на какой именно
порт он выставился:
$ docker-compose port nginx 80 0.0.0.0:32769
Именованные томы(named volumes)
Так мы маунтим не к относительному/абсолютному пути на локальной машине место в контейнере, а к "диску/тому", который мы будем делить между несколькими контейнерами, что позволит нам разумно использовать емности физического диска, а также позволим докер-демону позаботся самому где это место будет находится в реальной файловой системе, так мы убираем проблему запуска кластера на серверах где нет исходников для сборки, а только одна возможность сказать образы с реджистри.
version: '2'
services:
worker:
image: tutum/hello-world
volumes:
- results:/results
reposrting:
image: tutum/hello-world
volumes_from:
- worker:ro
volumes:
results:
Ну и конечно же мы можем подключать внешние томы, согданные вне компоуза
$ docker volume create --name images --driver=local
version: '2'
services:
resizer:
image: tutum/hello-world
volumes:
- images:/images:rw
volumes:
results:
external: true
Чудесный прием для теста, согдать контейнр с образа, увидить то, что было нужно и удалить его после закрытия
$ docker-compose up -d Creating network "0404_default" with the default driver Creating 0404_resizer_1 $ docker-compose exec resizer ls /images $ docker-compose exec resizer touch /images/pic.jpg $ docker run --rm -v images:/images tutum/hello-world ls /images pic.jpgКстати как и в случае с сетями, так и с дисками мы можем установить COMPOSE_PROJECT_NAME системную переменную или --project-name ключ, чтобы получать отличное от имени текущей директории.
Плагины
Позволяют томами подключать Asure, AWS S3 и другие.суббота, 18 февраля 2017 г.
Docker-compose networking
По умолчанию докер-компоуз всегда создает отдельную сеть типа мост, давая ей имя текущей директории с постфиксом _default. Чтобы дать определенное, можно либо определить системную переменную COMPOSE_PROJECT_NAME, либо указать имя проекта через ключ
$ docker-compose --project-name myProject up -d
суббота, 11 февраля 2017 г.
Docker-compose
docker-compose - инструмент для оркестрации мультиконтейнерного приложения.
docker-compose [COMMAND] -h - узнать помощь по конкретной команде.docker-compose up - запускает(билдит, стягивает, создает из образов контейнеры и потом запускает) все контейнеры
docker-compose up -d --no-deps [SERVICE_NAME] - пересоборать указанный сервис, при этом не ложить даже те, что от него зависят.
docker-compose ps - проверить текущее состояние контейнеро, упрвляемых композером
docker-compose logs - выводит цветные и собранные логи из контейров, упрвляемых композером, на момент вызова команды
docker-compose logs -f - выводит цветные и собранные логи из контейров, упрвляемых композером, в режиме постоянного наблюдения за текщими обновлениями
docker-compose logs [SERVICE_NAME] - выводит цветные и собранные логи из контейра с указанным именем
docker-compose stop - останавливаем без удаления контейнеры управляемые композером
docker-compose rm - удаляет контейнеры управляемые композером
docker-compose build - пересобирает все образы
docker-compose build [SERVICE_NAME,...] - пересобирает только указанные образы
docker-compose scale app=3 fe=2 - масшатбируем указанный сервис по имени до указанного количества контейнеров. Это не сработает, если сервису дали статическое имя контейнера
docker-compose pull - стягивает образы с реджистри, а не билдит их с нуля.
docker-compose create - создает контейнеры с образов, которые были до этого собраны(build) или скачены(pull).
docker-compose start - запускает созданные, но еще не запущенные, контейнеры.
docker-compose pause [SERVICE_NAME,...] - приостановть сервис, сохраняя его текущее состояние, с которого можно возобновить работу.
docker-compose unpause [SERVICE_NAME,...] - продолжить работу приостановленного сервиса/сервисов.
docker-compose run [SERVICE_NAME,...] [CMD] - запустаются команды типа "сдела одноразовое вычисление и положил контейнер". Собираются репорты, отправляются письма с накопившейся статистикой и подобные джобы.
docker-compose port --index=2 worker 80 - узнать порт сервиса, которому не было определено явного порта на хосте, ключ индекс же используется, когда сервис был отмасштабированный и нас интересует именно указанный по порядку поднятый контейнер этого сервиса.
docker-compose events - запускает процесс, который мониторит, что происходит в класете и сообщает об этом в консоль - например изменение масштабирования командой с другой сессии терминала, или падение какого-то контейнера и тому подобное.
docker-compose config - выводит содержимое компоуз файла, если в файле нет ошибок, или сообщение об ошибке - если есть.
Компоуз также будет использовать переменные среды, чтобы заменить на их значения места в docker-compose.yml. Чтобы выставить их по умолчанию, можно завести файл .env, который компоуз читает и применяет, если явно не были выставлены переменные среды при вызове или в системе.
Также можно подключать наружные файлы:
Все команды будут искать в текущей директории файл docker-compose.yml.
Или же можно через ключ -f(--file) FILE указать файл с любым именем из любого места.
-H(--host) HOST - указываем хост на котором находится демон докера для запуска кластера.
Ключи для защищенного соединения:
--tls
--tlscacert CA_PATH
--tlscert CLIENT_CERT_PATH
--tlskey TLS_KEY_PATH
--tlsverify
--skip-hostname-check
docker-compose scale app=3 fe=2 - масшатбируем указанный сервис по имени до указанного количества контейнеров. Это не сработает, если сервису дали статическое имя контейнера
container_name: someserive, потому что создать еще один контейнер с тем же именем не получится.docker-compose pull - стягивает образы с реджистри, а не билдит их с нуля.
docker-compose create - создает контейнеры с образов, которые были до этого собраны(build) или скачены(pull).
docker-compose start - запускает созданные, но еще не запущенные, контейнеры.
docker-compose pause [SERVICE_NAME,...] - приостановть сервис, сохраняя его текущее состояние, с которого можно возобновить работу.
docker-compose unpause [SERVICE_NAME,...] - продолжить работу приостановленного сервиса/сервисов.
docker-compose run [SERVICE_NAME,...] [CMD] - запустаются команды типа "сдела одноразовое вычисление и положил контейнер". Собираются репорты, отправляются письма с накопившейся статистикой и подобные джобы.
docker-compose port --index=2 worker 80 - узнать порт сервиса, которому не было определено явного порта на хосте, ключ индекс же используется, когда сервис был отмасштабированный и нас интересует именно указанный по порядку поднятый контейнер этого сервиса.
docker-compose events - запускает процесс, который мониторит, что происходит в класете и сообщает об этом в консоль - например изменение масштабирования командой с другой сессии терминала, или падение какого-то контейнера и тому подобное.
docker-compose config - выводит содержимое компоуз файла, если в файле нет ошибок, или сообщение об ошибке - если есть.
docker-compose down - stop, rm, rm networks, rm volumes(нужен ключ -v. --volumes), rm images(нужен ключ --rmi type(all or local)).
docker-compose restart - down, up.Компоуз также будет использовать переменные среды, чтобы заменить на их значения места в docker-compose.yml. Чтобы выставить их по умолчанию, можно завести файл .env, который компоуз читает и применяет, если явно не были выставлены переменные среды при вызове или в системе.
Также можно подключать наружные файлы:
version: '2'
services:
worker:
image: tutum/hello-world:${TAG}
environment:
- BAR
env_file:
- "staging.env"
ports:
- 80
Если мы указываем переменную окружения без значения в секции environment, то такая переменная мигрирует с хозяйской ОС в контейнер.
Все команды будут искать в текущей директории файл docker-compose.yml.
Или же можно через ключ -f(--file) FILE указать файл с любым именем из любого места.
-H(--host) HOST - указываем хост на котором находится демон докера для запуска кластера.
Ключи для защищенного соединения:
--tls
--tlscacert CA_PATH
--tlscert CLIENT_CERT_PATH
--tlskey TLS_KEY_PATH
--tlsverify
--skip-hostname-check
четверг, 2 февраля 2017 г.
Jenkins Workflow(pipeline): как собрать результаты тестов, если тесты выкинуть ненулевой ответ?
Есть два подхода:
1.
Jenkinsfile:
2.
Jenkinsfile:
1.
Jenkinsfile:
node {
/* .. snip .. */
stage('Test') {
/* `make check` returns non-zero on test failures,
* using `true` to allow the Pipeline to continue nonetheless
*/
sh 'make check || true' // <1>
junit '**/target/*.xml' // <2>
}
/* .. snip .. */
}
make check || true - этот трюк всегда вернет ненулевой ответ
2.
Jenkinsfile:
node {
/* .. snip .. */
stage('Test') {
try {
sh 'make check'
}
finally {
junit '**/target/*.xml'
}
}
/* .. snip .. */
}