Oryx/actions/oryx-dockerfile/README.md

7.7 KiB

GitHub Action for generating a Dockerfile to build and run Azure Web Apps

With the Azure App Service Actions for GitHub, you can automate your workflow to deploy Azure Web Apps using GitHub Actions.

Get started today with a free Azure account!

This repository contains the GitHub Action for generating a Dockerfile to build and run Azure Web Apps using the Oryx build system. Currently, the following platforms can be built using this GitHub Action:

  • .NET Core
  • Node
  • PHP
  • Python

The generated Dockerfile follows a template similar to the following:

ARG RUNTIME=<PLATFORM_NAME>:<PLATFORM_VERSION>

FROM mcr.microsoft.com/oryx/build:<BUILD_TAG> as build
WORKDIR /app
COPY . .
RUN oryx build /app

FROM mcr.microsoft.com/oryx/${RUNTIME}
COPY --from=build /app /app
RUN cd /app && oryx
ENTRYPOINT ["/app/run.sh"]

Once this Dockerfile is produced, it can be built and pushed to a registry, such as Azure Container Registry, and used at a later time to deploy the Azure Web App.

If you are looking for a GitHub Action to build your Azure Web App, consider using azure/appservice-build.

If you are looking for a GitHub Action to deploy your Azure Web App, consider using azure/webapps-deploy.

The definition of this GitHub Action is in action.yml.

End-to-End Sample Workflows

Dependencies on other GitHub Actions

  • actions/checkout
    • Checkout your Git repository content into the GitHub Actions agent

Other GitHub Actions

Sample workflow to push an image using Azure CLI

The following is an end-to-end sample of generating the Dockerfile, building the image, and pushing it to Azure Container Registry using Azure CLI whenever a commit is pushed:

on: push

jobs:
  build-and-push:
    runs-on: ubuntu-latest
    steps:
      - name: Cloning repository
        uses: actions/checkout@v1

      - name: Running Oryx to generate a Dockerfile
        uses: microsoft/oryx/actions/oryx-dockerfile@master
        id: oryx

      - name: Azure authentication
        uses: azure/login@v1
        with:
          creds: ${{ secrets.AZURE_CREDENTIALS }}

      - name: Building image and pushing to ACR
        run: |
          az acr build -t <IMAGE_NAME>:<TAG> \
                      -r <ACR_NAME> \
                      -f {{ steps.oryx.outputs.dockerfile-path }} \
                      .

The following variables should be replaced in your workflow .yaml file:

  • <ACR_NAME>
    • Name of the Azure Container Registry that you are pushing to
  • <IMAGE_NAME>
    • Name of the image that will be pushed to your registry
  • <TAG>
    • Name of the image tag

The following variables should be set in the GitHub repository's secrets store:

  • AZURE_CREDENTIALS
    • Used to authenticate calls to Azure; for more information on setting this secret, please see the azure/actions/login action

Sample workflow to push an image using Docker

The following is an end-to-end sample of generating the Dockerfile, building the image, and pushing it to a registry using Docker whenever a commit is pushed:

on: push

jobs:
  build-and-push:
    runs-on: ubuntu-latest
    steps:
      - name: Cloning repository
        uses: actions/checkout@v1

      - name: Running Oryx to generate a Dockerfile
        uses: microsoft/oryx/actions/oryx-dockerfile@master
        id: oryx

      - name: Logging into registry
        uses: azure/docker-login@master
        with:
          login-server: <REGISTRY_NAME>
          username: ${{ secrets.REGISTRY_USERNAME }}
          password: ${{ secrets.REGISTRY_PASSWORD }}

      - name: Building image and pushing to registry using Docker
        run: |
          docker build . -t <REGISTRY_NAME>/<IMAGE_NAME>:<TAG> -f {{ steps.oryx.outputs.dockerfile-path }}
          docker push <REGISTRY_NAME>/<IMAGE_NAME>:<TAG>

The following variables should be replaced in your workflow:

  • <REGISTRY_NAME>
    • Name of the registry that you are pushing to
  • <IMAGE_NAME>
    • Name of the image that will be pushed to your registry
  • <TAG>
    • Name of the image tag

The following variables should be set in the GitHub repository's secrets store:

Sample workflow to deploy an Azure Web App Container

The following is an end-to-end sample of generating the Dockerfile, building the image, pushing it to a registry using Docker, and deploying the web app to Azure whenever a commit is pushed:

on: push

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Cloning repository
        uses: actions/checkout@v1

      - name: Running Oryx to generate a Dockerfile
        uses: microsoft/oryx/actions/oryx-dockerfile@master
        id: oryx

      - name: Logging into Azure
        uses: azure/login@master
        with:
          creds: ${{ secrets.AZURE_CREDENTIALS }}

      - name: Logging into registry
        uses: azure/docker-login@master
        with:
          login-server: <REGISTRY_NAME>
          username: ${{ secrets.REGISTRY_USERNAME }}
          password: ${{ secrets.REGISTRY_PASSWORD }}

      - name: Building image and pushing to registry using Docker
        run: |
          docker build . -t <REGISTRY_NAME>/<IMAGE_NAME>:<TAG> -f {{ steps.oryx.outputs.dockerfile-path }}
          docker push <REGISTRY_NAME>/<IMAGE_NAME>:<TAG>

      - name: Deploying container web app to Azure
        uses: azure/webapps-container-deploy@v1
        with:
          app-name: <WEB_APP_NAME>
          images: <REGISTRY_NAME>/<IMAGE_NAME>:<TAG>

The following variables should be replaced in your workflow:

  • <REGISTRY_NAME>
    • Name of the registry that you are pushing to
  • <IMAGE_NAME>
    • Name of the image that will be pushed to your registry
  • <TAG>
    • Name of the image tag
  • <WEB_APP_NAME>
    • Name of the web app that's being deployed

The following variables should be set in the GitHub repository's secrets store:

  • AZURE_CREDENTIALS
    • Used to authenticate calls to Azure; for more information on setting this secret, please see the azure/actions/login action
  • REGISTRY_USERNAME
  • REGISTRY_PASSWORD