Xcode Server Bot不发送电子邮件报告

wmtdaxz3  于 2022-11-18  发布在  其他
关注(0)|答案(4)|浏览(162)

我正在本地iMac上运行Xcode Server Bots,但电子邮件通知没有发送。
我已经遵循了许多教程,并有postfix的设置和工作。我可以成功地发送电子邮件使用命令

sudo echo "Test sending email from Postfix" | mail -s "Test Postfix" xxxxxx@me.com

我的电子邮件被接收。
XcodePreferencesServer & BotsMail下,我按照所有教程将所有内容留空。
对于我的Bot,在Triggers下,我有一个Periodic Email Report,其中Schedule设置为After each integration,并设置我的fromreply-toTo字段,并勾选每个Notify On

我使用以下命令监视smtpsmtp进程

sudo log stream --predicate  '(process == "smtpd") || (process == "smtp")' --info

并且当我使用上面的测试发送电子邮件时,我得到一个显示的日志行。
然而,当我的Xcode机器人程序完成时,我什么都没有得到。

Feb  2 13:47:16  [596] <Info>: Executing trigger 'Periodic Email Report'
Feb  2 13:47:16  [596] <Info>: Executing trigger 'New Issue Email'

所以电子邮件报告没有触发任何形式的smtp。它甚至使用了postfix吗?我可以记录其他东西来看看它是否触发了postfix吗?
编辑------
我发现一些sendmail日志似乎显示Xcode没有使用postdrop的正确权限:

kernel    Sandbox: sendmail(48548) deny(1) forbidden-exec-sugid
sendmail    fatal: execvp /usr/sbin/postdrop: Operation not permitted
sendmail    warning: command "/usr/sbin/postdrop -r" exited with status 1
sendmail    fatal: xcode@<redacted>.com(450): unable to execute /usr/sbin/postdrop -r: Undefined error: 0

我的postdrop权限与我在网上找到的权限相比似乎是正确的:

-rwxr-xr-x    1 root   wheel        570448  1 Jan  2020 postalias
-rwxr-xr-x    1 root   wheel        466416  1 Jan  2020 postcat
-rwxr-xr-x    1 root   wheel        823488  1 Jan  2020 postconf
-rwxr-sr-x    1 root   _postdrop    588624  1 Jan  2020 postdrop
-rwxr-xr-x    1 root   wheel        431904  1 Jan  2020 postfix
-rwxr-xr-x    1 root   wheel        432032  1 Jan  2020 postkick
-rwxr-xr-x    1 root   wheel        449424  1 Jan  2020 postlock
-rwxr-xr-x    1 root   wheel        431872  1 Jan  2020 postlog
-rwxr-xr-x    1 root   wheel        569632  1 Jan  2020 postmap
-rwxr-xr-x    1 root   wheel        465872  1 Jan  2020 postmulti
-rwxr-sr-x    1 root   _postdrop    588448  1 Jan  2020 postqueue
-rwxr-xr-x    1 root   wheel        466784  1 Jan  2020 postsuper

我的/etc/group文件中的_postdrop用户为:

_postdrop:*:28:

或者我阅读错了吗?sendmail用户需要权限才能使用postdrop吗?
编辑2 -------
看起来这可能是Big Sur使根分区只读的问题。sudo postfix set-permissions不能做它的事情。
所以我猜现在的问题是,如何安装/使用Xcode服务器发送电子邮件的不同方法?

ao218c7q

ao218c7q1#

经过大量的研究,在其他地方提出问题和尝试和错误,它似乎只是不会工作。在这条线上的某个地方,Xcode服务器没有自动发送电子邮件的正确权限。这可能是Xcode服务器的一个错误,甚至大苏尔。
sendmail本身是一个相当野兽设置,但如果你已经得到了它的工作从命令行建议在许多教程,那么有一种方法,你可以得到电子邮件从Xcode服务器。
根据苹果论坛上一位会员的建议,使用Post Integration Script似乎可以直接调用sendmail。因此,我想出了以下脚本:

**将其添加为集成后脚本:**将路径更改为保存以下2个文件的位置。

#!/bin/sh

SCRIPT="/Users/darren/Desktop/mail.sh"
echo "Executing script $SCRIPT"
source $SCRIPT

电子邮件.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-GB">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <title>%%XCS_BOT_NAME%%</title>
  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>

  <style type="text/css">
    a[x-apple-data-detectors] {color: inherit !important;}
  </style>

</head>
<body style="margin: 0; padding: 0;">
  <table role="presentation" border="0" cellpadding="0" cellspacing="0" width="100%">
    <tr>
      <td style="padding: 20px 0 30px 0;">

        <table align="center" border="0" cellpadding="0" cellspacing="0" width="600" style="border-collapse: collapse; border: 1px solid #cccccc;">
          <tr>
            <td align="center" bgcolor="%%COLOUR%%" style="padding: 40px 0 30px 0;">
              Integration #%%XCS_INTEGRATION_NUMBER%% of %%XCS_BOT_NAME%% Bot %%RESULT%%
            </td>
          </tr>
          <tr>
            <td bgcolor="#ffffff" style="padding: 40px 30px 40px 30px;">
              <table border="0" cellpadding="0" cellspacing="0" width="100%" style="border-collapse: collapse;">
                <tr>
                  <td style="color: #153643; font-family: Arial, sans-serif;">
                    <h1 style="font-size: 24px; margin: 0;">Latest commit</h1>
                  </td>
                </tr>
                <tr>
                  <td style="color: #153643; font-family: Arial, sans-serif; font-size: 16px; line-height: 24px; padding: 20px 0 30px 0;">
                    <p style="margin: 0;">%%LATESTMERGE%%</p>
                  </td>
                </tr>
              </table>
            </td>
          </tr>
        </table>
      </td>
    </tr>
  </table>
</body>
</html>

mail.sh根据需要编辑4个变量。您可能需要对该文件进行chmod +x mail.sh

#!/bin/sh

# Customise these fields
TO_EMAIL="youremail@me.com"
FROM_EMAIL="xcode@whatever_you_setup_in_sendmail.com"
EMAILTEMPLATE=$(</Users/darren/Desktop/email.html) # $(<path/to/email.html) don't forget the < before the path
EMAIL_AFTER_EVERY_INTEGRATION=1 # true=1/false=0 | 0 will only email on failures/warnings

# Result colour
COLOUR='#888881'
if [[ $XCS_INTEGRATION_RESULT == 'warnings' ]] || [[ $XCS_INTEGRATION_RESULT == 'analyzer-warnings' ]]; then
    COLOUR='#D9CE1F'
elif [[ $XCS_INTEGRATION_RESULT == 'test-failures' ]] || [[ $XCS_INTEGRATION_RESULT == 'build-errors' ]]; then
    COLOUR='#C03636'
elif [[ $XCS_INTEGRATION_RESULT == 'succeeded' ]]; then
    if [ $EMAIL_AFTER_EVERY_INTEGRATION == 0 ]; then
        exit 0
    fi
    COLOUR='#83BC39'
elif [[ $XCS_INTEGRATION_RESULT == 'canceled' ]]; then
    COLOUR='#888881'
fi

# Result
RESULT="Unknown result ${XCS_INTEGRATION_RESULT}"
if [[ ${XCS_INTEGRATION_RESULT} == "succeeded" ]]; then
    RESULT="Succeeded"
elif [[ ${XCS_INTEGRATION_RESULT} == "canceled" ]]; then
    RESULT="was Cancelled"
elif [[ ${XCS_INTEGRATION_RESULT} == "warnings" ]]; then
    if [[ ${XCS_WARNING_COUNT} == 1 ]]; then
        RESULT="Has 1 Warning"
    else
        RESULT="Has ${XCS_WARNING_COUNT} Warnings"
    fi
elif [[ ${XCS_INTEGRATION_RESULT} == "analyzer-warnings" ]]; then
    if [[ ${XCS_ANALYZER_WARNING_COUNT} == 1 ]]; then
        RESULT="Has 1 Warning"
    else
        RESULT="Has ${XCS_ANALYZER_WARNING_COUNT} Warnings"
    fi
elif [[ ${XCS_INTEGRATION_RESULT} == "test-failures" ]]; then
    if [[ ${XCS_TEST_FAILURE_COUNT} == 1 ]]; then
        RESULT="Failed 1 Test"
    else
        RESULT="Failed ${XCS_TEST_FAILURE_COUNT} Tests"
    fi
elif [[ ${XCS_INTEGRATION_RESULT} == "build-errors" ]]; then
    if [[ ${XCS_ERROR_COUNT} == 1 ]]; then
        RESULT="Failed with 1 Error"
    else
        RESULT="Failed with ${XCS_ERROR_COUNT} Errors"
    fi
fi

SUBJECT="$RESULT"

# If not null/empty
if [ -n "${XCS_PRIMARY_REPO_DIR}" ]; then
    LATESTMERGE="$(cd $XCS_PRIMARY_REPO_DIR && git log -1)"
else
    LATESTMERGE="Invalid repo $XCS_PRIMARY_REPO_DIR"
fi

# Replace contents of email
EMAILTEMPLATE="${EMAILTEMPLATE//%%COLOUR%%/$COLOUR}"
EMAILTEMPLATE="${EMAILTEMPLATE//%%XCS_BOT_NAME%%/${XCS_BOT_NAME}}"
EMAILTEMPLATE="${EMAILTEMPLATE//%%XCS_INTEGRATION_NUMBER%%/${XCS_INTEGRATION_NUMBER}}"
EMAILTEMPLATE="${EMAILTEMPLATE//%%RESULT%%/$RESULT}"
EMAILTEMPLATE="${EMAILTEMPLATE//%%LATESTMERGE%%/$LATESTMERGE}"

# echo $EMAILTEMPLATE

echo "Sending report to $TO_EMAIL"

# Send email directly through sendmail
(  
echo "From: $FROM_EMAIL"  
echo "To: $TO_EMAIL"  
echo "MIME-Version: 1.0"  
echo "Subject: $SUBJECT"   
echo "Content-Type: text/html"   
echo $EMAILTEMPLATE  
) | /usr/sbin/sendmail -t

您将收到如下电子邮件:

如果有人知道他,我们可以添加实际的失败原因或错误,这将是可怕的。有一个变量列表,我们可以使用here,我认为它可能涉及到查看实际的构建路径。

vs91vp4v

vs91vp4v2#

你的过程是完全正确的,但只有一个例外。正如你所指出的,日志说,有一个问题的权限。
这将是很好的共享rpm -qV postfixpostfix check完整的日志,以找出问题的深刻,但你已经有一些日志,其中声明Xcode没有权限。
你也可以使用你的电子邮件机器人来弄清楚“在Xcode报告导航器中管理机器人”。这里是苹果文档。
我想这样就可以设置权限了:

sudo mkdir -p /Library/Server/Mail/Data/Spool
sudo /usr/sbin/postfix set-permissions
sudo /usr/sbin/postfix start

在运行此命令以清除postprop后,进行双重检查

$ sudo killall postdrop

EDIT1:或者,如果仍然不起作用,最好尝试使用此命令

sudo /etc/init.d/postfix stop
sudo killall -9 postdrop

设置权限:

sudo chown postfix:postdrop /var/spool/postfix/maildrop
sudo chmod 1730 /var/spool/postfix/maildrop

重新启动后缀:

sudo /etc/init.d/postfix start

在最后阶段,应该是收到这样一封电子邮件:

最终编辑

我的第一个答案和Edit1答案不适用于PO。
有一些旧的线程表明,这可能是一个错误的不同MacOS版本。这似乎是一个问题,与大苏尔在后缀方面。
Thread1
Thread2

mbyulnm0

mbyulnm03#

我对Xcode不太熟悉,但你描述的问题似乎是Xcode应用程序和Postfix SMTP服务器之间的通信问题。我会尝试以下方法:

  • 获取Xcode日志。
  • 我在下面找到的帖子指出,这可以通过以下方法来实现:(a)使用Console.app,(b)通过www.example.com启动XcodeTerminal.app,或者(c)检查诊断报告
  • https://stackoverflow.com/a/46674772/15238212
  • 获取Postfix日志。
  • 同样,这些日志可以在www.example.com中找到Console.app因为它们应该由ASL创建(即macOS的系统日志)
  • 此外,您可以按照Postfix网站上的文档中所述指定自己的日志文件:http://www.postfix.org/MAILLOG_README.html

希望通过这样做,您能够看到您配置的邮件更新是否正在从Xcode发送到您的Postfix服务器。

woobm2wo

woobm2wo4#

Xcode服务器已弃用。最好移到Jenkins。

相关问题