- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
使用Github Action,通过 Azure/functions-container-action@v1 插件来完成 yaml 文件的配置,并成功部署Function Image 的过程记录.
。
如在VS Code中,通过Terminal(命令行窗口),根据所使用的语言,创建或初始化DockerFile 。
func init --worker-runtime python --
docker
#
--docker 选项生成该项目的 Dockerfile,其中定义了适合用于 Azure Functions 和所选运行时的自定义容器 Python
执行后的效果为在Function 项目中添加Dockerfile文件.
参考文档 -- 在 Linux 上使用自定义容器创建函数: https://docs.azure.cn/zh-cn/azure-functions/functions-create-function-linux-custom-image?tabs=in-process%2Cbash%2Cazure-cli&pivots=programming-language-python 。
首先,在本地启动Docker Desktop后,使用Docker build 生产镜像文件.
然后,登录ACR(Azure Container Registry :Azure 容器注册表)。 。
命令示例如下:
## 本地生产Image文件 docker build -- tag azurefunctionsimage:v1 . ## 登录Azure镜像库 docker login <your-registry-name>.azurecr.cn --username <your-registry-username> ## 设置tag,推送到ACR docker tag azurefunctionsimage <your-registry-name>.azurecr.cn/ azurefunctionsimage:v1 docker push <your-registry-name>.azurecr.cn/azurefunctionsimage:v1
启用用户标识,主要就是为了能够让它有权限去访问ACR并且拉取镜像文件 。
1:创建用户标识: Create User Assigned Managed Identity - Microsoft Azure 由世纪互联运营 。
2:在ACR中为用户标识赋予权限(Contributor or Reader):分配 Azure 角色的步骤 https://docs.azure.cn/zh-cn/role-based-access-control/role-assignments-steps 。
。
Action的workflow文件中,有两段内容需要配置,一是设置 用户标识,二是设置镜像路径.
第一段,修改Function App的设置 。
- name: Azure App Service Settings uses: Azure/appservice-settings@v1 with: # Name of the Azure Web App app-name: fun-name general-settings-json: ' {"acrUseManagedIdentityCreds": "true", "acrUserManagedIdentityID": "user managed identity id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"} '
第二段,配置Image 路径 。
- name: 'Run Azure Functions Container Action' uses: Azure/functions-container-action@v1 id: fa with: app-name: fun-name image: youracrname.azurecr.cn/imagename:version
以上配置与 Azure Funciton 门户上 Development Center 的设置对比关系如下:
参考的github上yaml文件内容: https://github.com/Azure/actions-workflow-samples/tree/master/FunctionApp 和 https://github.com/Azure/actions-workflow-samples/blob/master/FunctionApp/linux-container-functionapp-on-azure.yml 。
修改后的yaml内容:
# Action Requires # 1. Setup the AZURE_CREDENTIALS secrets in your GitHub Repository # 2. Setup the REGISTRY_USERNAME secrets in your GitHub Repository # 3. Setup the REGISTRY_PASSWORD secrets in your GitHub Repository # 4. Replace REGISTRY, NAMESPACE, IMAGE, TAG in the following template with proper values # 5. Add this yaml file to your project's .github/workflows/ # 6. Push your local project to your GitHub Repository name: Linux_Container_Workflow on: [push] #on: # push: # branches: # - master jobs: build-and-deploy: runs-on: ubuntu-latest environment: dev steps: - name: 'Checkout GitHub Action' uses: actions/checkout@v3 #- name: 'Login via Azure CLI' # uses: Azure/login@v1.4.6 # with: # creds: ${{ secrets.AZURE_CREDENTIALS }} # environment: AzureChinaCloud # #allow-no-subscriptions: true - name: 'set subscriptions' run: | az cloud set --name AzureChinaCloud az login -u your azure user name -p "password" az account set --subscription "your subscription id" - name: 'Docker Login' uses: azure/docker-login@v1 with: login-server: youracrname.azurecr.cn username: ${{ secrets.REGISTRY_USERNAME }} password: ${{ secrets.REGISTRY_PASSWORD }} # - name: 'Compose Customized Docker Image' # shell: bash # run: | # # If your function app project is not located in your repository's root # # Please change the path to your directory for docker build # docker build . -t REGISTRY/NAMESPACE/IMAGE:TAG # docker push REGISTRY/NAMESPACE/IMAGE:TAG - name: Azure App Service Settings uses: Azure/appservice-settings@v1 with: # Name of the Azure Web App app-name: functionappname general-settings-json: '{"acrUseManagedIdentityCreds": "true", "acrUserManagedIdentityID": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"}' - name: 'Run Azure Functions Container Action' uses: Azure/functions-container-action@v1 id: fa with: app-name: functionappname #image: REGISTRY/NAMESPACE/IMAGE:TAG image: youracrname.azurecr.cn/azurefunctionimage:v1 #- name: 'use the published functionapp url in upcoming steps' # run: | # echo "${{ steps.fa.outputs.app-url }}" - name: Azure logout run: | az logout # For more information on GitHub Actions: # https://help.github.com/en/categories/automating-your-workflow-with-github-actions
以上操作完成后,即可上传workflow yaml文件到 .github / workflows / 目录下。因为条件设置为 on: [push],所以任何对代码库的push操作就会触发该workflow.
。
成功的效果图如本文最开始“问题描述”中的图片一致.
。
在Azure Function的log中,也能发现类似的Container启动日志:
2023-01-13T03:09:36.682Z INFO - Logging is not enabled for this container. Please use https://aka.ms/linux-diagnostics to enable logging to see container logs here. 2023-01-13T03:09:45.209Z INFO - Initiating warmup request to container funtest01_1_b4054967_msiProxy for site funtest01 2023-01-13T03:09:45.261Z INFO - Container funtest01_1_b4054967_msiProxy for site funtest01 initialized successfully and is ready to serve requests. 2023-01-13T03:09:45.268Z INFO - Initiating warmup request to container funtest01_1_b4054967 for site funtest01 2023-01-13T03:10:01.707Z INFO - Waiting for response to warmup request for container funtest01_1_b4054967. Elapsed time = 16.4981389 sec 2023-01-13T03:10:13.069Z INFO - Container funtest01_1_b4054967 for site funtest01 initialized successfully and is ready to serve requests. 2023-01-13T03:10:13.089Z INFO - Initiating warmup request to container funtest01_1_b4054967_middleware for site funtest01 2023-01-13T03:10:17.032Z INFO - Container funtest01_1_b4054967_middleware for site funtest01 initialized successfully and is ready to serve requests. 2023-01-13T03:22:40.065Z INFO - Recycling container because of AppSettingsChange and isMainSite = True 2023-01-13T03:22:55.207Z INFO - Pulling image: mcr.microsoft.com/azure-functions/dotnet:3.0-appservice-quickstart 2023-01-13T03:22:56.079Z INFO - 3.0-appservice-quickstart Pulling from azure-functions/dotnet 2023-01-13T03:22:56.080Z INFO - Digest: sha256:99f2de1ba2d097fe7fca8098351bd7d9d2e1cabbc32e3c3506321f7f1811bd1b 2023-01-13T03:22:56.081Z INFO - Status: Image is up to date for mcr.microsoft.com/azure-functions/dotnet:3.0-appservice-quickstart 2023-01-13T03:22:56.084Z INFO - Pull Image successful, Time taken: 0 Minutes and 0 Seconds 2023-01-13T03:22:56.157Z INFO - Starting container for site 2023-01-13T03:22:56.165Z INFO - docker run -d --expose=80 --name funtest01_2_24a23a85 -e WEBSITE_CORS_ALLOWED_ORIGINS=https://portal.azure.cn -e WEBSITE_CORS_SUPPORT_CREDENTIALS=False -e WEBSITES_ENABLE_APP_SERVICE_STORAGE=false -e WEBSITE_SITE_NAME=funtest01 -e WEBSITE_AUTH_ENABLED=False -e PORT=80 -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_HOSTNAME=funtest01.chinacloudsites.cn -e WEBSITE_INSTANCE_ID=50a285a49ae3758d44951d408c7ec6cb3077821b90868ed2bf52d6c32be391fa -e WEBSITE_USE_DIAGNOSTIC_SERVER=False mcr.microsoft.com/azure-functions/dotnet:3.0-appservice-quickstart 2023-01-13T03:22:56.166Z INFO - Logging is not enabled for this container. Please use https://aka.ms/linux-diagnostics to enable logging to see container logs here. 2023-01-13T03:23:10.342Z INFO - Initiating warmup request to container funtest01_2_24a23a85_msiProxy for site funtest01 2023-01-13T03:23:10.745Z INFO - Container funtest01_2_24a23a85_msiProxy for site funtest01 initialized successfully and is ready to serve requests. 2023-01-13T03:23:10.753Z INFO - Initiating warmup request to container funtest01_2_24a23a85 for site funtest01 2023-01-13T03:23:27.483Z INFO - Waiting for response to warmup request for container funtest01_2_24a23a85. Elapsed time = 17.1407378 sec 2023-01-13T03:23:38.014Z INFO - Container funtest01_2_24a23a85 for site funtest01 initialized successfully and is ready to serve requests. 2023-01-13T03:23:38.023Z INFO - Initiating warmup request to container funtest01_2_24a23a85_middleware for site funtest01 2023-01-13T03:23:54.109Z INFO - Container funtest01_2_24a23a85_middleware for site funtest01 initialized successfully and is ready to serve requests. 2023-01-13T06:14:26.600Z INFO - Recycling container because of AppFrameworkVersionChange and appFrameworkVersion = <youracrname>.azurecr.cn/azurefunctionimage:v1 2023-01-13T06:14:50.804Z INFO - Pulling image: <youracrname>.azurecr.cn/azurefunctionimage:v1 2023-01-13T06:14:51.203Z INFO - v1 Pulling from azurefunctionimage 2023-01-13T06:14:51.228Z INFO - 3f4ca61aafcd Pulling fs layer 2023-01-13T06:14:51.233Z INFO - 3f487a3359db Pulling fs layer 2023-01-13T06:14:51.233Z INFO - cf20d7997674 Pulling fs layer 2023-01-13T06:14:51.234Z INFO - 8fa944797ac7 Pulling fs layer 2023-01-13T06:14:51.234Z INFO - 268581bec5af Pulling fs layer 2023-01-13T06:14:51.235Z INFO - 320a9b97d2ed Pulling fs layer 2023-01-13T06:14:51.235Z INFO - 14bf15bf0e2a Pulling fs layer 2023-01-13T06:14:51.235Z INFO - 888c871585b1 Pulling fs layer 2023-01-13T06:14:51.243Z INFO - dc54e8c78a21 Pulling fs layer 2023-01-13T06:14:51.244Z INFO - 0b8d318d756a Pulling fs layer 2023-01-13T06:14:51.244Z INFO - 686f382362d7 Pulling fs layer 2023-01-13T06:14:51.252Z INFO - a108b4c555c7 Pulling fs layer 2023-01-13T06:14:51.253Z INFO - 07a70c22a7c4 Pulling fs layer 2023-01-13T06:14:52.512Z INFO - 3f487a3359db Downloading 799KB / 1MB ... 2023-01-13T06:17:09.734Z INFO - 07a70c22a7c4 Extracting 9MB / 9MB 2023-01-13T06:17:09.938Z INFO - 07a70c22a7c4 Pull complete 2023-01-13T06:17:09.955Z INFO - Digest: sha256:26a409b16044e27bdd97627a14118e33e84f840052d9fe4711f1ca471b09d22b 2023-01-13T06:17:09.957Z INFO - Status: Downloaded newer image for <youracrname>.azurecr.cn/azurefunctionimage:v1 2023-01-13T06:17:10.056Z INFO - Pull Image successful, Time taken: 2 Minutes and 19 Seconds 2023-01-13T06:17:10.688Z INFO - Starting container for site 2023-01-13T06:17:10.699Z INFO - docker run -d --expose=80 --name funtest01_3_e9514d82 -e WEBSITE_CORS_ALLOWED_ORIGINS=https://portal.azure.cn -e WEBSITE_CORS_SUPPORT_CREDENTIALS=False -e WEBSITES_ENABLE_APP_SERVICE_STORAGE=false -e WEBSITE_SITE_NAME=funtest01 -e WEBSITE_AUTH_ENABLED=False -e PORT=80 -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_HOSTNAME=funtest01.chinacloudsites.cn -e WEBSITE_INSTANCE_ID=50a285a49ae3758d44951d408c7ec6cb3077821b90868ed2bf52d6c32be391fa -e WEBSITE_USE_DIAGNOSTIC_SERVER=False <youracrname>.azurecr.cn/azurefunctionimage:v1 2023-01-13T06:17:10.707Z INFO - Logging is not enabled for this container. Please use https://aka.ms/linux-diagnostics to enable logging to see container logs here. 2023-01-13T06:17:20.451Z INFO - Initiating warmup request to container funtest01_3_e9514d82_msiProxy for site funtest01 2023-01-13T06:17:20.721Z INFO - Container funtest01_3_e9514d82_msiProxy for site funtest01 initialized successfully and is ready to serve requests. 2023-01-13T06:17:20.722Z INFO - Initiating warmup request to container funtest01_3_e9514d82 for site funtest01 2023-01-13T06:17:36.951Z INFO - Waiting for response to warmup request for container funtest01_3_e9514d82. Elapsed time = 16.4996091 sec 2023-01-13T06:17:44.426Z INFO - Container funtest01_3_e9514d82 for site funtest01 initialized successfully and is ready to serve requests. 2023-01-13T06:17:44.427Z INFO - Initiating warmup request to container funtest01_3_e9514d82_middleware for site funtest01 2023-01-13T06:17:45.431Z INFO - Container funtest01_3_e9514d82_middleware for site funtest01 initialized successfully and is ready to serve requests.
。
。
Action Samples for deploying to Azure Functions : https://github.com/Azure/actions-workflow-samples/tree/master/FunctionApp 。
最后此篇关于【AzureDeveloper】在GithubAction中使用Azure/functions-container-action@v1配置FunctionApp并成功部署FunctionImage的文章就讲到这里了,如果你想了解更多关于【AzureDeveloper】在GithubAction中使用Azure/functions-container-action@v1配置FunctionApp并成功部署FunctionImage的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在使用 jQuery 的 $.ajax 函数来提交表单,它可以工作,但成功正是我遇到问题的地方。这是我的代码: $("#form").submit(function () { $.
我正在使用动态分页。 我需要在开始另一个事件之前取消 jQuery ajax 中的 success 事件。 我已经设置了一个等于$.ajax()的变量,在这样做之前,无论如何我都会调用abort。 问
如果我错了,请纠正我,但我对 $.post 成功/失败的理解是,如果 url 有效,这将返回成功。唯一会返回失败的情况是 url 无效。 如果这是真的,我如何验证成功函数?我问的原因是无论发生什么,即
HANDLE hFile = CreateFile(LPCTSTR("filename"), // name of the write
我正在使用以下代码发送短信。但这似乎不会在未发送短信时产生异常。例如,当没有足够的钱发送时,我仍然会去 smsSucces();有没有人知道解决此问题的方法以确保它已发送? private b
我正在尝试将字符串转换为 DateTime,在一台计算机上,它工作正常,但在另一台计算机上,它却不行!它运行的计算机运行的是 32 位 Windows 7,它不运行的计算机运行的是 64 位 Wind
我在页面上使用表单让用户输入将用于各种目的的图像的 url。我正在编写一个 ajax 方法来确定他们提供的 url 是否实际上是图像。到目前为止,我已经这样做了: $(document).on('re
我在 jquery 中对 php 脚本进行 ajax 调用。但是 php 脚本需要返回什么才能触发 ajax 中的成功/错误处理程序。所以这是 ajax: $.ajax({ data:
几个简单的问题: 对于 native 和 Flash/Silverlight 垫片来说,成功事件是“规范化”事件吗?记录的示例表明它仅适用于 Flash/Silverlight 对象准备就绪的情况。
这个问题不太可能对任何 future 的访客有帮助;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于互联网的全局受众。如需帮助使这个问题更广泛适用,visit the h
我尝试使用新的 Groovy Grape Groovy 1.6-beta-2 中的功能,但我收到一条错误消息; unable to resolve class com.jidesoft.swing.J
我正在使用 sequelize/nodejs/express/react 将实体持久化到 postgres 数据库 我有两个主要模型,国家和事件,我正在使用该应用程序,并且有一个名为“保存到数据库”的
我有以下代码,其中有 2 个电子邮件输入字段,我需要验证它们是否相同,并且使用 jQuery validate equalTo 成功运行。 Email Address
我正在尝试找出解决此问题的正确方法。 假设我们有一家元素商店。这些项目可以编辑、删除和创建。编辑或添加项目时,路线更改为/item/add 或/item/edit/{id}。 在 saga 成功添加或
这个问题已经有答案了: How do I return the response from an asynchronous call? (42 个回答) 已关闭 8 年前。 我有这段代码,警报工作正常
Closed. This question needs to be more focused。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅关注editing this post的一个问题。
我想在单击超链接 (.remove_resort) 时(成功的 ajax 调用后)删除超链接的(父)跨度。 虽然ajax调用成功,但是最后span并没有被移除。这里出了什么问题? 请记住:有几个类
我正在编写一个非常简单的程序来将鼠标剪辑到指定的窗口。它从系统托盘运行,没有可见窗口。由于同一窗口会有多个实例,因此它使用 EnumWindows() 迭代每个顶级窗口,并将它们的 hwnd 与 Ge
我正在尝试找出如何执行 if 语句,以便如果玩家的击球率超过 0.250,则会为成功的 tr 添加一个类别。 我发现了以下堆栈问题,但我不确定可以使用或应该使用哪种方式以及如何使用这些堆栈问题。 ht
我是 Prolog 的新手,我正在尝试解决这个练习: Define a predicate greater_than/2 that takes two numerals in the notation
我是一名优秀的程序员,十分优秀!