将变量从Github操作传递到Docker映像构建 [英] Pass Variable From Github Action to Docker image build

查看:16
本文介绍了将变量从Github操作传递到Docker映像构建的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直致力于设置Github Actions工作流来构建docker映像。我需要将环境变量传递到映像中,这样我的Django项目才能正确运行。遗憾的是,当我构建映像时,它没有接收到变量的值。

我的工作流文件的相关部分:

     - name: Build, tag, and push image to AWS ECR
    id: build-image
    env:
      ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
      IMAGE_TAG: ${{ github.sha }}
      aws_ses_access_key_id: ${{ secrets.AWS_SES_ACCESS_KEY_ID }}
      aws_ses_secret_access_key: ${{ secrets.AWS_SES_SECRET_ACCESS_KEY }}
      DATABASE_ENGINE: ${{ secrets.DATABASE_ENGINE }}
      db_host: ${{ secrets.DB_HOST }}
      db_password: ${{ secrets.DB_PASSWORD }}
      db_port: ${{ secrets.DB_PORT }}
      db_username: ${{ secrets.DB_USERNAME }}
      django_secret_key: ${{ secrets.DJANGO_SECRET_KEY }}
      fcm_server_key: ${{ secrets.FCM_SERVER_KEY }}
    run: |
      docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
      docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
      echo "image=$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG" >> $GITHUB_ENV

在我的Docker文件中,我放入了以下内容:

ENV aws_ses_access_key_id=$aws_ses_access_key_id aws_ses_secret_access_key=$aws_ses_secret_access_key DATABASE_ENGINE=$DATABASE_ENGINE db_host=$db_host db_password=$db_password db_port=$db_port db_username=$db_username django_secret_key=$django_secret_key fcm_server_key=$fcm_server_key

没有通过任何变量。我尝试使用$VARIABLE_NAME和${VARIABLE_NAME},但没有成功。我做错了什么?

推荐答案

在Docker文件中的ENV指令值中使用美元替换不会扩展到调用docker build的主机的环境变量,而是替换为docker值。可以通过--build-arg ARG_NAME=ARG_VALUE命令行参数传递给docker build命令,然后可以在ENV指令中将ARG_NAME的值替换为$ARG_NAMEARG_VALUE

参见:https://docs.docker.com/engine/reference/commandline/build/#set-build-time-variables---build-arg

您可以在Docker文件中使用ENV指令来定义变量值。这些值将保留在构建的映像中。然而,坚持不懈往往不是你想要的。用户希望根据他们在哪台主机上构建映像来指定不同的变量。 一个很好的例子是http_proxy或用于拉取中间文件的源版本。Arg指令允许Dockerfile作者定义用户可以在构建时使用--Build-Arg标志设置的值

该标志允许您传递构建时变量,这些变量像Dockerfile的Run指令中的常规环境变量一样被访问。此外,这些值不会像ENV值那样在中间或最终图像中持续存在。必须为每个生成参数添加--Build-Arg。

这篇关于将变量从Github操作传递到Docker映像构建的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆