使用Github Actions进行部署

3
我使用Github作为我的源代码控制工具,并使用Github Actions作为我的CI/CD解决方案。我有一台专用的Windows服务器,接收我repo的发布版本。
我有一个Github Action,它执行构建、测试、发布和部署(使用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" 

像什么?请给予建议。 - undefined
2个回答

10

因为Rosco的回答帮助了我,但我想要添加更多内容来回答这个问题。

我们在内部IIS服务器上设置了自托管的Runner,以便进行部署。因此,我们的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/

接下来我们有一个全新的作业在本地运行:

  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”时,这个问题排名相当高。


嗨,这个整个 SO 对于我来说在构建我的应用程序的 Windows 部署例程方面帮助了我很多。如果你能给我一个关于你的“下线应用程序”的脚本是什么样的的想法,那就太好了。我猜它以某种方式停止/启动 IIS。 另外,我的应用程序在最小可能的 EC2 上运行。你知道托管的运行器需要多少资源吗? 非常感谢! - undefined
@Raif 我的帖子中确实有“将应用程序脱机”的命令。这不是一个脚本,而是一个单独的PowerShell命令。 - undefined

4

既然您有专用的服务器,我建议使用Github自托管Runner

您需要在服务器上安装Runner服务,然后Github CI/CD构建过程将在您的专用服务器上运行。

构建脚本可以构建您的应用程序,然后停止本地的IIS站点以防止锁定文件。

之后,它可以将新构建的内容复制(或使用robocopy)到应用程序文件夹中。

Gitlab也有自托管的Runner。


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