Продолжаем внедрение проверки списка публичных репозиториев организации.
Напомню: идея состоит в том, что бы если кто-то из девелоперов случайно расшарит приватный репозиторий, или создаст новый репозиторий не приватным, а публичным — получить об этом уведомление в Slack.
Написание самой утилиты на Go есть в посте Go: проверка списка публичных репозиториев в Github и уведомления в Slack. Сравнение списков в Go. Первый опыт с Golang.
Теперь надо собрать Docker-образ и добавить джобу в Jenkins, которая будет запускаться каждую ночь и выполнять проверку.
Содержание
Dockerfile
Создаём Dockerfile
.
Используем golang:alpine
, в который:
- копируем файл утилиты
- выполняем установку зависимостей
- собираем бинарник в каталог
/go/bin
какgithub-checker
- задаём действие по умолчанию — запуск
/go/bin/github-checker
Файл:
# alpine as mininal image FROM golang:alpine # git for go get RUN apk update && apk add --no-cache git # copy source from a current dir COPY go-github-public-repos-checker.go . # install deps RUN go get -d -v # build to /go/bin RUN go build -o /go/bin/github-checker # set default entrypoint CMD ["/go/bin/github-checker"]
Про CMD
vs ENTRYPOINT
хорошо написано
Собираем образ:
Проверяем.
Задаём переменные:
Запускаем, передавая переменные через -e
:
Пушим в DockerHub:
Jenkins
Создаём новую джобу, вызываем Docker через Pipeline script:
Сам скрипт:
node { stage('Check repositories') { docker.image('projectname/projectname-github-checker:1.0').run("-e GITHUB_ORG_NAME=${GITHUB_ORG_NAME} \ -e ALLOWED_REPOS=${ALLOWED_REPOS} \ -e SLACK_CHANNEL=${SLACK_CHANNEL} \ -e SLACK_URL=${SLACK_URL}") } }
Добавляем параметры, которые будут передаваться как переменные в Docker-контейнер.
SLACK_URL
содержит токен, поэтому его задаём как Password Parameter.
ALLOWED_REPOS
указываем в кавычках, т.к. там список, который потом должен распарситься в Go:
Добавляем запуск по расписанию, можно использовать
Запускаем, для проверки — без одного из наших публичных репозиториев в списке ALLOWED_REPOS
:
Готово.