我在GitHub有一个(私有)存储库,它包含我的项目和集成的GitHub-actions,它正在构建一个对接映像,并将其直接推到GHCR上。
但是,我在存储和将秘密传递给我的构建映像方面有问题。我的项目有以下结构:
.git (gitignored)
.env (gitignored)
config (gitignored) / config files (jsons)
src (git) / other folders and files如您所见,我有.env文件和config文件夹。它们都存储数据或文件,这些数据或文件不是在回购程序中,而是在构建的环境中。
所以我想问一下,有没有选择不将所有这些文件传递给我的主要远程回购(即使它是私有的),而是在构建阶段在github操作中链接它们?
在另一个单独的私人远程回购系统中,在其他地方,私下发布env &
并不是一个问题。重点不是将这些文件推送到主私有回购中,因为RBAC逻辑不允许我限制对所选文件的访问。
如果你知道如何解决这个问题的话,任何其他使用GitLab CI或BitBucket的建议也很感激。不要害羞地分享它!
发布于 2022-04-06 07:56:28
所以这个问题似乎有点热,所以我找到了答案。
上面所示的示例基于node.js和nest.js应用程序,并从GitHub中提取私有的远程回购。
在我的例子中,这个场景是从单独的私有回购配置文件和其他秘密中提取出来的。在容器构建过程中,我们将它们与我们的项目合并。此选项不涉及容器内部机密的安全性。但是,为了使项目的一部分(业务逻辑的回购本身)可供其他开发人员使用(在您的开发回购中,他们不会从单独的私人回购中看到证书和信任)和具有单独访问权限的秘密私人回购。
您需要您的个人访问令牌(PAT),在github上您可以在这里找到它:

对于GitLab来说,流仍然是一样的。您需要从设置中的某个地方传递令牌。此外,只是一个好的建议,不仅创建一个,但两个对接文件,在测试之前。
为什么是https而不是ssh?在这种情况下,您还需要传递ssh键并正确配置客户端。由于CRLF和LF格式,ssh所支持的密码标志等等,这有点复杂。
# it could be Go, PHP, what-ever
FROM node:17
# you will need your GitHub token from settings
# we will pass it to build env via GitHub action
ARG CR_PAT
ENV CR_PAT=$CR_PAT
# update OS in build container
RUN apt-get update
RUN apt-get install -y git
# workdir app, it is a cd (directory)
WORKDIR /usr/src/app
# installing nest library
RUN npm install -g @nestjs/cli
# config git with credentials
# we will use https since it is much easier to config instead of ssh
RUN git config --global url."https://${github_username}:${CR_PAT}@github.com/".insteadOf "https://github.com/"
# cloning the repo to WORKDIR
RUN git clone https://github.com/${github_username}/${repo_name}.git
# we move all files from pulled repo to root of WORKDIR
# including files named with dot at the beginning (like .env)
RUN mv repo_folder/* repo_folder/.[^.]* . && rmdir repo_folder/
# node.js stuff
COPY package.json ./
RUN yarn install
COPY . .
RUN nest build app
CMD wait && ["node"]因此,您将看到一个完整的容器,其中包含您的代码与文件合并,以及我们从其他单独的repo中提取的代码。
https://stackoverflow.com/questions/71081615
复制相似问题