首页 > 解决方案 > 使用 gitlab-ci 在 digitalocean ubuntu .net 上停止服务器

问题描述

我正在使用 gitlab-ci 在 Digitalocean 上部署 .net 应用程序。使用 gitlab runner 我在 Gitlab 上构建项目,使用“dotnet build”,下一步我需要以某种方式停止 Digitalocean 上的服务器以运行新版本的 rsync。

如果 .net 不在 docker 容器内,我该如何停止它。

我的步骤如下:

-
    - "dotnet build"
    - cd ..
    - ssh $SERVER_USER@$PROD_SERVER_IP '
    - /home/myproject
    // here needs step for stoping
    - rsync -az ./server/bin/ $SERVER_USER@$PROD_SERVER_IP:/home/myproject
    # Non interactive ssh gracefully reloads server
    - ssh $SERVER_USER@$PROD_SERVER_IP '.
      /etc/profile;
      systemctl restart nginx;'

标签: .netgitlabgitlab-cidigital-ocean

解决方案


一旦start, stop, restart, and log您创建了一个名为unit.

进入systemd我创建了新服务的目录sudo nano my.service

[Unit]
Description=My application

[Service]
WorkingDirectory=/var/www/my-directory
ExecStart=/usr/bin/dotnet /var/www/my-directory/bin/Debug/netcoreapp3.1/publish/MyApplication.dll
Restart=always
RestartSec=10
SyslogIdentifier=movie
User=root
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target

就我而言,由于 ConectionString 为空,问题出在我调用dotnet. 如果您有此问题,请更改接下来的两行

WorkingDirectory=/var/www/my-directory/bin/Debug/netcoreapp3.1/publish/
ExecStart=/usr/bin/dotnet MyApplication.dll

而里面gitlab-ci

-
    - "dotnet build"
    - cd ..
    - ssh $SERVER_USER@$PROD_SERVER_IP '
    - /home/myproject
    # stop step
    - ssh $SERVER_USER@$PROD_SERVER_IP '.
      /etc/profile;
      systemctl stop my.service;'
    - rsync -az ./server/bin/ $SERVER_USER@$PROD_SERVER_IP:/home/myproject
    # Non interactive ssh gracefully reloads server
    - ssh $SERVER_USER@$PROD_SERVER_IP '.
      /etc/profile;
      systemctl start my.service;
      systemctl restart nginx;'

推荐阅读