Продолжаем внедрение проверки списка публичных репозиториев организации.
Напомню: идея состоит в том, что бы если кто-то из девелоперов случайно расшарит приватный репозиторий, или создаст новый репозиторий не приватным, а публичным – получить об этом уведомление в 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
хорошо написано тут>>>.
Собираем образ:
[simterm]
$ docker build -t projectname/projectname-github-checker:1.0 .
[/simterm]
Проверяем.
Задаём переменные:
[simterm]
$ export GITHUB_ORG_NAME="rtfmorg" $ export ALLOWED_REPOS="org-repo-1-pub org-repo-2-pub" $ export SLACK_CHANNEL="#general" $ export SLACK_URL="https://hooks.slack.com/services/T16***WRE"
[/simterm]
Запускаем, передавая переменные через -e
:
[simterm]
$ docker run -ti -e GITHUB_ORG_NAME=${GITHUB_ORG_NAME} -e ALLOWED_REPOS="${ALLOWED_REPOS}" -e SLACK_CHANNEL=${SLACK_CHANNEL} -e SLACK_URL=${SLACK_URL} projectname/projectname-github-checker:1.0 Checking org-repo-1-pub OK: repo org-repo-1-pub found in Allowed Checking org-repo-2-pub OK: repo org-repo-2-pub found in Allowed
[/simterm]
Пушим в DockerHub:
[simterm]
root@jenkins-production:/home/admin# docker push projectname/projectname-github-checker:1.0
[/simterm]
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:
Добавляем запуск по расписанию, можно использовать crontab.guru:
Запускаем, для проверки – без одного из наших публичных репозиториев в списке ALLOWED_REPOS
:
Готово.