Ich habe ein privates Python-Paket, möchte aber pipenv auf GitHub Actions installieren und ein Docker-Image erstellen

Einführung

Teilen Sie Ihr Wissen mit, um Docker Image auf GitHub-Aktionen in einem Python-Projekt zu erstellen, das Python-Pakete in einem privaten Repository auf GitHub verwendet.

Version / Umgebung

Weise

Überprüfen Sie Pipfile.lock

Verwenden Sie pipenv.

Stellen Sie sicher, dass "Pipfile.lock" so eingestellt ist, dass das private Repository wie unten gezeigt installiert wird.

Pipfile.Teil des Schlosses


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

Dieses Mal werden wir mit netrc installieren. Installieren Sie also mit https. Sie können die Version installieren, die Sie angeben möchten, indem Sie "ref = commit hash" festlegen.

Wenn Sie es noch nicht installiert haben, installieren Sie es lokal, z. B. "pipenv install private-repository-package", ändern Sie die Referenz und installieren Sie "pipenv install" erneut, um es zu aktualisieren.

Weitere Informationen finden Sie in der offiziellen Dokumentation. offizielles pipenv-Dokument

Dockerfile

Der Inhalt der Docker-Datei.

Das Bild ist -slim. -Die Größe des Bildes kann im Vergleich zum nicht schlanken Bild um etwa 1/3 verringert werden.

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

Der Punkt ist, dass es [netrc] verwendet (https://linuxjm.osdn.jp/html/netkit/man5/netrc.5.html). Es nimmt das Argument "PRIVATE_REPO_ACCESS_KEY" von außen (diesmal GitHub-Aktionen) und übergibt es an die Datei "/ root / .netrc", um https den Zugriff auf das private Repository auf GitHub zu ermöglichen.

Verwenden Sie dann diese .netrc-Datei, nachdem die Installation von pipenv abgeschlossen ist.

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

Durch Einbeziehen dieses Prozesses wird der Wert von "PRIVATE_REPO_ACCESS_KEY" nicht gelöscht und im Docker-Image belassen.

GitHub Actions

Holen Sie sich ein persönliches GitHub-Token und setzen Sie es auf Secret

Erhalten Sie ein persönliches Token, um auf Ihr privates Repository auf GitHub zuzugreifen. Die Methode ist leicht zu verstehen dieses offizielle Dokument ..

Registrieren Sie dann das erhaltene persönliche Token in Secret from Setting des Ziel-GitHub-Repositorys. Diese Methode wird auch in anderen Artikeln mit Abbildungen gezeigt. Die offizielle Dokumentation finden Sie hier.

GitHub Actions Yaml

Beziehen Sie das oben festgelegte persönliche Token aus dem Geheimnis und übergeben Sie es an den Docker-Befehl als "PRIVATE_REPO_ACCESS_KEY" in der Docker-Datei, um den Image-Erstellungsprozess auszuführen.

Teil des 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} .

Referenz

Recommended Posts

Ich habe ein privates Python-Paket, möchte aber pipenv auf GitHub Actions installieren und ein Docker-Image erstellen
Ich möchte eine Python-Umgebung erstellen
Ich möchte ein beliebtes Paket auf PyPi finden
So erstellen Sie eine Django (Python) -Umgebung auf Docker
Ich möchte ein Paket von Php Redis installieren
So erstellen Sie eine schöne Python-Umgebung auf einem neuen Mac und installieren Jupter Notebook
Ich möchte das Paket aus den Anforderungen.txt mit Poesie installieren
Schritte zum Erstellen eines Jobs, der ein Docker-Image abruft und mit Github-Aktionen testet
Ich möchte wissen, ob Sie Python auf Mac ・ Iroha installieren
Ich möchte eine Pipfile erstellen und im Docker wiedergeben
Ich möchte Twitter mit Python twittern, bin aber süchtig danach
[Python] Erstellen Sie einen Linebot, um den Namen und das Alter auf das Bild zu schreiben
Ich habe versucht, Docker unter Windows 10 Home zu installieren, aber es hat nicht funktioniert
Ich möchte Python-Code auf VS-Code nach meinen Wünschen formatieren und überprüfen
Erstellen Sie Linux in einer Windows-Umgebung. Schritte zum Installieren und Migrieren von Laradock
Ich möchte eine Webanwendung mit React und Python Flask erstellen
Ich möchte Python in der Umgebung von pyenv + pipenv unter Windows 10 verwenden
Ich möchte nur scipy hinzufügen, aber es ist ein lustiges Memo. Ubuntu, Python 3.
Ich möchte eine Datei auf tkinter ablegen und ihren Pfad abrufen [Tkinter DnD2]
Erstellen Sie mit Docker auf RaspberryPi3 eine Python + Flasche + MySQL-Umgebung! [Versuch und Irrtum]
Ich möchte ein Programm ausführen und verteilen, das die Größe von Bildern in Python3 + Pyinstaller ändert
[Linux] Sie haben keine Root-Rechte. Aber ich möchte yum installieren.
Erstellen Sie eine Befehlszeilen-App in Python, um die Aktionen setup.py, argparse und GitHub zu verstehen
Ich möchte mit Python ein Fenster erstellen
Ich möchte ein Spiel mit Python machen
Ich möchte pyenv + pipenv auch unter Windows machen
Ich möchte mit Python in eine Datei schreiben
Ich möchte einen Screenshot der Site in Docker mit einer beliebigen Schriftart erstellen
Ich möchte eine Variable in einen Python-String einbetten
Ich möchte Timeout einfach in Python implementieren
Ich möchte einen Python-Generator viele Male iterieren
Installieren Sie Python3 auf einem Mac und erstellen Sie eine Umgebung [Definitive Edition]
100 Klopfen bei der Bildverarbeitung !! (021-030) Ich möchte eine Pause machen ...
Ich möchte schnell UUID generieren (Gedenknotiz) ~ Python Edition ~
Ich möchte in Python schreiben! (2) Schreiben wir einen Test
Ich möchte eine Datei mit Python zufällig testen
Ich möchte einfach eine modellbasierte Entwicklungsumgebung erstellen
Ich möchte mit einem Roboter in Python arbeiten.
[Go + Gin] Ich habe versucht, eine Docker-Umgebung zu erstellen
[Python] Ich möchte aus einer verschachtelten Liste einen Taple machen
Ich möchte Lambda mit Python auf Mac AWS!
So erstellen Sie eine Python-Umgebung unter Amazon Linux 2
Ich möchte einen Quantencomputer mit Python betreiben
Ich habe versucht, Scrapy auf Anaconda zu installieren und konnte es nicht
Es ist schwierig, einen grünen Bildschirm zu installieren, daher habe ich nur das Gesicht ausgeschnitten und es dem Hintergrundbild überlagert
So erstellen Sie eine virtuelle Ausführungsumgebung für Python mit Visual Studio Code und pipenv auf einem Windows-Computer (auch Jupyter-Notebook)
Ich möchte mit Python nur das Gesicht aus einem Personenbild ausschneiden und speichern ~ Gesichtserkennung und Zuschneiden mit face_recognition ~
[Linux] So installieren Sie ein Paket auf einem Server ohne Internetumgebung (eigenständig)
Als ich versuchte, eine Rails-Umgebung auf WSL2 (Ubuntu 20.04LTS) zu erstellen, stolperte ich und fiel hin.
Ich möchte eine GUI-Entwicklungsumgebung mit Python oder Golang auf dem Mac einrichten
Ich möchte den Unterschied zwischen der for-Anweisung in der Python + numpy-Matrix und der Julia for-Anweisung auffangen
Ich möchte eine Karaoke-Klangquelle erstellen, indem ich Instrumente und Gesang mit Python trenne
Ich möchte einen Sprachwechsler mit Python und SPTK in Bezug auf eine berühmte Site erstellen
Installieren Sie Python 3.6 auf Docker
So erstellen Sie eine neue virtuelle Python-Umgebung unter Ubuntu
Ich habe ein Paket erstellt, um Zeitreihen mit Python zu filtern
Ich möchte viele Prozesse von Python aus starten