我正在尝试建立一个GitLab CI配置,该配置在管道作业完成后发送电子邮件,并带有工件到上载站点的链接。管道基于pom.xml构建,然后使用sonarqube进行测试,然后使用curl将工件上传到特定的工件位置。工件目录的文件夹结构和链接取决于CI_PIPELINE_ID。在所有这些成功之后,我需要发送此链接,以便通过邮件将工件下载到人员列表。我的.gitlab-config.yml如下所示:
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>
此后如何通过链接向某些人发送邮件?
答案 0 :(得分:0)
可以在项目设置中启用和配置此功能(成功或失败的CI作业后发送的电子邮件)。
以前,它曾经使用过Settings > Services > Builds emails
,但已被移动。
现在可以在Settings > Integrations > Project Services
部分中找到它
您将在其中找到一个子页面:
Pipelines emails : Email the pipelines status to a list of recipients
您可以选择仅通知是否损坏的版本以及仅通知某些分支。
(文档:https://docs.gitlab.com/ee/user/project/integrations/project_services.html)
答案 1 :(得分:0)
我为此构建了一个解决方案,在此分享。
为此使用了以下工具:
流程可以概括如下:
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 CI 变量提供。如果存在多个artifact,可以相应修改python脚本。
由于在管道事件期间需要调用python脚本,并且在项目中添加脚本会修改项目代码库,因此将脚本docker化是最好的解决方案。这样,它可以直接从 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 Teams 建立团队。在 Teams 应用程序中创建团队时,会创建相应的 sharepoint 站点以及团队电子邮件 ID。这个设置需要一些时间。 创建团队后,在“文件”部分下,有一个选项可以在 sharepoint 中打开它(下面的屏幕截图)。
sharepoint 站点的左侧边栏中有一个名为对话的链接。 Sharepoint 站点完全准备好后,单击此链接将打开 Teams 电子邮件的收件箱。 在群组设置下,可以找到编辑群组选项,然后可以找到群组电子邮件 ID。此群组电子邮件 ID 将用于向团队中的每个人发送发布邮件。
在GitLab的用户设置下,需要添加群邮箱。添加并验证邮件后,可以在通知下设置通知渠道。完成此操作后,该组(或项目)的所有通知都将发送到组邮件,团队中的每个人都会收到它们。剩下的最后一个活动是设置通知首选项,以便在有新版本可用时发送通知。