提问人:Madara's Ghost 提问时间:11/24/2017 更新时间:8/11/2019 访问量:4962
如何将生成项目从 GitLab CI 部署到 Azure 应用服务?
How can one deploy build artifacts from GitLab CI to an Azure app service?
问:
我在 gitlab.com 上托管了一个存储库,它有几个与之关联的构建作业。我希望能够将任何给定构建的编译工件(通常以 HTML/CSS/JavaScript 编译文件的形式)部署到 azure。
到目前为止,我看到的所有指南/文档/教程(1、2、3,仅举几例)都侧重于直接从 git 存储库部署文件,我可以看到这在某些情况下很有用,但这不是我在这种情况下需要的,因为我想要的是编译目标,而不是源代码。
欢迎解决方案,我们已经为此苦苦挣扎了好几天。
GitLab 的替代品(如果它不在 GitLab 中)也将受到欢迎。
答:
3赞
Danny
9/15/2018
#1
添加一个部署阶段,该阶段具有生成依赖项,来自作业或多个作业,从而下载这些作业的项目,请参阅下面的.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
查看存储快速入门 Azure,用于创建和设置存储容器、帐户详细信息等。
对于部署阶段,我们可以使用 docker 映像,因此我们可以从脚本调用命令,有关更多详细信息,请参阅 storage-quickstart-blobs-cli。microsoft/azure-cli
az
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 环境变量中定义,以便它们出现在脚本环境中。
评论
0赞
Madara's Ghost
2/11/2019
那个“无论什么方法”就是我要问的
0赞
Danny
2/11/2019
更新了 azure 细节
1赞
Madara's Ghost
2/11/2019
我不是部署到存储,而是部署到 Web 应用:)这就是问题所在。至少从我所看到的来看,它要么是 FTP 要么是 Git,一个很慢,另一个不切实际。我希望有一个我错过的替代方案,或者某种使部署不那么糟糕的方法。
0赞
Danny
2/11/2019
@MadaraUchiha,对不起,不明白。你已经编译了你的应用程序,产生了html/css/js,你上传到存储并查看 learn.microsoft.com/en-us/azure/storage/blobs/...要让它发布到网络上,存储是网络的后端。
0赞
Madara's Ghost
2/11/2019
不,我使用的是 .NET IIS WebApp,而不是存储。该 Web 应用上还有一个 C# 后端,它需要访问文件才能提供它们(间接通过 Web.config 条目,或直接通过 C# Web API 控制器)
评论