Skip to content

Releasing images for Linux Dedicated

Sid Krishna edited this page Apr 14, 2021 · 16 revisions

These are the old manual instructions. Please use the new automation as explained here: Release Instructions via Github Actions

Here are the steps to build and release the Linux dedicated image of Azure Functions runtime. V2 images are now deprecated

  1. Go to Azure Functions Host's release page and note down the versions of the host release, v3.a.b.

  2. Head to Azure Functions Docker and check the versions of the Host for v2 and v3 to see the current versions deployed. If the versions are not updated, create a PR to update the version in the dev branch. See the HOST_VERSION properties in the following files to verify the version. Use the host/update-version.sh script to update the host version.

  • Output example from the script, PRs for updating the HOST_VERSION are, for v2 - 275 and for v3 - 276.

  • For V3: The version should look like the following:

ARG HOST_VERSION=3.a`.b`
  • files to check:
3.0/bionic/arm32v7/dotnet/dotnet.Dockerfile
3.0/buster/arm32v7/dotnet/dotnet.Dockerfile
3.0/buster/amd64/python/python38/python38-appservice.Dockerfile
3.0/buster/amd64/python/python38/python38.Dockerfile
3.0/buster/amd64/python/python38/python38-slim.Dockerfile
3.0/buster/amd64/python/python36/python36.Dockerfile
3.0/buster/amd64/python/python36/python36-appservice.Dockerfile
3.0/buster/amd64/python/python36/python36-slim.Dockerfile
3.0/buster/amd64/python/python37/python37-slim.Dockerfile
3.0/buster/amd64/python/python37/python37-appservice.Dockerfile
3.0/buster/amd64/python/python37/python37.Dockerfile
3.0/buster/amd64/java/java8/java8-slim.Dockerfile
3.0/buster/amd64/java/java8/java8-appservice.Dockerfile
3.0/buster/amd64/java/java8/java8.Dockerfile
3.0/buster/amd64/java/java11/java11.Dockerfile
3.0/buster/amd64/java/java11/java11-appservice.Dockerfile
3.0/buster/amd64/java/java11/java11-slim.Dockerfile
3.0/buster/amd64/dotnet/dotnet.Dockerfile
3.0/buster/amd64/dotnet/dotnet-appservice.Dockerfile
3.0/buster/amd64/dotnet/dotnet-slim.Dockerfile
3.0/buster/amd64/powershell/powershell6-slim.Dockerfile
3.0/buster/amd64/powershell/powershell6.Dockerfile
3.0/buster/amd64/powershell/powershell6-appservice.Dockerfile
3.0/buster/amd64/node/node10/node10-appservice.Dockerfile
3.0/buster/amd64/node/node10/node10.Dockerfile
3.0/buster/amd64/node/node10/node10-slim.Dockerfile
3.0/buster/amd64/node/node12/node12-appservice.Dockerfile
3.0/buster/amd64/node/node12/node12-slim.Dockerfile
3.0/buster/amd64/node/node12/node12.Dockerfile
3.0/nanoserver/1809/dotnet.Dockerfile
3.0/nanoserver/1903/dotnet.Dockerfile
3.0/nanoserver/1909/dotnet.Dockerfile
  • For V2: The version should look like the following:
ARG HOST_VERSION=2.x.y
  • files to check:
2.0/alpine/amd64/java/java8.Dockerfile
2.0/alpine/amd64/dotnet/dotnet.Dockerfile
2.0/alpine/amd64/powershell/powershell6.Dockerfile
2.0/bionic/arm32v7/dotnet/dotnet.Dockerfile
2.0/nanoserver/1809/dotnet.Dockerfile
2.0/nanoserver/1903/dotnet.Dockerfile
2.0/nanoserver/1803/dotnet.Dockerfile
2.0/stretch/arm32v7/dotnet/dotnet.Dockerfile
2.0/stretch/amd64/python/python36/python36.Dockerfile
2.0/stretch/amd64/python/python36/python36-appservice.Dockerfile
2.0/stretch/amd64/python/python36/python36-slim.Dockerfile
2.0/stretch/amd64/python/python37/python37-slim.Dockerfile
2.0/stretch/amd64/python/python37/python37-appservice.Dockerfile
2.0/stretch/amd64/python/python37/python37.Dockerfile
2.0/stretch/amd64/java/java8-slim.Dockerfile
2.0/stretch/amd64/java/java8-appservice.Dockerfile
2.0/stretch/amd64/java/java8.Dockerfile
2.0/stretch/amd64/dotnet/dotnet.Dockerfile
2.0/stretch/amd64/dotnet/dotnet-appservice.Dockerfile
2.0/stretch/amd64/dotnet/dotnet-slim.Dockerfile
2.0/stretch/amd64/powershell/powershell6-slim.Dockerfile
2.0/stretch/amd64/powershell/powershell6.Dockerfile
2.0/stretch/amd64/powershell/powershell6-appservice.Dockerfile
2.0/stretch/amd64/node/node10/node10-appservice.Dockerfile
2.0/stretch/amd64/node/node10/node10.Dockerfile
2.0/stretch/amd64/node/node10/node10-slim.Dockerfile
2.0/stretch/amd64/node/node8/node8.Dockerfile
2.0/stretch/amd64/node/node8/node8-slim.Dockerfile
2.0/stretch/amd64/node/node8/node8-appservice.Dockerfile
2.0/stretch/amd64/node/node12/node12-appservice.Dockerfile
2.0/stretch/amd64/node/node12/node12-slim.Dockerfile
2.0/stretch/amd64/node/node12/node12.Dockerfile
  1. Once the dev branch has the change, merge the release/2.x and release/3.x branch to dev to make sure all hotfixes on the release/* branches flow to dev. After that checkout the release/v3.x and release/v2.x-upgrade branch and git reset --hard origin/dev. This will ensure the release branches are synchronized with the dev branch.

  2. Create a tag v3.a.b from release/v3.x branch. Don't need to create any tags from release/v2.x-upgrade.

  • You can go to the release page and Draft a new release, with the tag and release title as v3.a.b for v3. This will automatically create new tags for your release and kick-off the deployment pipeline to generate the container image, published to a private image repository.

Check the pipeline to see if the following pipelines are in action -

  • v3 [java|python|dotnet|node|powershell]

  • Important Note: If the above pipeline doesn't work as expected, Go into pipeline and click on each pipeline and start kicking off pipelines manually for the pipelines listed above. Remember, the branch/tag name is refs/tags/3.a.b also no need to change any variables or anything else. Note: "do not care about the nanoserver"

  1. Check if the build is completed in the following pipeline:
v3 python build
v3 node build
v3 java build
v3 powershell build
v3 dotnet build
v2 upgrade python build
v2 upgrade node build
v2 upgrade dotnet build

After the build completes, then run v3 publish and v2 publish pipelines. Set the PrivateVersion and TargetVersion option to be the version AzFunc Host's version, being released by that pipeline.

  • In our case, for pipeline v3 publish:

    • Tag: refs/tags/3.a.b
    • PrivateVersion: 3.a.b
    • TargetVersion: 3.a.b
  • For pipeline v2 publish

    • Tag: refs/tags/2.x.y
    • PrivateVersion: 2.x.y
    • TargetVersion: 2.x.y
  1. Once the publishing completes, validate that the image versions are available in the public container registry.

  2. Once the release completed, please merge release/v3.x and release/v2.x-upgrade back to dev.

Trouble Shooting

After creating the tag at step 3, release pipeline could fail. In this case, You can remove the tag/release from GUI, and update the commit, then delete tag on the release/3.x branch with git tag -d 3.a.b then push the tag by git push origin 3.a.b. You can remove the current release pipeline, and create it again.