Continuous integration 如何从GitLab CI管道发送电子邮件';什么工作?
我正在尝试设置一个GitLab CI配置,该配置在管道作业完成后发送一封电子邮件,并将工件链接到上载站点。管道基于pom.xml构建,然后使用sonarqube进行测试,然后使用curl将工件上传到特定工件位置。工件目录的文件夹结构和链接取决于CI_PIPELINE_ID。所有这些成功后,我需要发送此链接,以便通过邮件将工件下载到人员列表中。My.gitlab-config.yml如下所示: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.
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:)我为此构建了一个解决方案,并在这里共享 为此使用了以下工具:
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,以便 整个团队都会收到发布邮件
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}],
}
}
)
该脚本需要以下环境变量:
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
阶段发送电子邮件,其中包含在该阶段收集的信息(指向工件的链接)。你的解决方案行不通。