[英]Build docker image locally in GitHub Actions using docker/build-push-action
[英]Production ENV file with docker/build-push-action and 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 }}
在我的Dockerfile
,我有一項任務需要.env.production
並使其成為.env
。
COPY .env.production .env
這顯然失敗了,因為 .env.production 不包含在 Git 中。
我的問題是,如何在我的 GitHub 操作中發生類似的事情? 我考慮過在Build and push
之前創建 env 文件,但我認為該任務是從 docker 容器中的 main 中提取的,所以實際上看不到我創建的文件嗎? 或者如果有什么覆蓋它。
實現這一目標的最佳方法是什么?
提前致謝
這就是我想出的。
Dockerfile
...
ARG ARG_ENV_SECRET
ARG ARG_ENV_SECRET_1
COPY ./env-script.sh ./
RUN ./env-script.sh
...
env-script.sh 這個腳本創建.env 文件
#!/bin/sh
touch .env
{
printf "ENV_SECRET=%sENV_SECRET_1=%s" "$ARG_ENV_SECRET" "ARG_ENV_SECRET_1"
} >> .env
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 .
...
我很確定這不是最佳途徑,但它對我們有用,因為我們使用第三方來運行我們的 AWS 服務。 更好的方法是在啟動實例時使用 AWS 機密。 您可以在此處閱讀更多相關信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.