我正在使用 Github 作为源代码控制,并使用 Github Actions 作为我的CI / CD解决方案。我在某处有专用的Windows Server,该服务器接受我的仓库的已发布版本。
我有一个Github动作,它可以进行构建,测试,发布和部署(使用FTP )。我不相信“部署”的想法。例如,假设我的网站有一个庞大的代码库,那么每次我们提交(Push)时,FTP并不是一个有效的想法(我将发布的目录...而不是源代码发布到我的服务器上)。有时由于IIS锁定文件,FTP根本无法工作。使用Github Actions(或任何其他提供程序)将文件发布/部署到远程服务器的最可靠方法是什么。
下面是我的示例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"
答案 0 :(得分:2)
由于您的应用具有专用服务器,因此我建议使用Github self-hosted runner。
您在服务器上安装了运行器服务,然后Github CI / CD构建过程在专用服务器上运行。
构建脚本可以构建您的应用程序,然后在本地停止IIS站点,以防止文件被锁定。
之后,它可以将新版本复制(或自动复制)到app文件夹中。
Gitlab也有自托管的跑步者。
答案 1 :(得分:0)
我想为这个问题添加一个答案,因为Rosco的答案对我有帮助,但是我还有更多的贡献。
我们已经在要部署到的内部IIS服务器上设置了一个自托管运行器。因此,我们的GitHub Actions流程看起来有点像您(从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动作部署iis”时,这个问题的排名很高。