🐓
pypc-tlbx
  • py_poc_toolbox
  • pages
    • Sphinx
    • pre-commit
    • line_profiler
    • Postgres
    • Питон-пакеты и PyPI
    • ElasticSearch
    • Рандом
    • DDD
  • Devops
    • Supervisor
    • Jenkins
    • Docker
    • Jenkins + Docker
Powered by GitBook
On this page
  • Запуск Jenkins в контейнере
  • Создание Item'а сборки
  • Jenkinsfile
  • Ссылки

Was this helpful?

  1. Devops

Jenkins + Docker

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

Запуск Jenkins в контейнере

Делаем Dockerfile, на основе которого собираем jenkins-контейнер с докером на борту:

FROM jenkins/jenkins:lts

USER root

# Ставим докер
RUN apt-get update
RUN apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg2 \
    software-properties-common -y
RUN curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
RUN add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/debian \
   $(lsb_release -cs) \
   stable" 
RUN apt-get update
RUN apt-get install docker-ce docker-ce-cli containerd.io -y

# Даем права на использование докера jenkins-юзеру
RUN usermod -aG docker jenkins

USER jenkins

Чтоб на локалке не запускать докер через sudo, нужно добавить себя в докер группу:

sudo usermod -a -G docker $USER

и переподключиться по ssh

Собираем:

docker build -t jenkins-docker .

Запускаем собранный контейнер:

docker run -p 8081:8080 -p 50000:50000 -d \
    --restart unless-stopped \
    -v /opt/jenkins_home:/var/jenkins_home \
    -v /var/run/docker.sock:/var/run/docker.sock \
    --name jenkins jenkins-docker

Поподробнее:

  • -p 8081:8080 -p 50000:50000 - открываем порты для внешнего мира

  • --restart unless-stopped - перезапуск, если контейнер не застопан руками

  • -v /opt/jenkins_home:/var/jenkins_home - связваем контейнер с директорией /opt/jenkins_home, чтоб все работало при перезапуске контейнера

  • -v /var/run/docker.sock:/var/run/docker.sock - связываем докер внутри контейнера с докером на локалке, чтоб jenkins мог деплоить контейнеры на локалку

  • --name jenkins jenkins-docker - обзываем контейнер и запускаем сборку

После запуска jenkins должен начать робить на 8081 порту

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

cat /opt/jenkins_home/secrets/initialAdminAndPassword

Создание Item'а сборки

В данном туториале, будем делать item с типом pipeline:

В Pipeline > Definition указываем путь к репозиторию, где лежит Jenkinsfile (о нем ниже)

Если репозиторий приватный, то можно задать доступы используемые при клонировании:

Важно задать ID, чтобы можно было использовать доступ на этапе сборки

Jenkinsfile

Стадии сборки можно определять в специальном файле - Jenkinsfile:

node {
  stage ('Checkout') {
    environment {
          BITBUCKET_COMMON_CREDS = credentials('19c1840f-f749-47cd-b81f-74ad3c44e21d')
    }

    checkout scm
  }

  stage 'build'
  docker.build('rbcn_app_front')

  stage 'deploy'
  sh 'bash deploy.sh'
}

Файл выше делает следующие вещи:

  • клонит репозиторий, используя доступы с созданным ранее ID

  • Запускает docker build

  • Запускает bash-скрипт, который перезапускает docker-контейнер со свежей сборкой:

#!/bin/bash
docker stop rbcn_app_front
docker rm rbcn_app_front
docker run --name rbcn_app_front -p 3001:3000 -d rbcn_app_front

Когда файл запушен, можно начинать сборку

Ссылки

PreviousDocker

Last updated 5 years ago

Was this helpful?

Jenkins-контейнер сделан на основе Debian, соответственно Docker нужно ставить

В Build Trigger ставим Build when a change is pushed to BitBucket - для запуска сборки при пуше в репозиторий (доступно с ). Также необходимо создать вебхук в BitBicket:

как на Debian
плагином
Основа
Jenkins-контейнер
Гайд по Jenkinsfile
Интерфейс Jenkins после аутентификации