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