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.
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
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} .
Recommended Posts