Jenkins - 发布每个版本的版本号

时间:2014-12-08 12:09:28

标签: jenkins reporting jenkins-plugins

我们正在测试一个嵌入式系统,它是一个包含多个组件的Linux映像。当发布新图像时,它获得一个版本,例如图1.0.1及其中的每个组件都有自己的版本。例如component1-2.0.3,component2-4.1.22等。图像生成是在外部完成的(我不知道如何)。

我们正在自动测试我们的系统,所以现在我们的测试看起来像这样:

  • 每晚,下载最新图片
  • 对于每个组件,对图像执行测试。 这目前无效。

Jenkins测试的最终目标是为每个图像版本生成报告。 E.g。

Image 1.0.1
Testing results
Component1-2.0.3, passing 100, failing 20, etc.
Component2-4.1.22, passing 34, failing 3, etc.

我不知道如何自动执行此操作,所以请提供帮助。 我需要以下信息:

  • 当构建作业启动时,在日志中我可以看到组件的版本和执行测试的图像版本。如何发布这些信息,因此在每个构建的旁边,在摘要页面上,我可以看到组件的版本以及执行构建的映像的版本。

  • 如何根据我在Jenkins中提供的信息创建上面给出的最终报告?

欢迎任何经验,插件和信息。

3 个答案:

答案 0 :(得分:1)

您可以使用文本查找器插件在构建日志中搜索特定文本 - 您可以使用正则表达式。 然后,您可以将结果回显到包含所有组件的文件,并将其添加到构建摘要

答案 1 :(得分:1)

正如您所说,您可以在日志中看到版本,因此只需在电子邮件正文中使用正则表达式:

Component1 Version: ${BUILD_LOG_REGEX, regex="^Component1-", showTruncatedLines=false, substText=""}
Component2 Version: ${BUILD_LOG_REGEX, regex="^Component2-", showTruncatedLines=false, substText=""}

BUILD_LOG_REGEX使用以下正则表达式: http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html

答案 2 :(得分:1)

我的建议是在构建日志中匹配所需信息,并使用Groovy Postbuild Plugin设置构建描述:

protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            token = Session["LoginToken"].ToString();
            if (!IsPostBack)
            {
                BindData();
                fsSearch.Visible = false;
                btnDownload.Visible = false;
            }
            else
            {
                foreach (HtmlTableRow row in (HtmlTableRowCollection)Session["dynamicControls"])
                {
                    tblSearch.Rows.Add(row);
                }
            }
        }
        catch
        {
        }
    }

    private void BindData()
    {
        ddlReportName.DataSource = svcCommon.GetReports(token, out message);
        ddlReportName.DataValueField = "Key";
        ddlReportName.DataTextField = "Value";
        ddlReportName.DataBind();
        ddlReportName.Items.Insert(0, "--Select--");
    }

    protected void ddlReportName_SelectedIndexChanged(object sender, EventArgs e)
    {
        try
        {
            string[] reportInfo = ddlReportName.SelectedValue.Split('|');

            Session["dynamicControls"] = null;
            tblSearch.Rows.Clear();

            HtmlTableRow row = new HtmlTableRow();
            HtmlTableCell cellFieldNameLbl = new HtmlTableCell();
            HtmlTableCell cellFieldNameDdl = new HtmlTableCell();
            HtmlTableCell cellOperatorLbl = new HtmlTableCell();
            HtmlTableCell cellOperatorDdl = new HtmlTableCell();
            HtmlTableCell cellValueLbl = new HtmlTableCell();
            HtmlTableCell cellValueTxt = new HtmlTableCell();
            HtmlTableCell cellOperatorRbtn = new HtmlTableCell();
            HtmlTableCell cellAddMoreFilter = new HtmlTableCell();
            Button btnAddMore = new Button();

            DropDownList ddlColumn = new DropDownList();
            DropDownList ddlOperator = new DropDownList();
            TextBox txtValue = new TextBox();
            RadioButtonList rbtnOperator = new RadioButtonList();

            List<string> filterValues = svcCommon.GetSearchColumns(Convert.ToInt64(reportInfo[0]), token, out message);

            fsSearch.Visible = btnDownload.Visible = filterValues.Count > 0 ? true : false;

            ddlColumn.ID = "_ddlColumn0";
            ddlOperator.ID = "_ddlOperator0";
            txtValue.ID = "_txtValue0";
            rbtnOperator.ID = "_rbtnOperator0";
            btnAddMore.ID = "_btnAddMore0";


            rbtnOperator.Items.Add("AND");
            rbtnOperator.Items.Add("OR");
            rbtnOperator.RepeatDirection = RepeatDirection.Horizontal;

            btnAddMore.Text = "Add More";

            btnAddMore.Click +=btnAddMore_Click;

            ddlColumn.DataSource = filterValues;
            ddlColumn.DataBind();

            ddlOperator.DataSource = new List<string>() 
                                        {   
                                            "Equal",
                                            "Not Equal",
                                            "Less Than",
                                            "Less Than Or Equal",
                                            "Greater Than",
                                            "Greater Than Or Equal",
                                            "Start With",
                                            "Not Start With",
                                            "End With",
                                            "Not End With",
                                            "Contains",
                                            "Not Contains",
                                            "Between",
                                            "Not Between",
                                            "In",
                                            "Not In"
                                        };
            ddlOperator.DataBind();

            cellFieldNameLbl.InnerText = "Field Name:";
            cellFieldNameDdl.Controls.Add(ddlColumn);
            cellOperatorLbl.InnerText = "Operator";
            cellOperatorDdl.Controls.Add(ddlOperator);
            cellValueLbl.InnerText = "Value";
            cellValueTxt.Controls.Add(txtValue);
            cellOperatorRbtn.Controls.Add(rbtnOperator);
            cellAddMoreFilter.Controls.Add(btnAddMore);

            row.Cells.Add(cellFieldNameLbl);
            row.Cells.Add(cellFieldNameDdl);
            row.Cells.Add(cellOperatorLbl);
            row.Cells.Add(cellOperatorDdl);
            row.Cells.Add(cellValueLbl);
            row.Cells.Add(cellValueTxt);
            row.Cells.Add(cellOperatorRbtn);
            row.Cells.Add(cellAddMoreFilter);

            tblSearch.Rows.Add(row);
            Session["dynamicControls"] = tblSearch.Rows;
        }
        catch (Exception ex)
        {
        }
    }

    protected void btnAddMore_Click(object sender, EventArgs e)
    {
        try
        {

        }
        catch
        {
        }
    }

因此,您将拥有每个构建描述的组件版本:

enter image description here