Saya menggunakan Github sebagai kontrol sumber saya, dan menggunakan Tindakan Github sebagai solusi CI/CD saya. Saya memiliki Server Windows khusus di suatu tempat, yang menerima versi repo saya diterbitkan.

Saya memiliki Github Action, yang melakukan Built, Test, Publish dan Deploy (menggunakan FTP). Saya tidak yakin dengan ide "Menyebarkan". misalnya katakanlah situs web saya memiliki basis kode yang besar, dan kemudian melakukan FTP setiap kali kami membuat komit (Push) BUKAN benar-benar ide yang produktif (saya menerbitkan direktori yang diterbitkan ... Terkadang FTP tidak berfungsi, karena IIS Mengunci file. apa cara paling andal untuk memublikasikan/menyebarkan file ke server jauh menggunakan Github Actions (atau penyedia lainnya).

Di bawah ini adalah contoh file Yaml saya ...

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" 
2
user2404597 30 Juni 2020, 20:52

2 jawaban

Jawaban Terbaik

Karena Anda memiliki server khusus untuk aplikasi Anda, saya sarankan menggunakan Pelari yang dihosting sendiri oleh Github.

Anda menginstal layanan runner di server Anda dan kemudian proses pembuatan Github CI/CD berjalan di server khusus Anda.

Skrip build dapat membangun aplikasi Anda kemudian menghentikan situs IIS secara lokal yang mencegah file terkunci.

Setelah itu dapat menyalin (atau robocopy) build baru ke dalam folder aplikasi.

Gitlab juga memiliki runner yang dihosting sendiri.

3
Rosco 1 Juli 2020, 00:31

Saya ingin menambahkan jawaban untuk pertanyaan ini karena jawaban Rosco membantu saya, tetapi saya harus berkontribusi lebih banyak.

Kami telah menyiapkan runner yang dihosting sendiri di server IIS internal yang ingin kami gunakan. Jadi alur Tindakan GitHub kami terlihat seperti milik Anda pada awalnya (hingga perintah dotnet publish), tetapi kemudian memiliki beberapa bit tambahan.

Pertama, masih di cloud, kami "mengunggah" artefak dari build (saya mengganti nama proyek kami dengan "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/

Kemudian kami memiliki pekerjaan baru yang berjalan di 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

Jadi ini membuat file app_offline.htm di folder situs web kami (E:\Foo), lalu menarik artefak turun dari GitHub langsung ke folder itu. Setelah selesai, file app_offline.htm akan dihapus dan situs dimulai kembali.

Ia bekerja memperlakukan! Jelas ingin mendengar umpan balik dari orang lain jika Anda pikir saya melakukan sesuatu yang salah, tetapi saya ingin menyampaikannya di sini karena pertanyaan ini berperingkat cukup tinggi ketika Anda mencari "github actions deploy iis".

1
Matt Hamilton 4 Desember 2020, 04:26