Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Jenkins ´î½¨C++³ÖÐø¼¯³É»·¾³
 
À´Ô´:À´×ÔÍøÂç ·¢²¼ÓÚ:2017-10-17
  4469  次浏览      29
 

¼ò½é

±¾ÎÄÖ÷Òª½éÉÜÈçºÎͨ¹ý Jenkins ´î½¨ C++µÄ³ÖÐø¼¯³É»·¾³¡£×îºó´ïµ½µÄЧ¹ûÊÇÿÌì00:00 - 08:00Ö®¼ä¹¹½¨¡¢²âÊԺʹò°üÒ»´Î¹¤³Ì¡£

¿ª·¢»·¾³Îª VS2015£¬²âÊÔ¹¤¾ßΪ CppUnit£¬´ò°ü¹¤¾ßΪ Inno Setup¡£

±¾ÀýµÄ Jenkins °æ±¾Îª Jenkins2.60.1

½¨Á¢¹¤³Ì

н¨¿Õ°×½â¾ö·½°¸£¬ÃüÃûΪ Calculator¡£¹´Ñ¡ [н¨ GIT ´æ´¢¿â]¡£

½¨Á¢¿ª·¢ÏîÄ¿

н¨¿ØÖÆÌ¨ÏîÄ¿£¬ÃüÃûΪ Calculator¡£Ð½¨Calculator.h£¬ÄÚÈÝÈçÏ£º

#ifndef CALCULATOR_H
#define CALCULATOR_H

class Calculator
{
public:
int add(int num1, int num2)
{
return num1 + num2;
}

int sub(int num1, int num2)
{
return num1 - num2;
}
};

#endif

н¨ main.cpp£¬ÄÚÈÝÈçÏ£º

#include "Calculator.h"
#include <iostream>

int main()
{
Calculator calculator;
std::cout << "1 + 2 = " << calculator.add(1, 2) << std::endl;
std::cout << "2 - 1 = " << calculator.sub(2, 1) << std::endl;

return 0;
}

½¨Á¢²âÊÔÏîÄ¿

±¾ÀýʹÓà CppUnit ×÷Ϊ²âÊÔ¹¤¾ß£¬Èç¹ûÄ㻹²»Á˽âËü£¬Çë²Î¼ûÎÒµÄÁíһƬ²©ÎÄ£ºCppUnit ÈëÃÅ

н¨¿ØÖÆÌ¨ÏîÄ¿£¬ÃüÃûΪ CalculatorTest¡£

½« CppUnit Í·ÎļþºÍ¿âÎļþËùÔÚĿ¼¼ÓÈëµ½¹¤³ÌËÑË÷Ŀ¼ÖУ¬²¢½« CppUnit ¿âÎļþ¼ÓÈëµ½Á´½ÓÆ÷µÄ¸½¼ÓÒÀÀµÏî¡£

Ìí¼Ómain.cpp£¬ÄÚÈÝÈçÏ£º

#include "../Calculator/Calculator.h"
#include "cppunit/TestFixture.h"
#include "cppunit/extensions/HelperMacros.h"
#include "cppunit/TestRunner.h"
#include "cppunit/TestResult.h"
#include "cppunit/TestResultCollector.h"
#include "cppunit/TextOutputter.h"
#include "cppunit/XmlOutputter.h"
#include "cppunit/BriefTestProgressListener.h"
#include <iostream>
#include <fstream>
#include <Windows.h>

#include "cppunit/TextTestRunner.h"

class CalculatorTestFixture : public

CppUnit::TestFixture
{
CPPUNIT_TEST_SUITE(CalculatorTestFixture);
CPPUNIT_TEST(testAdd);
CPPUNIT_TEST(testSub);
CPPUNIT_TEST_SUITE_END();

public:
virtual void setUp() override
{
m_calculator = new Calculator();
}

virtual void tearDown() override
{
delete m_calculator; m_calculator = nullptr;
}

public:
void testAdd()
{
CPPUNIT_ASSERT(3 == m_calculator->add(1, 2));
}

void testSub()
{
CPPUNIT_ASSERT(1 == m_calculator->sub(2, 1));
}

private:
Calculator *m_calculator;
};

CPPUNIT_TEST_SUITE_REGISTRATION

(CalculatorTestFixture);

int main()
{
CppUnit::TestRunner runner;
runner.addTest(CppUnit::TestFactoryRegistry::

getRegistry().makeTest());

CppUnit::TestResult result;

CppUnit::BriefTestProgressListener

progressListener;
result.addListener(&progressListener);

CppUnit::TestResultCollector resultCollector;
result.addListener(&resultCollector);

runner.run(result);

// ´òÓ¡µ½¿ØÖÆÌ¨
CppUnit::TextOutputter textOutputter

(&resultCollector, std::cout);
textOutputter.write();

// ´òÓ¡µ½ xml Îļþ£¬ÒÔ±ã xUnit ²å¼þ´¦Àí
std::ofstream fout("TEST-Calculator.xml");
if (fout)
{
CppUnit::XmlOutputter xmlOutputter

(&resultCollector, fout);
xmlOutputter.write();
fout.close();
}

// ·µ»Ø 0 ±íʾ³É¹¦
return resultCollector.wasSuccessful() ? 0 : 1;
}

½¨Á¢·¢²¼½Å±¾

±¾ÀýÓà Inno Setup ´ò°ü£¬ÔÚ¹¤³ÌĿ¼Ð½¨ Calculator.iss£¬ÄÚÈÝÈçÏ£º

[Setup]
AppName=Calculator
AppVersion=1.5
DefaultDirName={pf}\Calculator
DefaultGroupName=Calculator
UninstallDisplayIcon={app}\Calculator.exe
Compression=lzma2
SolidCompression=yes
OutputBaseFilename=CalculatorSetup

[Files]
Source: "Calculator.exe"; DestDir: "{app}"

[Icons]
Name: "{group}\Calculator"; Filename: "{app}\Calculator.exe"

Ìá½»´úÂë

Çл»µ½[ÍŶÓ×ÊÔ´¹ÜÀíÆ÷]ҳǩ£¬µã»÷×óÉϽǣ¬ÔÚµ¯³ö²Ëµ¥ÖÐÑ¡Ôñ[¸ü¸Ä]£¬ÊäÈëÈÕÖ¾£¬µã»÷[È«²¿Ìá½»]°´Å¥¡£

×¼±¸¹¤×÷

±¾ÀýÒªÓõ½ Git¡¢MSBuild ºÍ xUnit Èý¸ö²å¼þ£¬µÚÒ»²½¾ÍÊǰ²×°ËüÃÇ¡£

°²×° Git plugin

Git ²å¼þÒ»°ãÔÚ°²×° Jenkins µÄʱºò×÷ΪĬÈϲå¼þ°²×°¡£Èç¹ûÒѾ­°²×°£¬ÔòÌø¹ýÕâÒ»²½¡£Èç¹ûûÓа²×°£¬ÔòÐèÒªÊÖ¶¯°²×°¡£

ÔÚ Jenkins ¹ÜÀíÒ³ÃæÖУ¬µã»÷[²å¼þ¹ÜÀí]½øÈë²å¼þ¹ÜÀíÒ³Ãæ£¬Çл»µ½[¿ÉÑ¡²å¼þ]ҳǩ£¬ÔÚÓÒÉϽÇËÑË÷¿òÖÐÊäÈë Git plugin ÕÒµ½ Git plugin£¬µã»÷[Ö±½Ó°²×°]°´Å¥¿ªÊ¼°²×°¡£°²×°ºÃÖ®ºó£¬¾Í»áÔÚ[ÒѰ²×°]ҳǩÕÒµ½ Git plugin£¬ÈçÏÂͼ£º

°²×° MSBuild plugin

ÔÚ Jenkins ¹ÜÀíÒ³ÃæÖУ¬µã»÷[²å¼þ¹ÜÀí]½øÈë²å¼þ¹ÜÀíÒ³Ãæ£¬Çл»µ½[¿ÉÑ¡²å¼þ]ҳǩ£¬ÔÚÓÒÉϽÇËÑË÷¿òÖÐÊäÈë MSBuild ÕÒµ½ MSBuild Plugin£¬µã»÷[Ö±½Ó°²×°]°´Å¥¿ªÊ¼°²×°¡£ÈçÏÂͼ£º

°²×°ºÃÖ®ºó£¬¾Í»áÔÚ[ÒѰ²×°]ҳǩÕÒµ½ MSBuild Plugin¡£

»Øµ½ Jenkins ¹ÜÀíÒ³ÃæÖУ¬µã»÷[Global Tool Configuration]£¬½øÈëÈ«¾Ö¹¤¾ßÉèÖÃÒ³Ãæ¡£

ÕÒµ½[MSBuild]À¸Ä¿£¬µã»÷[ÐÂÔöMSBuild]°´Å¥£¬[Name]ËæÒâÌîд£¬±¾ÀýΪMSBuild 14.0¡£[Path to MSBuild]ÌîдMSBuild.exeËùÔÚµÄʵ¼Ê·¾¶¡£ÈçÏÂͼ¡£µã»÷[Save]°´Å¥±£´æ²¢Í˳ö¡£

°²×° xUnit plugin

ÔÚ Jenkins ¹ÜÀíÒ³ÃæÖУ¬µã»÷[²å¼þ¹ÜÀí]½øÈë²å¼þ¹ÜÀíÒ³Ãæ£¬Çл»µ½[¿ÉÑ¡²å¼þ]ҳǩ£¬ÔÚÓÒÉϽÇËÑË÷¿òÖÐÊäÈë xUnit ÕÒµ½ xUnit plugin£¬µã»÷[Ö±½Ó°²×°]¿ªÊ¼°²×°£¬ÈçÏÂͼ£º

°²×°ºÃÖ®ºó£¬¾Í»áÔÚ[ÒѰ²×°]ҳǩÕÒµ½ xUnit plugin¡£

´´½¨¹¹½¨ºÍ²âÊÔÈÎÎñ

ÓÉÓÚ¹¹½¨ºÍ²âÊÔ½áºÏµÃ±È½Ï½ôÃÜ£¬Òò´Ë²»°ÑËüÃDzð·ÖΪÁ½¸öÈÎÎñ£¬¶øÊǺϲ¢³ÉÒ»¸ö¡£

ÔÚ Jenkins ¹ÜÀíÒ³ÃæÖУ¬µã»÷[н¨]½øÈëн¨Ò³Ã棬[Enter an item name]Ìîд Calculator Build and Test£¬ÈÎÎñÀàÐÍÑ¡Ôñ[¹¹½¨Ò»¸ö×ÔÓÉ·ç¸ñµÄÈí¼þÏîÄ¿]£¬ÈçÏÂͼËùʾ¡£µã»÷[OK]°´Å¥½øÈëµ½ÉèÖÃÒ³Ãæ¡£

ÕÒµ½[Ô´Âë¹ÜÀí]À¸Ä¿£¬Ñ¡Ôñ[Git]£¬[Repository URL]Ìîд¹¤³ÌËùÔÚĿ¼¡£ÈçÏÂͼËùʾ¡£µã»÷[Apply]°´Å¥Ê¹ÉèÖÃÉúЧ¡£

ÕÒµ½[¹¹½¨]À¸Ä¿£¬µã»÷[Ôö¼Ó¹¹½¨²½Öè]£¬Ñ¡Ôñ[Build a Visual Studio project or solution using MSBuild]¡£ÈçÏÂͼËùʾ£º

[MSBuild Version]Ñ¡Ôñ[MSBuild 14.0]£¬[MSBuild Build File]ÌîдCalculator.sln£¬[Command Line Arguments]Ìîд/t:Rebuild /p:Configuration=Release;Platform=x86£¨ÏêϸµÄ²ÎÊýÐÅÏ¢¿ÉÒÔÔÚÃüÁîÐÐÖÐÖ´ÐÐMSBuild /²é¿´£©¡£ÈçÏÂͼËùʾ¡£µã»÷[Apply]°´Å¥Ê¹ÉèÖÃÉúЧ¡£

ΪÁËÔËÐвâÊÔÓÃÀý£¬»¹ÐèÒªÔö¼ÓÒ»¸ö¹¹½¨²½Öè¡£Ôٴεã»÷[Ôö¼Ó¹¹½¨²½Öè]£¬Ñ¡Ôñ[Execute Windows batch command]£¬ÈçÏÂͼËùʾ£º

ÔÚ[ÃüÁî]ÖÐÌîдRelease\CalculatorTest.exe¡£ÈçÏÂͼËùʾ¡£µã»÷[Apply]°´Å¥Ê¹ÉèÖÃÉúЧ¡£

ÕÒµ½[¹¹½¨ºó²Ù×÷]À¸Ä¿£¬µã»÷[Ôö¼Ó¹¹½¨ºó²Ù×÷²½Öè]£¬Ñ¡Ôñ[Publish xUnit test result report]£¬ÈçÏÂͼËùʾ£º

µã»÷[Add]°´Å¥£¬Ñ¡Ôñ[CppUnit-1.12.1(default)]£¬ÈçÏÂͼËùʾ£º

ÔÚ[Pattern]ÖÐÌîдTEST*.xml£¬ÈçÏÂͼËùʾ£º

×îºó£¬µã»÷[±£´æ]°´Å¥±£´æÉèÖò¢Í˳ö¡£

ÔÚÈÎÎñ¿ØÖÆÃæ°åÒ³Ãæ£¬µã»÷[Á¢¼´¹¹½¨]½øÐй¹½¨¡£ÈçÏÂͼËùʾ£º

¹¹½¨Íê³ÉÖ®ºó£¬¹¹½¨ÀúÊ·»á³öÏÖÔÚ[Build History]ÁбíÖС£Ç°ÃæºìÉ«µÄÔ²µã±íʾ¹¹½¨Ê§°Ü£¬À¶É«µÄÔ²µã±íʾ¹¹½¨³É¹¦¡£

ÔÚ¹¹½¨ÀúÊ·ÁбíÖеã»÷ÁбíÏî¿ÉÒԲ鿴¹¹½¨ÏêÇé¡£ÔÚ¹¹½¨ÏêÇéÒ³Ãæ£¬¿ÉÒÔµã»÷[Console Output]²é¿´¿ØÖÆÌ¨Êä³ö¡£µã»÷[Test Result]¿ÉÒԲ鿴²âÊÔ½á¹û¡£

´´½¨·¢²¼ÈÎÎñ

ÔÚ Jenkins ¹ÜÀíÒ³ÃæÖУ¬µã»÷[н¨]½øÈëн¨Ò³Ã棬[Enter an item name]Ìîд Calculator Deploy£¬ÈÎÎñÀàÐÍÑ¡Ôñ[¹¹½¨Ò»¸ö×ÔÓÉ·ç¸ñµÄÈí¼þÏîÄ¿]£¬ÈçÏÂͼËùʾ¡£µã»÷[OK]°´Å¥½øÈëµ½ÉèÖÃÒ³Ãæ¡£

ÕÒµ½[¹¹½¨]À¸Ä¿£¬µã»÷[Ôö¼Ó¹¹½¨²½Öè]£¬Ñ¡Ôñ[Execute Windows batch command]£¬ÈçÏÂͼËùʾ£º

ÔÚ[ÃüÁî]ÀïÊäÈëÈçÏÂÃüÁî¡£×¢ÒâÖ±½Ó½«ÃüÁîдÔÚÕâÀïÊDz»ºÃµÄ×ö·¨£¬×îºÃÊǽ«ÃüÁîдÔÚbatÖУ¬ÔÚÕâÀïÖ´ÐÐÕâ¸öbat¡£ÕâÀïΪÁËÑÝʾ¶ø±Ü·±¾Í¼ò¡££¨ÆäÖÐisccÊÇInno SetupµÄ½Å±¾±àÒëÆ÷£¬¹ØÓÚËüµÄʹÓÿÉ×ÔÐвéÔÄInno SetupµÄ°ïÖúÎĵµ£©

µã»÷[±£´æ°´Å¥]±£´æÉèÖò¢Í˳ö¡£

ÔÚÈÎÎñ¿ØÖÆÃæ°åÒ³Ãæ£¬µã»÷[Á¢¼´¹¹½¨]½øÐй¹½¨¡£¹¹½¨³É¹¦Ö®ºó»áÔÚ [Jenkins µÄworkspace Ŀ¼]\Calculator Deploy\Output ÏÂÕÒµ½°²×°Îļþ¡£

´´½¨ Pipeline

ÏÂÃæ´´½¨Ò»¸ö Pipeline ÏîÄ¿½«ÉÏÃæÁ½¸öÏîÄ¿´®ÁªÆðÀ´¡£

ÔÚ Jenkins ¹ÜÀíÒ³ÃæÖУ¬µã»÷[н¨]½øÈëн¨Ò³Ã棬[Enter an item name]Ìîд Calculator Pipeline£¬ÈÎÎñÀàÐÍÑ¡Ôñ[Pipeline]£¬ÈçÏÂͼËùʾ¡£µã»÷[OK]°´Å¥½øÈëµ½ÉèÖÃÒ³Ãæ¡£

ÕÒµ½[Build Triggers]À¸Ä¿£¬Ñ¡Ôñ[Build periodically]£¬[Èճ̱í]Ìîд H H(0-7) * * *£¨±íʾÿÌì 00:00 - 08:00 ½øÐÐÒ»´Î¹¹½¨£¬ÏêϸµÄÈճ̱í±íʾ·¨¿ÉÒÔµã»÷ÓÒ²àµÄ À´²é¿´£©¡£ÈçÏÂͼËùʾ¡£µã»÷[Apply]°´Å¥Ê¹ÉèÖÃÉúЧ¡£

ÕÒµ½[Pipeline]À¸Ä¿£¬[Definition]Ñ¡Ôñ[Pipeline script]£¬ÔÚ[Script]ÖбàдÈçϽű¾£¨PipelineÓï·¨¿ÉÒÔµã»÷[Pipeline Syntax]³¬Á´½Ó²é¿´£©£º

µã»÷[±£´æ]°´Å¥±£´æ²¢Í˳ö¡£

ÔÚÈÎÎñ¿ØÖÆÃæ°åÒ³Ãæ£¬µã»÷[Á¢¼´¹¹½¨]½øÐй¹½¨¡£¹¹½¨Ê±¿ÉÒÔ¿´µ½ Stage View»á¸ù¾ÝÈÎÎñÖ´Ðнø¶ÈʵʱµØ±ä»¯¡£¹¹½¨½áÊøºó»áÏÔʾÍêÕûµÄ Stage View£¬ÈçÏÂͼËùʾ£º

×ܽá

ʹÓÃJenkins¿ÉÒԺܷ½±ãµÄ´î½¨C++µÄ³ÖÐø¼¯³É»·¾³¡£

Ò»¸ö¹¤³ÌµÄ¹¹½¨¿ÉÒÔ½¨Á¢¶à¸öÈÎÎñ£¨¹¹½¨¡¢²âÊÔ¡¢·¢²¼µÈ£©£¬Ã¿¸öÈÎÎñÍê³Éµ¥Ò»¹¤×÷¡£

ʹÓÃPipeline½«¶à¸öÈÎÎñÕûºÏ³É¹¤×÷Á÷¡£

 

 

   
4469 ´Îä¯ÀÀ       29
Ïà¹ØÎÄÕÂ

ΪʲôҪ×ö³ÖÐø²¿Êð£¿
ÆÊÎö¡°³ÖÐø½»¸¶¡±£ºÎå¸öºËÐÄʵ¼ù
¼¯³ÉÓë¹¹½¨Ö¸ÄÏ
³ÖÐø¼¯³É¹¤¾ßµÄÑ¡Ôñ-×°ÔØ
Ïà¹ØÎĵµ

³ÖÐø¼¯³É½éÉÜ
ʹÓÃHudson³ÖÐø¼¯³É
³ÖÐø¼¯³ÉÖ®-ÒÀÀµ¹ÜÀí
IPD¼¯³É²úÆ·¿ª·¢¹ÜÀí
Ïà¹Ø¿Î³Ì

ÅäÖùÜÀí¡¢ÈÕ¹¹½¨Óë³ÖÐø¼¯³É
Èí¼þ¼Ü¹¹Éè¼Æ·½·¨¡¢°¸ÀýÓëʵ¼ù
µ¥Ôª²âÊÔ¡¢Öع¹¼°³ÖÐø¼¯³É
»ùÓÚAndroidµÄµ¥Ôª¡¢ÐÔÄܲâÊÔ