Continuous integration 如何从GitLab CI管道发送电子邮件';什么工作?

Continuous integration 如何从GitLab CI管道发送电子邮件';什么工作?,continuous-integration,gitlab,gitlab-ci,pipeline,Continuous Integration,Gitlab,Gitlab Ci,Pipeline,我正在尝试设置一个GitLab CI配置,该配置在管道作业完成后发送一封电子邮件,并将工件链接到上载站点。管道基于pom.xml构建,然后使用sonarqube进行测试,然后使用curl将工件上传到特定工件位置。工件目录的文件夹结构和链接取决于CI_PIPELINE_ID。所有这些成功后,我需要发送此链接,以便通过邮件将工件下载到人员列表中。My.gitlab-config.yml如下所示: image:maven:3.3.9-jdk-8 变量: MAVEN_选择:“-Dmaven.repo.

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

image:maven:3.3.9-jdk-8
变量:
MAVEN_选择:“-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_选择:“-U--批处理模式--错误--结束时失败--显示版本-DinstallAtEnd=true-DdeployAtEnd=true”
回购名称:“
隐藏物:
路径:
-.m2/存储库
-/目标/
阶段:
-建造
编译并提交:
阶段:建造
仅:
-cr_积分
在脚本之前:
-git子模块同步——递归
-git子模块更新--初始化--递归--远程
脚本:
-mvn-f pom.xml-s settings.xml$MAVEN_CLI_OPTS clean install$MAVEN_OPTS
-curl-i-u:-T“target/.zip”“${REPO\u NAME}/${CI\u PIPELINE\u ID}/.zip”
-curl-i-u:-T“target/.zip”“${REPO\u NAME}/${CI\u PIPELINE\u ID}/.zip”
--curl-i-u:-T“target/.zip”“${REPO\u NAME}/${CI\u PIPELINE\u ID}/.zip”
标签:
-
此功能(CI作业成功或失败后发送的电子邮件)可以在项目设置中启用和配置

以前,它使用
设置>服务>生成电子邮件
,但现在已被移动

现在可以在
Settings>Integrations>projectservices
部分找到它 您将在其中找到子页面:

Pipelines emails : Email the pipelines status to a list of recipients
您可以选择只通知已断开的构建,也可以选择不通知,并且只通知某些分支


(doc:)

我为此构建了一个解决方案,并在这里共享

为此使用了以下工具:

  • GitLab发布api
  • Python GitLab api
  • 码头工人
  • 微软团队
  • Sharepoint
  • 工艺流程可概述如下:

    FROM python:3.7-alpine
    COPY release_api.py /bin
    RUN pip install python-gitlab
    ENTRYPOINT ["/bin/release_api.py"]
    CMD ["/bin/bash"]
    
    • 一个新的管道被触发
    • 成功构建、代码扫描和发布后,将运行发布作业
    • 发布作业使用在帮助下编写的python脚本 python gitlab api使用gitlab发布api创建发布。信息技术 插入外部artifactory链接,以便在下下载工件 发布资产并添加到发布说明和其他文档的链接
    • GitLab将发布邮件发送到相应的通知通道, 由Microsoft团队和Sharepoint创建的组电子邮件id,以便 整个团队都会收到发布邮件
    python脚本如下所示:

    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}],
                }
            }
        )
    
    该脚本需要以下环境变量:

  • 释放令牌–GitLab访问令牌
  • GITLAB_URL–GITLAB基本URL
  • ARTIFACTORY_PATH–ARTIFACTORY基本URL
  • 组名称–如果项目属于一个组
  • 工件名称–工件名称
  • 包类型–工件包类型
  • 发布说明–链接到发布说明和任何其他文档
  • 这些变量可以作为GitLab CI变量提供。如果存在多个工件,则可以相应地修改python脚本

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

    FROM python:3.7-alpine
    COPY release_api.py /bin
    RUN pip install python-gitlab
    ENTRYPOINT ["/bin/release_api.py"]
    CMD ["/bin/bash"]
    
    为了向团队的每个成员发送发布邮件,而不考虑他们各自的GitLab通知和订阅首选项,需要使用Microsoft团队建立团队。在“团队”应用程序中创建团队时,将创建相应的sharepoint网站以及团队电子邮件id。此设置需要一些时间。 创建团队后,在“文件”部分下,有一个在sharepoint中打开团队的选项(下面的屏幕截图)

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

    在GitLab的用户设置下,需要添加组电子邮件。添加和验证邮件后,可以在通知下设置通知通道。完成后,该组(或项目)的所有通知都将发送到组邮件,团队中的每个人都将收到这些通知。剩下的最后一项活动是设置通知首选项,以便在新版本可用时发送通知


    谢谢,但我不是在找这个。已针对故障配置了管道电子邮件。我需要做的是根据包含项目工件下载链接的特定模板发送电子邮件。工件从作业下的CI管道配置上传到工件,文件夹结构是动态的。作者询问如何从最终
    build
    阶段发送电子邮件,其中包含在该阶段收集的信息(指向工件的链接)。你的解决方案行不通。