我有一个运行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
通过添加类似- 'cp -r path/to/published/files/* deploy/'
的-r
解决
使用GitLab工件
dotnet发布命令将生成项目,然后将输出文件放到生成系统上的文件夹中。
这将是运行publish-to-dev
作业的GitLab Runner计算机上的一个文件夹。
如果您希望能够从GitLab下载publish
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
命令,否则您必须先安装该命令