前言: 如何通过Gitlab的Webhook功能在windows服务器下自动部署代码,请参考之前的一片文章: Gitlab通过Webhook在Windows服务器下自动部署前端代码 今天配置新服务器上的代码自动发布程序,由于webhook代码很早之前就部署到服务器上了,且不是为了自动部署程序,所有未配置应用程序池权限,当Process执行git pull命令时出现了问题。 以下为完整错误信息: Logon failed, use ctrl+c to cancel basic credential prompt. bash: /dev/tty: No such device or address error: failed to execute prompt script (exit code 1) fatal: could not read Username for 'http://xxx.xxx.com/': No error 之前的文章《Gitlab通过Webhook在Windows服务器下自动部署前端代码》由于在执行Process时未配置错误输出,导致一直看不到错误信息。Process可以执行完成,但是没有返回值。猜测肯定出现了异常,在原先的代码基础上加入错误返回的信息,就可以看到出现的错误信息。调整后的代码如下:
public string Run(string args)
{
var starInfo = new ProcessStartInfo(FilePath, args)
{
CreateNoWindow = true,
RedirectStandardOutput = true,
RedirectStandardError = true,
UseShellExecute = false,
WorkingDirectory = WorkingDirectory
};
Process process = Process.Start(starInfo);
return process.StandardOutput.ReadToEnd() + process.StandardError.ReadToEnd();
}
错误是看到了,但是这个异常明显是执行命令时没有读取到git的登录信息。
这是由于之前服务器已经存储过一个其他人的登录gitlab服务器的信息,而我拉取代码时使用的用户信息则无法保存到主机上导致的,那我们也不能清除别人的用户信息吧。所以想其他办法。
第一种解决方案,也是最直接的解决方案,修改IIS配置。
IIS配置有两点要修改,找到部署服务站点的应用程序池,高级设置中有两个地方。
a.进程模型中的标识要修改服务器管理员账号或者有管理员权限的账户。
b.进程模型中的加载用户配置文件设置为:True.
做完以上就可以正常的使用了。
第二种解决方案,对应项目的远程仓库连接地址配置用户信息,配置方式如下:
https://username:password@xxxx.xxx.com/仓库地址。
此方法虽说可以正常从我们的git服务器上拉取代码了,可能还是会报一点错误信息,不过不影响使用,可以忽略。
错误如下:
fatal: Win32Exception encountered. Failed to write credentials
此错误是由:process.StandardError.ReadToEnd()输出的。但是我们的执行的git命令正确的输出结果也是有的。所有可以忽略此错误信息。