J'ai un package Python privé mais je souhaite installer pipenv sur GitHub Actions et créer une image Docker

introduction

Partagez vos connaissances jusqu'à la création d'une image Docker sur des actions GitHub dans un projet Python qui utilise des packages Python dans un référentiel privé sur GitHub.

Version / environnement

manière

Vérifiez Pipfile.lock

Utilisez pipenv.

Assurez-vous que Pipfile.lock est configuré pour installer le référentiel privé comme indiqué ci-dessous.

Pipfile.Partie de la serrure


        "private-repository-package": {
            "editable": true,
            "git": "https://github.com/username/private-repository-package.git",
            "ref": "812u4dd76db6298ce50b5569a9a1d80759ba6e80"
        },

Cette fois, nous installerons en utilisant netrc, donc installez avec https. Vous pouvez installer la version que vous souhaitez spécifier en définissant ref = commit hash.

Si vous ne l'avez pas déjà installé, installez-le localement, comme pipenv install private-repository-package, modifiez la référence et réinstallez pipenv install pour le mettre à jour.

Consultez la documentation officielle pour plus de détails. document officiel pipenv

Dockerfile

Le contenu du Dockerfile.

L'image est -slim. -La taille de l'image peut être réduite d'environ 1/3 par rapport à l'image non mince.

Dockerfile


FROM python:3.8.2-slim

RUN apt-get update && \
    apt-get install -y --no-install-recommends \
    ca-certificates \
    git \
    && apt-get clean && \
    rm -rf /var/lib/apt/lists/*

ENV WORKDIR /app/
WORKDIR ${WORKDIR}
COPY Pipfile Pipfile.lock ${WORKDIR}

# setup .netrc to install dependencies in private GitHub repository
ARG PRIVATE_REPO_ACCESS_KEY
RUN echo "machine github.com" > /root/.netrc && \
    echo "login $PRIVATE_REPO_ACCESS_KEY" >> /root/.netrc && \
    echo "passowrd x-oauth-basic" >> /root/.netrc && \
    chmod 600 /root/.netrc

# install Python dependencies
RUN pip install pipenv --no-cache-dir && \
    pipenv install --system --deploy && \
    pip uninstall -y pipenv virtualenv-clone virtualenv

# remove anythings security and uncessary
RUN rm /root/.netrc && \
    rm Pipfile Pipfile.lock

COPY src/ $WORKDIR

CMD python ./run.py

Le fait est qu'il utilise netrc. Il prend l'argument PRIVATE_REPO_ACCESS_KEY de l'extérieur (cette fois GitHub Actions) et le passe au fichier / root / .netrc pour permettre l'accès https au référentiel privé sur GitHub.

Ensuite, en utilisant ce fichier .netrc, une fois l'installation de pipenv terminée,

# remove anythings security and uncessary
RUN rm /root/.netrc && \
    rm Pipfile Pipfile.lock

En incluant ce processus, la valeur de PRIVATE_REPO_ACCESS_KEY ne sera pas effacée et laissée dans l'image Docker.

GitHub Actions

Obtenez un jeton personnel GitHub et définissez-le sur Secret

Obtenez un jeton personnel pour accéder à votre référentiel privé sur GitHub. La méthode est facile à comprendre ce document officiel ..

Ensuite, enregistrez le jeton personnel obtenu dans Secret from Setting du référentiel GitHub cible. Cette méthode est également illustrée dans d'autres articles avec des chiffres. La documentation officielle est ici.

GitHub Actions Yaml

Obtenez le jeton personnel défini ci-dessus à partir du secret et transmettez-le à la commande docker en tant que PRIVATE_REPO_ACCESS_KEY dans le Dockerfile plus tôt pour effectuer le processus de création d'image.

Fait partie de GitHub Actions Workflow Yaml


      env:
        PRIVATE_REPO_ACCESS_KEY: ${{ secrets.PRIVATE_REPO_ACCESS_KEY }}
      run: |
        docker build --build-arg PRIVATE_REPO_ACCESS_KEY=${PRIVATE_REPO_ACCESS_KEY} .

référence

Recommended Posts

J'ai un package Python privé mais je souhaite installer pipenv sur GitHub Actions et créer une image Docker
Je veux créer un environnement Python
Je veux trouver un package populaire sur PyPi
Comment créer un environnement Django (python) sur Docker
Je souhaite installer un package de Php Redis
Comment créer un bel environnement Python sur un nouveau Mac et installer Jupter Notebook
Je veux installer le package de requirements.txt avec poésie
Procédure pour créer un Job qui extrait une image Docker et la teste avec des actions Github
Je veux savoir si vous installez Python sur Mac ・ Iroha
Je veux créer un fichier pip et le refléter dans le menu fixe
Je veux tweeter Twitter avec Python, mais j'y suis accro
[Python] Créez un linebot pour écrire le nom et l'âge sur l'image
J'ai essayé d'installer Docker sur Windows10 Home mais cela n'a pas fonctionné
Je veux formater et vérifier le code Python à mon goût sur VS Code
Construisez Linux sur un environnement Windows. Étapes pour installer Laradock et migrer
Je souhaite créer une application Web en utilisant React et Python flask
Je souhaite utiliser Python dans l'environnement de pyenv + pipenv sous Windows 10
Je veux juste ajouter scipy, mais c'est un mémo amusant. Ubuntu, Python 3.
Je veux déposer un fichier sur tkinter et obtenir son chemin [Tkinter DnD2]
Construisez un environnement Python + bouteille + MySQL avec Docker sur RaspberryPi3! [Essai et erreur]
Je veux exécuter et distribuer un programme qui redimensionne les images Python3 + pyinstaller
[Linux] Vous ne disposez pas des privilèges root. Mais je veux yum installer.
Créez une application de ligne de commande en Python pour comprendre les actions setup.py, argparse et GitHub
Je veux créer une fenêtre avec Python
Je veux faire un jeu avec Python
Je veux faire pyenv + pipenv même sous Windows
Je veux écrire dans un fichier avec Python
Je souhaite prendre une capture d'écran du site sur Docker en utilisant n'importe quelle police
Je souhaite intégrer une variable dans une chaîne Python
Je veux facilement implémenter le délai d'expiration en python
Je veux répéter plusieurs fois un générateur Python
Installez Python 3 sur Mac et créez un environnement [Definitive Edition]
100 coups sur le traitement d'image !! (021-030) Je veux faire une pause ...
Je veux générer rapidement UUID (memo memo) ~ Edition Python ~
Je veux écrire en Python! (2) Écrivons un test
Je veux échantillonner au hasard un fichier avec Python
Je souhaite créer facilement un environnement de développement basé sur un modèle
Je veux travailler avec un robot en python.
[Go + Gin] J'ai essayé de créer un environnement Docker
[Python] Je veux faire d'une liste imbriquée un taple
Je veux AWS Lambda avec Python sur Mac!
Comment créer un environnement Python sur Amazon Linux 2
Je veux faire fonctionner un ordinateur quantique avec Python
J'ai essayé d'installer scrapy sur Anaconda et je n'ai pas pu
Il est difficile d'installer un écran vert, je n'ai donc découpé que le visage et l'ai superposé sur l'image de fond
Comment créer un environnement d'exécution virtuelle pour Python à l'aide de Visual Studio Code et de pipenv sur une machine Windows (également le notebook Jupyter)
Je veux découper uniquement le visage d'une image de personne avec Python et l'enregistrer ~ Détection de visage et rognage avec face_recognition ~
[Linux] Comment installer un package sur un serveur qui n’a pas d’environnement Internet (autonome)
Quand j'ai essayé de créer un environnement Rails sur WSL2 (Ubuntu 20.04LTS), j'ai trébuché et suis tombé.
Je souhaite configurer un environnement de développement GUI avec Python ou Golang sur Mac
Je veux absorber la différence entre l'instruction for sur la matrice Python + numpy et l'instruction Julia for
Je souhaite créer une source sonore de karaoké en séparant les instruments et les voix en utilisant Python
Je veux faire un changeur de voix en utilisant Python et SPTK en référence à un site célèbre
Installez Python 3.6 sur Docker
Comment créer un nouvel environnement virtuel Python sur Ubuntu
J'ai créé un package pour filtrer les séries chronologiques avec python
Je veux démarrer beaucoup de processus à partir de python