1

我有一个运行 IIS 的共享服务器,它接受 Git 自动部署,我使用的是 .Net 2.2。文件将在使用 SSH 和 WebHooks 推送到 gitlab 存储库后立即部署到 plesk 网站。所以这个存储库只会部署,例如:dll文件。我在 gitlab 中有另一个存储库用于存储库。

我可以通过管道中的命令在本地发布。

 publish-to-dev:
  stage: publish-to-dev
  image: mcr.microsoft.com/dotnet/sdk:3.1-focal
  script:
    - 'dotnet publish -c Release'

问题:如何创建一个管道命令, 在部署命令之后将部署的文件从代码存储库复制到部署存储库dotnet publish

编辑

Mike bellow 回答了问题,但我在复制文件的过程中遇到错误,我收到如下消息:

$ cp artifacts/emaua/* deploy/
cp: -r not specified; omitting directory 'artifacts/emaua/cs'
cp: -r not specified; omitting directory 'artifacts/emaua/de'
cp: -r not specified; omitting directory 'artifacts/emaua/es'
cp: -r not specified; omitting directory 'artifacts/emaua/fr'
cp: -r not specified; omitting directory 'artifacts/emaua/it'
cp: -r not specified; omitting directory 'artifacts/emaua/ja'
cp: -r not specified; omitting directory 'artifacts/emaua/ko'
cp: -r not specified; omitting directory 'artifacts/emaua/pl'
cp: -r not specified; omitting directory 'artifacts/emaua/pt-BR'
cp: -r not specified; omitting directory 'artifacts/emaua/refs'
cp: -r not specified; omitting directory 'artifacts/emaua/ru'
cp: -r not specified; omitting directory 'artifacts/emaua/runtimes'
cp: -r not specified; omitting directory 'artifacts/emaua/tr'
cp: -r not specified; omitting directory 'artifacts/emaua/wwwroot'
cp: -r not specified; omitting directory 'artifacts/emaua/zh-Hans'
cp: -r not specified; omitting directory 'artifacts/emaua/zh-Hant'
Cleaning up project directory and file based variables
00:00
ERROR: Job failed: exit code 1

通过添加-rlike解决- 'cp -r path/to/published/files/* deploy/'

4

1 回答 1

1

使用 GitLab 工件

dotnet publish命令将构建项目,然后将输出文件放到构建系统上的文件夹中。

这将是运行该publish-to-dev作业的 GitLab Runner 机器上的一个文件夹。

如果您希望能够publish从 GitLab 下载 ed 文件,那么您可以使用工件来指定包含已发布文件的目录在完成后被压缩并附加到作业。

 publish-to-dev:
  stage: publish-to-dev
  image: mcr.microsoft.com/dotnet/sdk:3.1-focal
  script:
    - 'dotnet publish -c Release'
  artifacts:
    paths:
      - path/to/published/files/

这些文件将artifacts.zip在工作中可用(在右侧栏上)。

注意事项:

这实际上并没有将发布的文件放入部署存储库。为此,您必须下载 ZIP,然后自己将其添加到存储库中。


git在工作中使用

或者,由于您想将这些推送到另一个存储库,那么事情就会变得更加棘手。你需要做这些事情:

  • 获取部署存储库访问令牌
  • 将其存储在代码存储库的管道变量中- 在下面的示例中,它被称为DEPLOY_REPO_TOKEN
  • 在您的作业中检索令牌(使用),并在您对部署存储库执行操作variables时使用它进行身份验证git
  • publish-to-dev作业中,git clone部署存储库(使用令牌)、git add发布的文件,然后git push是这样的:
 variables:
  DEPLOY_REPO_TOKEN: $DEPLOY_REPO_TOKEN
  DEPLOY_REPO_URL: 'gitlab.example.com/group/project/deployment-repository'
 publish-to-dev:
  stage: publish-to-dev
  image: mcr.microsoft.com/dotnet/sdk:3.1-focal
  script:
    - 'dotnet publish -c Release'
    - `git clone https://oauth2:$DEPLOY_REPO_TOKEN@$DEPLOY_REPO_URL.git deploy'
    - 'cp -r path/to/published/files/* deploy/'
    - 'cd deploy'
    - 'git add .'
    - 'git commit -m "deployed"'
    - 'git push'

注意事项:

  • 我没有查看mcr.microsoft.com/dotnet/sdk:3.1-focal图像以查看这是否是 Linux 上的 dotnet(以便该cp命令可以工作),或者它是否是 Windows 图像(需要copy不同的路径分隔符)。
  • 此外,该映像还需要该git命令存在,否则您必须先安装该命令。
于 2021-10-23T21:17:19.390 回答