在我的情况下,有四个基于Windows的环境,Dev、QA、UAT和Prod,这些环境都是自托管的运行程序。一旦构建完成,应该成功地按照DevQAUATPROD的顺序将软件包部署到每个环境中。下面的工作流程只针对Dev环境编写了构建和部署软件包的部分。现在需要进一步在QA、UAT和Prod环境部署发行版,那么相同的部署部分应该在QA、UAT和Prod上重复吗?没有“类”这样的概念,其中发布部署步骤可以通过参数多次调用吗?
工作流程-API
现在的问题是,在QA、UAT和Prod中,是否应该在同一个工作流程中再次重复相同的部署部分。这似乎不是一个好选择?我对GitHub Actions还很新,您的建议将非常有帮助。
构建部分
name: PASH-API-Build-Deployment
on:
push:
branches: [dev]
paths:
- "Pash.Web/**"
jobs:
build:
runs-on: dev-build
strategy:
matrix:
node-version: 3.1.301
env:
api-project: "./Pash.Web/PASH.Api/PASH.Api.csproj"
test-project: "./Pash.Web/PASH.Api.Test/PASH.Api.Test.csproj"
upload-artifacts-path: "./pashdotnetcorewebapp"
artifact-package-zip-directory-path: "_PASH-API-CI/Pash-drop"
steps:
- name: Generate build number
id: buildnumber
uses: einaregilsson/build-number@v3
with:
token: ${{ secrets.github_token }}
- name: Print build number - env
run: |
echo "::set-output name=VAR-BUILD-NUMBER::${env:BUILD_NUMBER}"
echo Build Id first way = ${env:BUILD_NUMBER}
echo Build Id second way = ${{ steps.buildnumber.outputs.build_number }}
- uses: actions/checkout@v2
- name: Setup .NET Core - ${{ matrix.node-version }}
uses: actions/setup-dotnet@v1
with:
dotnet-version: ${{ matrix.node-version }}
- name: Install dependencies
run: dotnet restore ${{env.api-project}}
- name: Build
run: dotnet build ${{env.api-project}} --configuration Release --no-restore
- name: Test
run: dotnet test ${{env.test-project}} --no-restore --verbosity normal
- name: Publish
run: dotnet publish ${{env.api-project}} -c Release -o pashdotnetcorewebapp
- name: publish artifacts
uses: actions/upload-artifact@v2
with:
name: pash-api-artifact-${{ steps.buildnumber.outputs.build_number }}
path: ${{ env.upload-artifacts-path }}
- name: Store Build Number on Build Server
run: echo ${{ steps.buildnumber.outputs.build_number }} > ${{github.workspace}}/buildnumberapi.txt
- name: Publish Upload Build File
uses: actions/upload-artifact@v2
with:
name: buildnumberapi
path: ${{github.workspace}}/buildnumberapi.txt
部署部分
deploy:
needs: [build]
runs-on: dev-deploy
env:
deploy-powershell-script: "D:\\github-deploy-ps.ps1"
stop-powershell-script: "D:\\stop-website-ps.ps1"
pool-name: "PASHAPIPool"
site-name: "PASHServicesAPISite"
steps:
#- name: Print Build Number from BUILD job
#run: echo ${{ needs.build.output.VAR-BUILD-NUMBER}}
- name: Download Build File
uses: actions/download-artifact@v2
with:
name: buildnumberapi
path: ${{github.workspace}}
- name: Print build ID
run: |
$varbuildnumber = cat ${{github.workspace}}/buildnumberapi.txt
echo The result is $varbuildnumber
echo "::set-output name=var-build-number::$varbuildnumber"
id: selectbuildID
- name: Download Release Artifacts
uses: actions/download-artifact@v2
with:
name: pash-api-artifact-${{steps.selectbuildID.outputs.var-build-number}}
path: ${{github.workspace}}/${{ env.artifact-package-zip-directory-path }}
- name: Run Powershell commands to deploy release
run: |
& '${{env.deploy-powershell-script}}' ${{env.pool-name}} ${{env.site-name}} ${{env.physical-path}} ${{ env.port-name}}
现在的问题是,在QA、UAT和Prod中,是否应该在同一个工作流程中再次重复相同的部署部分。这似乎不是一个好选择?我对GitHub Actions还很新,您的建议将非常有帮助。