Рубрики
Uncategorized

От Gitlab в Heroku с Docker

После написания кода проекта и тестированием его в местной среде разработки вы должны сделать … Теги с DevOps, Git, Docker.

После написания кода проекта и тестировании его в местной среде разработки необходимо создать репозиторий GitLab и загрузить код и настроить для развертывания к Heroku.

.gitignore.

Добавить .gitignore Файл на ваш репозиторий, чтобы временные файлы и каталоги, созданные в процессе здания, не загружаются в GitLab. Вы можете использовать шаблоны, предоставляемые GitLab или генерировать этот файл в gitignore.io Отказ

Просто введите в строке поиска Технологии, которые вы используете для проекта, и она будет генерировать файл для вас.

Файл будет выглядеть следующим образом:

# Created by https://www.gitignore.io/api/rust,python
# Edit at https://www.gitignore.io/?templates=rust,python

### Python ###
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
pip-wheel-metadata/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# PyInstaller
#  Usually these files are written by a python script from a template
#  before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
.pytest_cache/

# Translations
*.mo
*.pot

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/_build/

# PyBuilder
target/

# pyenv
.python-version

# pipenv
#   According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
#   However, in case of collaboration, if having platform-specific dependencies or dependencies
#   having no cross-platform support, pipenv may install dependencies that don't work, or not
#   install all needed dependencies.
#Pipfile.lock

# celery beat schedule file
celerybeat-schedule

# SageMath parsed files
*.sage.py

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# Mr Developer
.mr.developer.cfg
.project
.pydevproject

# mkdocs documentation
/site

# mypy
.mypy_cache/
.dmypy.json
dmypy.json

# Pyre type checker
.pyre/

### Rust ###
# Generated by Cargo
# will have compiled files and executables
/target/

# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries
# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html
Cargo.lock

# These are backup files generated by rustfmt
**/*.rs.bk

# End of https://www.gitignore.io/api/rust,python

Heroku

Перед настройкой репозитория вы должны создать приложение Heroku.

Перейти к Dashboard.heroku.com/account и скопируйте ключ API.

Dockerfile

Создайте новый Dockerfile в своем хранилище. Он будет иметь следующий контент:

FROM docker.io/username/rust-python:latest

WORKDIR /home/admin
USER admin
RUN mkdir app
WORKDIR app

RUN env PYTHON_CONFIGURE_OPTS='--enable-shared' pyenv install 3.7.7
ENV LD_LIBRARY_PATH $HOME/.pyenv/versions/3.7.7/lib/

RUN pyenv global 3.7.7
RUN pyenv rehash

RUN rustup override set nightly

COPY pyproject.toml ./

RUN poetry config virtualenvs.create false \
    && poetry lock \
    && poetry export --without-hashes -f requirements.txt --dev \
    |  poetry run pip install -r /dev/stdin \
    && poetry debug

COPY  . ./

RUN poetry install --no-interaction \
    && cargo build --release

CMD ["sh", "run"]

По словам этот вопрос Адрес реестра контейнера (Docker.io) должен быть указан до имени базового изображения для Buillah, чтобы правильно вытащить изображение из Docker Hub.

Базовое изображение, используемое для проекта, будет создан ранее и доступен от Имя пользователя/Rust-Python: последние Отказ

Затем установите Workdir к /home/admin и Пользователь к админ . Создать приложение каталог и установить его как Workdir Отказ

Установите Python 3.7.7 с общими библиотеками и установить Ld_library_path Переменная среды.

Укажите версию Python и Ruad для использования.

Скопируйте pyproject.toml файл. Поэзия используется для управления зависимостями Python, но не будет создана виртуальная среда.

Затем заблокируйте зависимости и экспортируйте до требования .txt Файл и установите их, используя пипс Это делается для создания кэширования их.

Затем установите зависимости Python и Rust в зависимости от проекта и создайте проект для производства.

Когда создается создаваемое изображение Docker, Bash Скрипт по имени Беги выполняется.

Беги Сценарий Bash имеет следующий контент, чтобы Heroku знает, как запустить приложение:

ROCKET_PORT=$PORT ROCKET_ENV=prod ./target/release/rust-python-demo

Переменная $ Порт Установлен Heroku, поскольку он динамически выбирает порт для приложения, это значение присвоено Rocket_port Отказ Тогда окружающая среда устанавливается на производство с Rocket_env = Prod И двоичное приложение запущено.

Gitlab ci.

Добавьте значение ключа API Heroku, которую вы скопировали до настроек репозитория, следуя ступеням ниже:

  • Перейти к Настройки > CI/CD Отказ
  • В Переменные Раздел Нажмите на Развернуть Отказ
  • Добавьте переменную Heroku_api_key и назначьте значение копированию ранее.

Затем добавьте .gitlab-ci.yml Файл, это файл конфигурации непрерывной интеграции системы, предоставленной GitLab.

Для этого я просто следую следующую руководству Alessandro Diafia на Непрерывное развертывание с GitLab, Docker и Heroku Отказ

Файл будет выглядеть следующим образом:

stages:
  - build
  - release

build_image:
  only:
    - master
  image: registry.gitlab.com/majorhayden/container-buildah
  stage: build
  variables:
    STORAGE_DRIVER: "vfs"
    BUILDAH_FORMAT: "docker"
  before_script:
    - dnf install -y nodejs
    - curl https://cli-assets.heroku.com/install.sh | sh
    - sed -i '/^mountopt =.*/d' /etc/containers/storage.conf
  script:
    - buildah bud --iidfile iidfile -t rust-python-demo:$CI_COMMIT_SHORT_SHA .
    - buildah push --creds=_:$(heroku auth:token) $(cat iidfile) registry.heroku.com/heroku-app-name /web

release:
  only:
    - master
  image: node:10.17-alpine
  stage: release
  before_script:
    - apk add curl bash
    - curl https://cli-assets.heroku.com/install.sh | sh
  script:
    - heroku container:release -a heroku-app-name web

У него будут только две этапы, build_image , где изображение Docker построен с использованием DockerFile, созданный ранее и добавлен в реестр Heroku, и Выпуск , где изображение будет толкаться в приложение Heroku.

Просто заменить Registry.heroku.com/heroku-app-name/Web и Heroku Container: Release-A Heroku-Name Web С именем приложения, которое вы создали на Heroku.

Если все пойдет хорошо, задания трубопровода добится успеха, и ваше приложение развернуто в Heroku.

Вы можете пойти в Rust-Python-demo.herokuapp.com Чтобы увидеть живую демонстрацию.

Оригинал: «https://dev.to/mattdark/from-gitlab-to-heroku-with-docker-3db2»