将 gitlab 存储库的一部分复制到 gitlab 中的另一个存储库

Duplicate part of gitlab repository to another repository inside gitlab

我有一个接受 Git 自动部署的共享服务器 运行 IIS,我使用的是 .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'

问题:如何创建一个管道命令,将部署的文件从代码存储库复制到deployment repository 在部署命令之后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

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

解决了

使用 GitLab 工件

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

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

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

 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

或者,如果您想将它们推送到其他存储库,那么事情就会变得更加棘手。你需要做这些事情:

  • 部署存储库
  • 获取access token
  • 将其存储在 代码存储库 pipeline variable 中 - 在我下面的示例中,它被称为 DEPLOY_REPO_TOKEN
  • 在您的工作中检索令牌(使用 variables),并在您对 部署存储库[=] 执行 git 操作时使用它进行身份验证69=]
  • 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 命令存在,否则您必须先安装它。