После написания кода проекта и тестировании его в местной среде разработки необходимо создать репозиторий 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»