首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从GitLab CI管道的工作发送电子邮件?

如何从GitLab CI管道的工作发送电子邮件?
EN

Stack Overflow用户
提问于 2020-01-12 19:04:46
回答 1查看 11.7K关注 0票数 8

我正在尝试设置一个GitLab CI配置,该配置在管道的作业完成后发送一封电子邮件,其中包含指向上传站点的工件链接。管道基于pom.xml构建,然后使用sonarqube进行测试,然后使用curl将工件上传到特定的工件位置。工件目录的文件夹结构和链接取决于CI_PIPELINE_ID,在所有这些都成功之后,我需要通过邮件将这个用于下载工件的链接发送给一个人员列表。我的.gitlab-config.yml如下所示:

代码语言:javascript
复制
image: maven:3.3.9-jdk-8

variables:
  MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true"
  MAVEN_CLI_OPTS: "-U --batch-mode --errors --fail-at-end --show-version -DinstallAtEnd=true -DdeployAtEnd=true"
  REPO_NAME: "<artifactory url>"

cache:
  paths:
    - .m2/repository
    - ./target/

stages:
  - build

compile_commit:
  stage: build
  only:
    - cr_integrate
  before_script:
    - git submodule sync --recursive
    - git submodule update --init --recursive --remote
  script:
    - mvn -f pom.xml -s settings.xml $MAVEN_CLI_OPTS clean install $MAVEN_OPTS
    - curl -i -u<username>:<token> -T "target/<artifact-1>.zip" "${REPO_NAME}/${CI_PIPELINE_ID}/<artifact-1>.zip"
    - curl -i -u<username>:<token> -T "target/<artifact-1>.zip" "${REPO_NAME}/${CI_PIPELINE_ID}/<artifact-2>.zip"
    - - curl -i -u<username>:<token> -T "target/<artifact-1>.zip" "${REPO_NAME}/${CI_PIPELINE_ID}/<artifact-3>.zip"
  tags:
    - <tagname>

在此之后,我如何向某些人发送带有链接的邮件?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-30 17:16:28

我为此构建了一个解决方案,在这里分享它。

为此,使用了以下工具:

  1. GitLab release api
  2. Python-GitLab api
  3. Docker
  4. Microsoft Teams
  5. Sharepoint

流程可以概括如下:

gitlab

  • 一个新的管道是成功的构建、代码扫描和发布,发布作业是运行

  • 发布作业使用在python-gitlab api的帮助下编写的python脚本来创建使用gitlab发布api的发布。它在release assets下插入用于下载工件的外部人工链接,并添加指向release note的链接,其他documents.

  • GitLab会将发布邮件发送到适当的通知通道,即由微软团队和Sharepoint创建的组电子邮件id,以便整个团队都能收到发布邮件。

python脚本如下所示:

代码语言:javascript
复制
import os
import gitlab
from datetime import datetime

if __name__ == '__main__':
    access_token = os.environ['RELEASE_TOKEN']

    gitlab_url = os.environ['GITLAB_URL']

    project_id = int(os.environ['CI_PROJECT_ID'])
    
    tag_name = os.environ['CI_PIPELINE_ID']
    ref = os.environ['CI_COMMIT_REF_NAME']
    
    # artifactory_links
    artifactory_link = os.environ['ARTIFACTORY_PATH']
    group_name = os.environ['GROUP_NAME']
    project_name = os.environ['CI_PROJECT_NAME']
    directory = f'{datetime.now():%Y%m%d}'
    artifact_name = os.environ['ARTIFACT_NAME']
    package_type = os.environ['PACKAGE_TYPE']
    
    # artifacts_links
    artifacts_links = f'{artifactory_link}/{group_name}/{project_name}/{directory}/{artifact_name}-{tag_name}.{package_type}'
    
    # release note
    release_note = os.environ['RELEASE_NOTE']

    # authenticate with gitlab
    gl = gitlab.Gitlab(gitlab_url, private_token=access_token)
    gl.auth()

    # obtain the project object by id
    project = gl.projects.get(project_id)

    # creating the project tags
    project.tags.create({'tag_name': tag_name, 'ref': ref})

    # creating the project releases
    release = project.releases.create(
        {
            'name': f'Release for Pipeline ID {ref}',
            'tag_name': tag_name,
            'description': release_note,
            'assets': {
                'links': [{'name': artifact_name, 'url': artifacts_links}],
            }
        }
    )

该脚本需要以下环境变量:

  1. RELEASE_TOKEN - artifact token
  2. GITLAB_URL - Artifact URL.
  3. ARTIFACTORY_PATH - Artifactory base URL.
  4. GROUP_NAME -如果项目位于group.
  5. ARTIFACT_NAME下-工件name
  6. PACKAGE_TYPE -工件包type
  7. RELEASE_NOTE -指向发行说明和任何其他文档的链接。

这些变量可以作为GitLab配置项变量提供。如果存在多个工件,则可以相应地修改python脚本。

由于python脚本需要在管道事件期间调用,并且在项目中添加脚本将修改项目代码库,因此将脚本停靠是最好的解决方案。这样,它就可以直接从docker hub中拉出。dockerfile的内容如下:

代码语言:javascript
复制
FROM python:3.7-alpine
COPY release_api.py /bin
RUN pip install python-gitlab
ENTRYPOINT ["/bin/release_api.py"]
CMD ["/bin/bash"]

为了向团队中的每个成员发送发布邮件,而不考虑他们各自的GitLab通知和订阅首选项,需要使用微软团队来设置团队。在团队应用程序中创建团队时,将创建相应的sharepoint站点以及团队电子邮件id。此设置需要一些时间。创建团队后,在文件部分,有一个在sharepoint中打开它的选项(下面的屏幕截图)。

sharepoint站点在左侧边栏中有一个名为Conversations.的链接sharepoint站点完全就绪后,单击此链接将打开团队电子邮件的收件箱。在组的设置下,可以找到选项编辑组,并且可以在那里找到组电子邮件id。此组电子邮件id将用于向团队中的每个人发送发布邮件。

在GitLab的用户设置下,需要添加群邮箱。一旦添加并验证了邮件,就可以在Notifications.下设置通知通道完成后,该组(或项目)的所有通知都将转到组邮件,团队中的每个人都会收到它们。剩下的最后一项活动是设置通知首选项,以便在新版本可用时发送通知。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59703155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档