如何将GitLab CI中的构建产物部署到Azure应用服务?

6
我有一个托管在gitlab.com上的仓库,它关联了多个构建作业。我想要能够部署任何一个构建的已编译成品(通常是HTML/CSS/JavaScript编译后的文件)到Azure。
到目前为止,我看到的所有指南/文档/教程(例如:123等)都集中于直接从Git存储库部署文件,这在某些情况下可能很有用,但这不是我在这种情况下所需的,因为我需要编译目标而不是源代码。
如果存在此功能的GitLab替代方案(以防GitLab不支持),那么我们也欢迎使用。
欢迎提供解决方案,我们已经苦苦思索了几天。
1个回答

3

添加一个部署阶段,该阶段具有构建依赖项,可以来自一个或多个作业,并因此下载这些作业的工件,请参见下面的.gitlab-ci.yml:

stages:
- build
- ...
- deploy

buildjob:1:
  stage: build
  script:
  - build_to_web_dir.sh
  artifacts:
    paths:
     - web

buildjob:2:
  stage: build
  script:
  - build_to_web_dir.sh
  artifacts:
    paths:
     - web

deploy:
  stage: deploy
  GIT_STRATEGY: none
  image:  microsoft/azure-cli
  dependencies:
   - buildjob:1
   - buildjob:2
  script:
  - export containerName=mynewcontainername
  - export storageAccount=mystorageaccount
  - az storage blob delete-batch --source ${containerName} --account-name ${storageAccount} --output table
  - az storage blob upload-batch --source ./web --destination ${containerName} --account-name ${storageAccount} --output table --no-progress

在部署作业中,只有一个目录将位于CI_PROJECT_DIR ./web 中,其中包含构建作业生成的所有文件。
查看 storage quickstart azure 以创建和设置存储容器、帐户详细信息等。
对于部署阶段,我们可以使用 microsoft/azure-cli Docker 映像,因此我们可以从脚本中调用 az 命令,请参阅 storage-quickstart-blobs-cli 了解更详细的说明。
az storage blob upload-batch --source ./web --destination ${containerName} --account-name ${storageAccount} --output blobname --no-progress

将./web复制到存储容器中。
出于安全原因,我们不应在.gitlab-ci.yml中进行导出:
export AZURE_STORAGE_ACCOUNT="mystorageaccountname"
export AZURE_STORAGE_ACCESS_KEY="myStorageAccountKey"

但是它们应该在project_or_group/settings/ci_cd环境变量中定义,这样它们就会出现在脚本环境中。

“无论什么方法”是我所询问的。 - Madara's Ghost
已更新为 Azure 的具体内容 - Danny
1
我不是部署到存储,而是部署到 Web 应用程序 :) 这就是问题所在。从我看来,只有 FTP 或 Git,一个速度慢,另一个不切实际。我希望有一种我错过的替代方案,或者让部署变得更加顺畅的方法。 - Madara's Ghost
@MadaraUchiha,抱歉我没明白。你已经编译了你的应用程序,生成了html/css/js文件,然后上传到存储空间,参考https://learn.microsoft.com/en-us/azure/storage/blobs/storage-blob-static-website来将其发布到网站上,这个存储空间就是网站的后端。 - Danny
不,我使用的是.NET IIS WebApp,而不是存储。该WebApp还有一个C#后端,它需要访问文件以提供服务(通过Web.config条目间接访问,或直接通过C# Web API控制器访问)。 - Madara's Ghost

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接