Dar*_*en. 7 environment-variables docker dockerhub dotenv github-actions
docker/build-push-action创建发布标签时,我的 GitHub 操作中会运行以下作业。
jobs:
docker:
runs-on: ubuntu-latest
steps:
-
name: Set up QEMU
uses: docker/setup-qemu-action@v1
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
-
name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}
-
name: Build and push
id: docker_build
uses: docker/build-push-action@v2
with:
push: true
tags: user/repo:latest
-
name: Image digest
run: echo ${{ steps.docker_build.outputs.digest }}
Run Code Online (Sandbox Code Playgroud)
在我的工作中Dockerfile,我有一项任务,需要完成.env.production并完成它.env。
COPY .env.production .env
Run Code Online (Sandbox Code Playgroud)
这显然失败了,因为 .env.Production 不包含在 Git 中。
我的问题是,如何在我的 GitHub 操作中发生类似的事情?我之前考虑过创建 env 文件,Build and push但我认为该任务是从 docker 容器中的 main 中提取的,所以实际上不会看到我创建的文件?或者如果有什么东西覆盖它。
实现这一目标的最佳方法是什么?
提前致谢
这就是我想出来的。
Dockerfile
...
ARG ARG_ENV_SECRET
ARG ARG_ENV_SECRET_1
COPY ./env-script.sh ./
RUN ./env-script.sh
...
Run Code Online (Sandbox Code Playgroud)
env-script.sh 该脚本创建 .env 文件
#!/bin/sh
touch .env
{
printf "ENV_SECRET=%sENV_SECRET_1=%s" "$ARG_ENV_SECRET" "ARG_ENV_SECRET_1"
} >> .env
Run Code Online (Sandbox Code Playgroud)
docker-action.yml
...
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Build, tag, and push the image to Amazon ECR
id: build-image
env:
ENV_SECRET: ${{ secrets.ENV_SECRET }} #naming used below
ENV_SECRET_1: ${{ secrets.ENV_SECRET_1 }}
run: |
docker \
--build-arg ARG_ENV_SECRET=$ENV_SECRET #name declared above
--build-arg ARG_ENV_SECRET_1=$ENV_SECRET_1
build .
...
Run Code Online (Sandbox Code Playgroud)
我很确定这不是最好的路线,但它对我们来说很有效,因为我们使用第三方来运行我们的 AWS 服务。更好的方法是在启动实例时使用 AWS 密钥。你可以在这里读更多关于它的内容。
| 归档时间: |
|
| 查看次数: |
5282 次 |
| 最近记录: |