Прощай, Дженкинс! Несколько строк скрипта для автоматизации развертывания, этот артефакт немного мощен!

Java Docker
Прощай, Дженкинс! Несколько строк скрипта для автоматизации развертывания, этот артефакт немного мощен!

Адрес фактического центра электронной коммерции SpringBoot (40k+star):GitHub.com/macro-positive/…

Резюме

В средах разработки или производства мы часто разрабатываем решение для автоматизированного развертывания (обычно называемое развертыванием в один клик). Более популярным является решение для внедрения Gitlab+Jenkins, но оно занимает много памяти, памяти 8G нет, его сложно запустить, а развертывание не быстрое. Недавно нашел артефакт Drone, легкий инструмент CI/DI, в сочетании с Gogs для использования менее 1G памяти, несколько строк скриптов могут добиться автоматического развертывания, всем рекомендую!

Знакомство с дроном

Drone — это инструмент непрерывной интеграции, основанный на технологии контейнеров. Он может выполнять сложные автоматизированные задачи по созданию, тестированию и развертыванию с помощью простых файлов конфигурации YAML. На Github уже есть 22 000 звезд.

Установка очков

Мы будем использовать облегченные Gogs для создания репозитория Git, вот лишь краткое описание шагов установки, вы можете обратиться к конкретному использованию«Github Star 34K+Star, этот проект с открытым исходным кодом поможет вам создавать сервисы Git за считанные секунды! 》.

  • Во-первых, вам нужно загрузить Docker-образ Gogs;
docker pull gogs/gogs
  • Запустите Gogs в контейнере Docker после завершения загрузки;
docker run -p 10022:22 -p 10080:3000 --name=gogs \
-e TZ="Asia/Shanghai" \
-v /mydata/gogs:/data  \
-d gogs/gogs
  • После успешного запуска Gogs посетите адрес веб-страницы и зарегистрируйте учетную запись:http://192.168.5.78:10080

  • Затем поместите наш проект SpringBootmall-tiny-droneИсходный код можно загрузить, адрес проекта:GitHub.com/macro-positive/…

Установка дрона

Теперь давайте установим Drone, который действительно является контейнерным инструментом CI/DI, который очень удобно устанавливать с помощью Docker!

  • Сначала загрузите образы Drone's Server и Runner;
# Drone的Server
docker pull drone/drone:1
# Drone的Runner
docker pull drone-runner-docker:1
  • Существует концепция сервера и исполнителя, давайте сначала разберемся с ней;
    • Сервер: предоставляет веб-страницу для управления дроном для управления задачами конвейера в репозиториях, полученных из Git.
    • Runner: отдельный процесс-демон, который опрашивает сервер, чтобы получить конвейерные задачи, которые необходимо выполнить, а затем выполняет их.
  • Далее мы установимdrone-server, используйте следующую команду;
docker run \
  -v /mydata/drone:/data \
  -e DRONE_AGENTS_ENABLED=true \
  -e DRONE_GOGS_SERVER=http://192.168.5.78:10080 \
  -e DRONE_RPC_SECRET=dronerpc666 \
  -e DRONE_SERVER_HOST=192.168.5.78:3080 \
  -e DRONE_SERVER_PROTO=http \
  -e DRONE_USER_CREATE=username:macro,admin:true \
  -e TZ="Asia/Shanghai" \
  -p 3080:80 \
  --restart=always \
  --detach=true \
  --name=drone \
  drone/drone:1
  • Здесь есть много параметров конфигурации, которые будут объяснены ниже;

    • DRONE_GOGS_SERVER: используется для настройки адреса службы Gogs.
    • DRONE RPC SECRET: общий секрет дрона, используемый для проверки соединения rpc с сервером, сервер и исполнитель должны предоставить один и тот же секрет.
    • DRONE_SERVER_HOST: используется для настройки адреса, доступного за пределами сервера Drone.
    • DRONE_SERVER_PROTO: используется для настройки доступного извне протокола сервера Drone, который должен быть http или https.
    • DRONE_USER_CREATE: Создайте учетную запись администратора, которую необходимо зарегистрировать в Gogs.
  • Следующая установкаdrone-runner-docker, когда есть задача, которую необходимо выполнить, будет запущен временный контейнер для выполнения задачи конвейера;

docker run -d \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -e DRONE_RPC_PROTO=http \
  -e DRONE_RPC_HOST=192.168.5.78:3080 \
  -e DRONE_RPC_SECRET=dronerpc666 \
  -e DRONE_RUNNER_CAPACITY=2 \
  -e DRONE_RUNNER_NAME=runner-docker \
  -e TZ="Asia/Shanghai" \
  -p 3000:3000 \
  --restart always \
  --name runner-docker \
  drone/drone-runner-docker:1
  • Здесь есть много параметров конфигурации, которые объясняются ниже.
    • DRONE_RPC_PROTO: протокол, используемый для настройки подключения к серверу Drone, это должен быть http или https.
    • DRONE_RPC_HOST: используется для настройки адреса доступа к серверу Drone, бегун будет подключаться к серверу для получения конвейерных задач и их выполнения.
    • DRONE_RPC_SECRET: общий секрет, используемый для настройки подключения к серверу Drone.
    • DRONE_RUNNER_CAPACITY: ограничивает количество задач конвейера, которые бегун может выполнять одновременно.
    • DRONE_RUNNER_NAME: имя пользовательского бегуна.

Использование дронов

  • Давайте посетим консольную страницу Drone, Для первого входа в систему вам нужно ввести пароль учетной записи (аккаунт, зарегистрированный в Gogs), а адрес доступа:http://192.168.5.78:3080/

  • В этот момент наш проект в Gogs теперь будет в списке, если нет, вы можете нажатьSYNCкнопка;

  • Далее нам нужно настроить склад, установить склад наTrusted(В противном случае контейнер, созданный Drone, не сможет подключить каталог к ​​хосту) и, наконец, нажмитеSAVEкнопка для сохранения;

  • После успешного сохранения в Gogs будет автоматически настроен веб-хук.Когда мы отправим код в Gogs, этот хук сработает, а затем будет выполнена конвейерная задача в Drone;

  • Потяните вниз, мы можем отправить тестовый толчок, и зеленый √ будет отображаться, если толчок будет успешным;

  • На данный момент мы обнаружили в Drone, что выполнение конвейера не удалось, потому что мы ссылались на секрет в сценарии.ssh_password;

  • Просто добавьте Секрет в настройках хранилища.Секрет специально используется для хранения паролей.Этот пароль можно только использовать или удалить и его нельзя просмотреть;

  • существуетACTIVITY FEEDиспользуется вRESTARTКонвейер можно запустить повторно, и будет установлено, что он выполнен успешно.

писать сценарии

Когда мы отправим код в репозиторий Git, автоматически сработает веб-хук, а затем Drone клонирует код из репозитория Git, а затем передаст код в каталог проекта..drone.ymlНастройте и запустите соответствующий конвейер.Далее давайте посмотрим, как написан этот скрипт.

  • Сначала давайте разберемся.drone.ymlКакие операции рабочего процесса настроены в , просто посмотрите на блок-схему, чтобы узнать;

  • другой полный.drone.yml, с подробными аннотациями, в принципе понять можно после прочтения!
kind: pipeline # 定义对象类型,还有secret和signature两种类型
type: docker # 定义流水线类型,还有kubernetes、exec、ssh等类型
name: mall-tiny-drone # 定义流水线名称

steps: # 定义流水线执行步骤,这些步骤将顺序执行
  - name: package # 流水线名称
    image: maven:3-jdk-8 # 定义创建容器的Docker镜像
    volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置
      - name: maven-cache
        path: /root/.m2 # 将maven下载依赖的目录挂载出来,防止重复下载
      - name: maven-build
        path: /app/build # 将应用打包好的Jar和执行脚本挂载出来
    commands: # 定义在Docker容器中执行的shell命令
      - mvn clean package # 应用打包命令
      - cp target/mall-tiny-drone-1.0-SNAPSHOT.jar /app/build/mall-tiny-drone-1.0-SNAPSHOT.jar
      - cp Dockerfile /app/build/Dockerfile
      - cp run.sh /app/build/run.sh

  - name: build-start
    image: appleboy/drone-ssh # SSH工具镜像
    settings:
      host: 192.168.5.78 # 远程连接地址
      username: root # 远程连接账号
      password:
        from_secret: ssh_password # 从Secret中读取SSH密码
      port: 22 # 远程连接端口
      command_timeout: 5m # 远程执行命令超时时间
      script:
        - cd /mydata/maven/build # 进入宿主机构建目录
        - chmod +x run.sh # 更改为可执行脚本
        - ./run.sh # 运行脚本打包应用镜像并运行

volumes: # 定义流水线挂载目录,用于共享数据
  - name: maven-build
    host:
      path: /mydata/maven/build # 从宿主机中挂载的目录
  - name: maven-cache
    host:
      path: /mydata/maven/cache

Суммировать

По сравнению со сложным графическим интерфейсом Jenkins использование скриптов Drone для определения конвейерных задач, несомненно, проще и интуитивно понятнее. Дрон более легкий, имеет небольшой объем памяти и очень отзывчивый! Что такое Jenkins для автоматизированного развертывания? Не было бы неплохо передать Git всю функцию CI/DI напрямую?

использованная литература

Адрес исходного кода проекта

GitHub.com/macro-positive/…

Эта статьяGitHubGitHub.com/macro-positive/…Записано, приветствую всех на Star!