我有一个git存储库,它是一个私有存储库,我需要能够使用它进行身份验证,并能够在运行时在container build
透视图中看到它。对于一些背景信息,我有一个GitHub工作流,它构建一个容器映像并将其发布到ghcr.io
注册中心。但是,因为我的包所依赖的存储库是私有的,所以它无法工作。现在它在本地工作,我已经考虑过改变我存储GitHub身份验证的方式,以允许我访问它,但我想知道是否有人知道更好的方法让我进入私有存储库。
下面是GitHub操作发布到ghcr.io
注册表:
name: Docker dataeng_github_metrics
# Run workflow on tags starting with v (eg. v2, v1.2.0)
on:
push:
branches: [ "master" ]
paths:
- ./data_pipelines/dataeng_github_metrics/*
pull_request:
branches: [ "master" ]
jobs:
Deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v1
- name: Login to GitHub Container Registry
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GHCR_REGISTRY_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Build and Push Docker Image
uses: docker/build-push-action@v3
with:
context: ./data_pipelines/dataeng_github_metrics/
file: ./data_pipelines/dataeng_github_metrics/Dockerfile
push: true # Will only build if this is not here
tags: |
ghcr.io/mirantis/dataeng_github_metrics:latest
# TODO: I CANNOT USE DATAENG AS PUBLIC AND NEED TO CHANGE THE WAY GITCONFIG IS USED IN THE DOCKERFILE FOR AUTHENTICATION
secrets: |
TOKEN=${{ secrets.AUTOMATION_PAT}}
这是Dockerfile
###############
# CACHE IMAGE #
###############
ARG GO_IMAGE=golang:1.17.3-alpine3.14
ARG BASE_IMAGE=alpine:3.14.2
FROM ${GO_IMAGE} AS cache
# Add the keys
ARG GITHUB_ID
ENV GITHUB_ID=$GITHUB_ID
ARG GITHUB_TOKEN
ENV GITHUB_TOKEN=$GITHUB_TOKEN
# Install Git
RUN apk add git
# TODO: ENCRYPT THE GITHUB_ID AND GITHUB_TOKEN
# Make Git Configuration
RUN git config \
--global \
url."https://${GITHUB_ID}:${GITHUB_TOKEN}@github.com/".insteadOf \
"https://github.com/"
WORKDIR /src
COPY go.mod go.sum /src/
RUN go mod download
##############
# BASE IMAGE #
##############
FROM cache AS dataeng_github_metrics
COPY . /bin
WORKDIR /bin
# Setup Git Terminal Prompt & Go Build
RUN go build .
###############
# FINAL IMAGE #
###############
FROM ${BASE_IMAGE}
COPY --from=dataeng_github_metrics /bin/dataeng_github_metrics bin/
ENTRYPOINT [ "bin/dataeng_github_metrics" ]
我认为让我感到困惑的重要部分是这个,但我想知道是否有更好的方法来实现它:
# Make Git Configuration
RUN git config \
--global \
url."https://${GITHUB_ID}:${GITHUB_TOKEN}@github.com/".insteadOf \
"https://github.com/"
如何访问私有存储库并避免工作流中的以下错误:
#14 9.438 remote: Repository not found.
#14 9.438 fatal: Authentication failed for 'https://github.com/Mirantis/dataeng/'
------
Dockerfile:26
--------------------
24 | WORKDIR /src
25 | COPY go.mod go.sum /src/
26 | >>> RUN go mod download
27 |
28 | ##############
--------------------
ERROR: failed to solve: process "/bin/sh -c go mod download" did not complete successfully: exit code: 1
Error: buildx failed with: ERROR: failed to solve: process "/bin/sh -c go mod download" did not complete successfully: exit code: 1
发布于 2022-11-21 17:44:59
在Dockerfile
中,为了使用操作传递的秘密(称为TOKEN
),您应该按以下方式运行:
RUN --mount=type=secret,id=TOKEN \
echo "machine github.com login x password $(head -n 1 /run/secrets/TOKEN)" > ~/.netrc && \
git config \
--global \
url."https://${GITHUB_ID}:${TOKEN}@github.com/".insteadOf \
"https://github.com/"
还记得将GITHUB_ID
传递给dockerfile
https://stackoverflow.com/questions/74522014
复制相似问题