首页 > 解决方案 > 在构建之前创建 dotenv 文件并使用 GitHub Actions 部署到 dockerhub

问题描述

在构建 Golang 应用程序之前以及将其部署到我的 DockerHub 存储库之前,我正在尝试使用 GitHub Secrets 创建一个 dotenv 文件。当我运行作业时,它实际上会创建文件,但是当我在容器中运行图像时,会显示一条消息,指出找不到 .env 文件。

这是我的 .yml 文件名:构建和推送图像

on:
  push:
    branches:
      - 'main'
  pull_request:
    branches: 
      - 'main'

jobs:
  dotenv:
    runs-on: ubuntu-20.04
    steps:
    -
      name: generate dotenv for go
      run: |
        echo DB_USER=${{ secrets.SECRET_USER_DB }} > .env
        echo PASSWORD_DB=${{ secrets.SECRET_PASSWORD_DB }} > .env
        echo HOST_DB=${{ secrets.SECRET_HOST_DB }} > .env
        echo PORT_DB=${{ secrets.SECRET_PORT_DB }} > .env
        echo NAME_DB=${{ secrets.SECRET_NAME_DB }} > .env
  
  docker:
    needs: dotenv
    runs-on: ubuntu-20.04
    steps:
      -
        name: Checkout
        uses: actions/checkout@v2
      -
        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_PASSWORD }}
      -
        name: Build and push
        uses: docker/build-push-action@v2
        with:
          context: .
          push: true
          repository: dall06/go_api_image
          file: .docker/Dockerfile.prod
          tags: dall06/go_api_image:latest

我的 Dockerfile 就是这个

FROM golang:latest
WORKDIR /app

# manage dependencies
COPY go.mod .
COPY go.sum .
RUN go mod download

COPY . .

ENV PORT 8080

RUN go build

CMD [ "./pssword-api-mysql" ]

标签: linuxdockergithub-actionsdotenv

解决方案


您正在 Ubuntu 机器中创建 .env 文件,在另一台 Ubuntu 机器中创建 docker 映像,该needs关键字确保 docker 作业在 dotenv 作业之后运行。

您可以做的是,一起删除 dotenv 作业并在 docker build 作业本身中创建 dotenv 文件。

upload artifacts或者,使用作业中的操作上传 .env ,并使用Docker 构建作业中的操作dotenv下载工件。download artifacts


推荐阅读