成功完成管道后发送电子邮件/网络挂接呼叫

时间:2019-04-12 09:18:39

标签: gitlab continuous-delivery

我们使用Gitlab进行源代码控制和CI / CD。

我想通知我们的测试人员,当特定分支上的管道成功完成时,我们的应用程序已在测试环境中更新。

这样做的标准是,如果管道a)成功完成且b)在特定分支上,则我只想发送电子邮件/拨打网络钩子。

我们的CI / CD管道通常具有以下阶段:

stages:
 - setup
 - compliance
 - test
 - build
 - deploy

例如,我们的build阶段之一的示例是:

build-master:
  image: docker
  services:
    - docker:dind
  stage: build
  script:
    - docker login -u $DEV_DOCKER_REGISTRY_USER -p $DEV_DOCKER_REGISTRY_PW $DEV_DOCKER_REGISTRY_HOST
    - docker build --pull --build-arg HG_APP_DEPLOY_KEY="$HG_APP_DEPLOY_KEY" -t $DEV_DOCKER_REGISTRY_HOST/$CI_PROJECT_NAME:stable .
    - docker push $DEV_DOCKER_REGISTRY_HOST/$CI_PROJECT_NAME
  only:
    - master

我正在尝试研究一种添加最后阶段的方法,例如notify,它可以向我们的Microsoft Teams频道之一发送电子邮件(或称为Webhook)。这很容易在团队中进行设置,因此我不必为此担心。

我已经研究了Gitlab上的一些集成选项。例如,您可以设置 Teams 集成,或者设置 Push电子邮件集成。 但是这些都不足够,因为它们不允许我过滤仅在特定分支上是a)成功和b)的管道

我还研究了Gitlab上的 Webhooks 选项,但这不适用于Teams-我得到了400 error summary text required,它似乎是无法克服的(因为无法添加这样的选项) Webhooks用户界面的摘要)。

因此,假设我无法使用Gitlab的UI功能(很高兴接受有关此问题的答案,但是如果我们能够满足上述条件),我现在正在考虑如何像其他部分一样使用Docker。管道,以发送电子邮件或呼叫网络挂钩。

在Gitlab CI / CD管道中最快/最容易/ 最少行数的方式是什么?

1 个答案:

答案 0 :(得分:2)

我非常确定curl阶段使用的docker图像上有一个build-master。因此,可以在build-master的最后一行中调用某些外部电子邮件服务,例如sendgrid.com

...
- docker push $DEV_DOCKER_REGISTRY_HOST/$CI_PROJECT_NAME
- curl --request POST \
   --url https://api.sendgrid.com/v3/mail/send \ ...

这是使用最少的代码行的解决方案。

如果docker映像中没有curl,我建议进入一个新阶段:

notify_team:
  image: ruby:2.1
  stage: notify
  script:
    - curl --request POST 
        --url https://api.sendgrid.com/v3/mail/send ...
  only: master