使用 Github Actions 进行部署

use*_*597 3 github continuous-deployment asp.net-core github-actions

我使用Github作为我的源代码管理,并使用Github Actions作为我的 CI/CD 解决方案。我在某处有一个专用的 Windows Server,它接受我的存储库的已发布版本。

我有一个 Github Action,它可以进行构建、测试、发布和部署(使用 FTP)。我不相信“部署”的想法。例如,假设我的网站有一个巨大的代码库,然后每次我们进行提交(推送)时进行 FTPing 并不是一个富有成效的想法(我正在发布已发布的目录......而不是我的服务器的源代码)。有时,由于 IIS 锁定文件,FTPing 根本不起作用。使用 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" 
Run Code Online (Sandbox Code Playgroud)

Mat*_*ton 10

我想添加这个问题的答案,因为罗斯科的答案对我有帮助,但我还有更多的贡献。

我们已经在要部署到的内部 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/
Run Code Online (Sandbox Code Playgroud)

然后我们就有了一个在本地运行的全新作业:

  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
Run Code Online (Sandbox Code Playgroud)

因此,这会在我们的网站文件夹 (E:\Foo) 中创建一个 app_offline.htm 文件,然后将工件从 GitHub 直接拉到该文件夹​​中。完成后,它会删除 app_offline.htm 文件,并且站点会再次启动。

这是一种享受!如果您认为我做错了什么,显然很想听到其他人的反馈,但我想把它放在这里,因为当您搜索“github actions deploy iis”时,这个问题排名相当高。