使用 Github 操作进行部署
Deploy Using Github Actions
我正在使用 Github 作为我的源代码控制,并使用 Github Actions 作为我的 CI/CD 解决方案。我在某个地方有一个专用的 Windows 服务器,它接受我的仓库的 已发布 版本。
我有一个 Github 操作,它执行构建、测试、发布和部署(使用 FTP)。我不相信“部署”的想法。例如,假设我的网站有一个巨大的代码库,然后每次我们提交(推送)时 FTPing 并不是一个真正有效的想法(我正在发布已发布的目录......而不是我的源代码服务器)。有时 FTPing 根本不起作用,因为 IIS 锁定了文件。 publish/deploy 文件到远程服务器 使用 Github 操作(或任何其他提供程序)的最可靠方法是什么。
下面是我的示例 Yaml 文件...
name: .NET Core
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup .NET Core
uses: actions/setup-dotnet@v1
with:
dotnet-version: 2.1
- name: Install dependencies
run: dotnet restore
- name: Build
run: dotnet build --configuration Release --no-restore
- name: Test
run: dotnet test --no-restore --verbosity normal
- name: Run the Publish
run: dotnet publish --configuration Release --no-restore --output ./publish
- name: FTP-Deploy-Action
uses: sebastianpopp/ftp-action@releases/v2
with:
host: my_host
user: my_user
password: ${{ secrets.FTP_PASSWORD }}
localDir: "/home/runner/work/CiTest/CiTest/CiTest/publish"
remoteDir: "CI-Test"
由于您的应用程序有专用服务器,我建议您使用 Github self-hosted runner。
您在您的服务器上安装运行器服务,然后 Github CI/CD 构建过程在您的专用服务器上运行。
构建脚本可以构建您的应用程序,然后在本地停止 IIS 站点以防止锁定文件。
之后它可以将新构建复制(或自动复制)到应用程序文件夹中。
Gitlab 也有自托管的运行器。
我想补充这个问题的答案,因为 Rosco 的回答对我有帮助,但我还有更多的贡献。
我们已经在要部署到的内部 IIS 服务器上设置了一个自托管运行器。所以我们的 GitHub 动作流程看起来有点像你的开始(直到 dotnet publish
命令),但是有一些额外的位。
首先,仍然在云端,我们从构建中“上传”工件(我将我们的项目名称替换为“Foo”):
- name: Upload a Build Artifact
uses: actions/upload-artifact@v2.2.1
with:
name: application
path: /home/runner/work/Foo/Foo/Foo/bin/Release/net5.0/publish/
然后我们有一个在 prem 上运行的全新作业:
deploy:
needs: build
runs-on: self-hosted
steps:
- name: Take application offline
run: New-Item -Type File -Name app_offline.htm -Path E:\Foo -Force
- name: Download new binaries over the top of the app
uses: actions/download-artifact@v2
with:
name: application
path: E:\Foo
- name: Bring the app back online
run: Remove-Item E:\Foo\app_offline.htm
所以这会在我们的网站文件夹 (E:\Foo) 中创建一个 app_offline.htm 文件,然后将工件从 GitHub 直接拉到该文件夹中。完成后,它会删除 app_offline.htm 文件并重新启动站点。
效果很好!如果您认为我做错了什么,显然很想听到其他人的反馈,但我想把它放在这里,因为当您搜索“github actions deploy iis”时,这个问题的排名非常高。
我正在使用 Github 作为我的源代码控制,并使用 Github Actions 作为我的 CI/CD 解决方案。我在某个地方有一个专用的 Windows 服务器,它接受我的仓库的 已发布 版本。
我有一个 Github 操作,它执行构建、测试、发布和部署(使用 FTP)。我不相信“部署”的想法。例如,假设我的网站有一个巨大的代码库,然后每次我们提交(推送)时 FTPing 并不是一个真正有效的想法(我正在发布已发布的目录......而不是我的源代码服务器)。有时 FTPing 根本不起作用,因为 IIS 锁定了文件。 publish/deploy 文件到远程服务器 使用 Github 操作(或任何其他提供程序)的最可靠方法是什么。
下面是我的示例 Yaml 文件...
name: .NET Core
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup .NET Core
uses: actions/setup-dotnet@v1
with:
dotnet-version: 2.1
- name: Install dependencies
run: dotnet restore
- name: Build
run: dotnet build --configuration Release --no-restore
- name: Test
run: dotnet test --no-restore --verbosity normal
- name: Run the Publish
run: dotnet publish --configuration Release --no-restore --output ./publish
- name: FTP-Deploy-Action
uses: sebastianpopp/ftp-action@releases/v2
with:
host: my_host
user: my_user
password: ${{ secrets.FTP_PASSWORD }}
localDir: "/home/runner/work/CiTest/CiTest/CiTest/publish"
remoteDir: "CI-Test"
由于您的应用程序有专用服务器,我建议您使用 Github self-hosted runner。
您在您的服务器上安装运行器服务,然后 Github CI/CD 构建过程在您的专用服务器上运行。
构建脚本可以构建您的应用程序,然后在本地停止 IIS 站点以防止锁定文件。
之后它可以将新构建复制(或自动复制)到应用程序文件夹中。
Gitlab 也有自托管的运行器。
我想补充这个问题的答案,因为 Rosco 的回答对我有帮助,但我还有更多的贡献。
我们已经在要部署到的内部 IIS 服务器上设置了一个自托管运行器。所以我们的 GitHub 动作流程看起来有点像你的开始(直到 dotnet publish
命令),但是有一些额外的位。
首先,仍然在云端,我们从构建中“上传”工件(我将我们的项目名称替换为“Foo”):
- name: Upload a Build Artifact
uses: actions/upload-artifact@v2.2.1
with:
name: application
path: /home/runner/work/Foo/Foo/Foo/bin/Release/net5.0/publish/
然后我们有一个在 prem 上运行的全新作业:
deploy:
needs: build
runs-on: self-hosted
steps:
- name: Take application offline
run: New-Item -Type File -Name app_offline.htm -Path E:\Foo -Force
- name: Download new binaries over the top of the app
uses: actions/download-artifact@v2
with:
name: application
path: E:\Foo
- name: Bring the app back online
run: Remove-Item E:\Foo\app_offline.htm
所以这会在我们的网站文件夹 (E:\Foo) 中创建一个 app_offline.htm 文件,然后将工件从 GitHub 直接拉到该文件夹中。完成后,它会删除 app_offline.htm 文件并重新启动站点。
效果很好!如果您认为我做错了什么,显然很想听到其他人的反馈,但我想把它放在这里,因为当您搜索“github actions deploy iis”时,这个问题的排名非常高。