精华内容
下载资源
问答
  • 我们会发现,oid和filenode对应的值是一样的,去找一下对应表的物理文件 [postgres@node2 13269]$ ls -l 17107 -rw-------. 1 postgres postgres 0 Mar 20 06:43 17107 [postgres@node2 13269]$ pwd /home/postgres/...
    1.新建一张表
    postgres=# create table a(a int);
    CREATE TABLE
    postgres=# select oid,relfilenode from pg_class where relname='a';
      oid  | relfilenode 
    -------+-------------
     17107 |       17107
    (1 row)
    我们会发现,oid和filenode对应的值是一样的,去找一下对应表的物理文件
    [postgres@node2 13269]$ ls -l 17107
    -rw-------. 1 postgres postgres 0 Mar 20 06:43 17107
    [postgres@node2 13269]$ pwd
    /home/postgres/data/base/13269
    可以发现,我们可以找到想对应的物理文件
    去看一下,我之前建的一张表
    postgres=# select oid,relfilenode from pg_class where relname='test';
      oid  | relfilenode 
    -------+-------------
     16478 |       16499
    (1 row)
    发现oid和filenode对应的值不一样。
    先查看数据库的oid
    postgres=# select oid,datname from pg_database ;
      oid  |  datname  
    -------+-----------
     13269 | postgres
         1 | template1
     13268 | template0
     16466 | test
     17096 | database
    (5 rows)
    去找一下物理文件
    [postgres@node2 13269]$ ls -l  16478
    ls: cannot access 16478: No such file or directory
    [postgres@node2 13269]$ pwd
    /home/postgres/data/base/13269
    [postgres@node2 13269]$ ls -l  16499
    -rw-------. 1 postgres postgres 229376 Mar 14 13:56 16499
    [postgres@node2 13269]$ pwd
    /home/postgres/data/base/13269
    可以看出来我们根据oid找不到对应的物理文件,而根据filenode就找到了。
    原因:
    我们在对表进行过truncate或者vacuum操作以后,oid是不变的,而filenode是发生变化的
    postgres=# insert into a select generate_series(1,100);
    INSERT 0 100
    postgres=# select oid,relfilenode from pg_class where relname='a';
      oid  | relfilenode 
    -------+-------------
     17107 |       17107
    (1 row)
    
    postgres=# truncate a;
    TRUNCATE TABLE
    postgres=# select oid,relfilenode from pg_class where relname='a';
      oid  | relfilenode 
    -------+-------------
     17107 |       17110
    (1 row)
    
    
    postgres=# insert into a select generate_series(101,200);
    INSERT 0 100
    postgres=# delete from a;
    DELETE 100
    postgres=# select oid,relfilenode from pg_class where relname='a';
      oid  | relfilenode 
    -------+-------------
     17107 |       17110
    (1 row)
    postgres=# vacuum full a;
    VACUUM
    postgres=# select oid,relfilenode from pg_class where relname='a';
      oid  | relfilenode 
    -------+-------------
     17107 |       17111
    (1 row)
    所以根据oid去查找表的物理文件的位置是不靠谱的事情。
    
    2.查找表物理文件的方式:
    postgres=# select pg_relation_filepath('a');
     pg_relation_filepath 
    ----------------------
     base/13269/17111
    (1 row)
    另一种方式为通过oid2name
    [postgres@node2 contrib]$ oid2name
    All databases:
        Oid  Database Name  Tablespace
    ----------------------------------
      17096       database  pg_default
      13269       postgres  pg_default
      13268      template0  pg_default
          1      template1  pg_default
      16466           test  pg_default
    [postgres@node2 contrib]$ oid2name -d postgres 
    From database "postgres":
      Filenode        Table Name
    ----------------------------
         17111                 a
         16493          lineitem
         17089  pgbench_accounts
         17086  pgbench_branches
         17077   pgbench_history
         17080   pgbench_tellers
         16484                t3
         16499              test
         16490           ticket1
    如果没有oid2name则需要去postgresql解压目录下的contrib安装一下,make,    make install
    


    
    
    
    
    展开全文
  • /* 文件节点类型 file node type */ #define CV_NODE_NONE 0 #define CV_NODE_INT 1 #define CV_NODE_INTEGER CV_NODE_INT #define CV_NODE_REAL 2 #define CV_NODE_FLOAT CV_NODE_R
    /* 文件节点类型 file node type */
    #define CV_NODE_NONE        0
    #define CV_NODE_INT         1
    #define CV_NODE_INTEGER     CV_NODE_INT
    #define CV_NODE_REAL        2
    #define CV_NODE_FLOAT       CV_NODE_REAL
    #define CV_NODE_STR         3
    #define CV_NODE_STRING      CV_NODE_STR
    #define CV_NODE_REF         4 /* not used */
    #define CV_NODE_SEQ         5
    #define CV_NODE_MAP         6
    #define CV_NODE_TYPE_MASK   7

    /* 选项标记 optional flags */
    #define CV_NODE_USER        16
    #define CV_NODE_EMPTY       32
    #define CV_NODE_NAMED       64
    #define CV_NODE_TYPE(tag)  ((tag) & CV_NODE_TYPE_MASK)
    #define CV_NODE_IS_INT(tag)        (CV_NODE_TYPE(tag) == CV_NODE_INT)
    #define CV_NODE_IS_REAL(tag)       (CV_NODE_TYPE(tag) == CV_NODE_REAL)
    #define CV_NODE_IS_STRING(tag)     (CV_NODE_TYPE(tag) == CV_NODE_STRING)
    #define CV_NODE_IS_SEQ(tag)        (CV_NODE_TYPE(tag) == CV_NODE_SEQ)
    #define CV_NODE_IS_MAP(tag)        (CV_NODE_TYPE(tag) == CV_NODE_MAP)
    #define CV_NODE_IS_COLLECTION(tag) (CV_NODE_TYPE(tag) >= CV_NODE_SEQ)
    #define CV_NODE_IS_FLOW(tag)       (((tag) & CV_NODE_FLOW) != 0)
    #define CV_NODE_IS_EMPTY(tag)      (((tag) & CV_NODE_EMPTY) != 0)
    #define CV_NODE_IS_USER(tag)       (((tag) & CV_NODE_USER) != 0)
    #define CV_NODE_HAS_NAME(tag)      (((tag) & CV_NODE_NAMED) != 0)
    #define CV_NODE_SEQ_SIMPLE 256
    #define CV_NODE_SEQ_IS_SIMPLE(seq) (((seq)->flags & CV_NODE_SEQ_SIMPLE) != 0)
    typedef struct CvString
    {
        int len;
        char* ptr;
    }
    CvString;

    /* 在读文件存储器中元素的所有关键字(名字)*/
    /* 都保存在哈希表中,用于加速查找操作 */
    typedef struct CvStringHashNode
    {
        unsigned hashval;
        CvString str;
        struct CvStringHashNode* next;
    }
    CvStringHashNode;

    /* 文件存储器的基础元素-标量或集合 */
    typedef struct CvFileNode
    {
        int tag;
        struct CvTypeInfo* info; /* 类型信息(只用于用户自定义对象,其他为0) */
        union
        {
            double f; /* 标量浮点数 */
            int i;    /* 标量整数 */
            CvString str; /* 文本字符串 */
            CvSeq* seq; /* 序列(文件结点的有序集合) */
            struct CvMap* map; /* map (命名的文件结点集合) */
        } data;
    }
    CvFileNode;
    此结构只用于从文件存储器中检索数据使用(也就是用于从文件载入数据)。当数据被写如文件,它使用最小的缓存,顺序的完成。没有数据被存在文件存储器这结构中。

    相反,当数据从文件读出后,这个文件被解释并用一个树在内存中表示。树的每个结点都由CvFileNode表示。文件结点N的类型可以通过CV_NODE_TYPE(N->tag)来检索。一些文件结点(叶子)是标量:文本字符串、整数或浮点数。其他结点是文件结点的集合,在它们的顺序上可以是标量或集合。这里有两种集合类型:sequences和maps (我们用YAML符号,当然XML流同样可以)。Sequences(不要和CvSeq混淆)是命名文件结点的有序集合,maps是命名文件结点的无序集合。这样,sequences的元素可以通过索引得到(cvGetSeqElem),maps可以通过名字得到元素(cvGetFileNodeByName)。下表描述了不同类型的文件结点:
    Type CV_NODE_TYPE(node->tag) Value
    Integer CV_NODE_INT node->data.i
    Floating-point CV_NODE_REAL node->data.f
    Text string CV_NODE_STR node->data.str.ptr
    Sequence CV_NODE_SEQ node->data.seq
    Map CV_NODE_MAP node->data.map*


    这里没有必要直接访问map的field(BTW,CvMap是一个隐藏结构)。map的元素可以通过cvGetFileNodeByName函数来得到,此函数有一个指向该文件结点的指针。

    用户定义对象是标准CXCORE类型的对象,如CvMat、CvSeq等,或者是通过cvRegisterTypeInfo注册的任意类型。在文件存储器被打开和解释后,这样的对象开始在文件中作为一个map来表示(如XML和YAML例子表示的那样)。然后,当用户调用cvRead或cvReadByName函数时,对象由请求被编码(转为自然表示方式)。
    展开全文
  • FileNode::FileNode(const FileNode& node); (3)FileNodeIterator FileNodeIterator用于迭代访问序列(sequences)和映射表(mappings).是一种典型的STL符号,通过node.begin()和node.end()来标识序列的开始和...

    可能大部分人到现在接触的XML和YAML文件很少,等以后训练人脸模型进行人脸识别的时候用的就多了。现在先了解一下这两种文件类型。
    XML:Extensible Markup Language,可扩展标记语言,标准通用语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML的简单使其易于在任何应用程序中读写数据,这使XML很快成为数据交换的唯一公共语言。可扩展标记语言文件的内容包括几乎所有的万国码Unicode字符
    YAML : Yet Another Markup Language,从其字面意识可以知道YAML是另一种标记语言,但是为了强调这种语言以数据作为中心,而不是以置标语言为重点,它是一种直观的能够被电脑识别的数据序列化格式,是一个可读性高并且容易被人类于都,容易和脚本语言交互,用来表达资料序列的编程语言。它是XML的数据描述语言,语法比XML简单。

    (1)FileStorage
    opencv提供了对XML和YAML文件进行读写操作的FileStorage类,其定义有两种形式,如下:

    C++:  FileStorage::FileStorage()
    C++:  FileStorage::FileStorage(const string& source, int flags, const string& encoding=string())

    根据其两种不同的构造形式,可以有两种FileStorage使用方法
    . 第一种:其构造函数不带参数,可以定义一个FileStorage对象,通过FileStorage的成员函数对XML和YAML文件进行读写操作如

    FileStorage fs;
    fs.open("123.xml",FileStorage::WRITE);

    对于open函数其构造函数如下:

    C++: bool FileStorage::open(const string& filename, int flags, const string& encoding=string());

    其参数含义与第二种构造函数相同,见下面说明。

    . 第二种:其构造函数带参数,对参数进行解释如下
    .const string& source: 读入文件的名字或字符串,文件的扩展名.xml或.yml/.yaml决定了文件使XML类型还是YAML类型。如果文件是一个压缩文件,可以在扩展名后缀条件.gz进行访问,如:myHugeMatrix.xml.gz。如果FileStorage::WRITE和FileStorage::MEMORY都指定了,sourec仅能输出指定类型文件(.xml或.yml等)
    . int flags: 操作类型标识符,FileStorage类的操作标识符有如下类型:
    。FileStorage::READ: 打开文件进行读的操作
    。FileStorage::WRITE: 打开文件进行写的操作
    。FileStorage::APPEND: 打开文件进行补充操作(Open the file for appending)
    。FileStorage::MEMORY:从输入的文件(source)读取数据或把数据写入到内部缓冲器(通过FileStorage::release进行内存释放)
    . const string& encoding=string(): 文件结束符。当前还不支持UTF-16类型的XML,必须用8-bit的结束符来代替。

    可以通过FileStorage::isOpened函数来判断文件是否正确打开,如果正确打开则函数返回true,否则返回false。对文件进行操作应该养成对文件是否操作成功进行判断的习惯。

    (2)FileNode
    FileNode是文件存储节点类,对于进行读操作的文件节点用于存储每个文件元素。当读取XML或YMAL文件,节点是第一个被解析并作为一个节点结合存储到存储器中。每个节点都可以作为一个包含一个数字或一个字符或其他节点的“叶子”。每个节点都有一个名字并可以通过节点的名字对节点进行访问,这些节点就组成了一个集合,就算节点没有名字也可以通过元素的索引对节点结合进行排序。文件节点类型可以通过FileNode::type()方法进行指定。
    值得注意的是节点只用用来对文件的读取提供引导,而文件进行写操作后将没有数据存储在内存中。FileNode有三种构造形式:

    C++: FileNode::FileNode();
    C++: FileNode::FileNode(const CvFileStorage* fs, const CvFileNode* node);
    C++: FileNode::FileNode(const FileNode& node);

    (3)FileNodeIterator
    FileNodeIterator用于迭代访问序列(sequences)和映射表(mappings).是一种典型的STL符号,通过node.begin()和node.end()来标识序列的开始和结束位置。其也有三种构造形式,如下:

    C++: FileNodeIterator::FileNodeIterator()
    C++: FileNodeIterator::FileNodeIterator(const CvFileStorage* fs, const CvFileNode* node, size_t ofs=0)
    C++: FileNodeIterator::FileNodeIterator(const FileNodeIterator& it)

    示例代码:

    #include <iostream>
    #include <opencv2/core/core.hpp>
    #include <opencv2/highgui/highgui.hpp>
    #include <opencv2/opencv.hpp>
    
    using namespace std;
    using namespace cv;
    
    class MyData
    {
    public:
        MyData():A(0),X(0),id(){}
        explicit MyData(int):A(97),X(CV_PI), id("mydata1234"){} //explicit to avoid implicit conversion
        void write(FileStorage& fs) const
        {
    
            fs << "{ " << "A" << A << "X" << X << "id" << id << "}";
        }
        void read(const FileNode& node)
        {
            A = (int)node["A"];
            X = (double)node["X"];
            id = (string)node["id"];
        }
    public:
        //data members
        int A;
        double X;
        string id;
    };
    
    //These write and read functions must be defined for the serialization in FileStorage to work
    static void write(FileStorage&fs, const string&, const MyData& x)
    {
    
        x.write(fs);
    }
    
    static void read(const FileNode& node, MyData& x, const MyData& default_value = MyData())
    {
    
        if(node.empty())
            x = default_value;
        else
            x.read(node);
    }
    
    //This function will print our custom class to the console
    static ostream& operator<<(ostream& out, const MyData& m)
    {
        out << "{ id = " << m.id << ", ";
        out << "X = " << m.X << ", ";
        out << "A = " << m.A << "}";
        return out;
    }
    
    int main(int ac, char** av)
    {
        if(ac != 2)
        {
            //help(av);
            return 1;
        }
    
        string filename = av[1];
        {
            //write
            Mat R = Mat_<uchar>::eye(3, 3), T = Mat_<double>::zeros(3,1);
            MyData m(1);
    
            FileStorage fs(filename, FileStorage::WRITE);
    
            fs << "iterationNr"<<100;
            fs << "strings" << "[";
            fs << "image1.jpg" << "Awesomeness" << "baboon.jpg";
            fs << "]";
    
            fs << "Mapping";
            fs << "{" << "One" << 1;
            fs <<        "Two" << 2 << "}";
    
            fs << "R" << R;
            fs << "T" << T;
    
            fs << "MyData" << m;
    
            fs.release();
            cout << "Write Done." << endl;
        }
    
        {//read
            cout << endl << "Reading: " << endl;
            FileStorage fs;
            fs.open(filename, FileStorage::READ);
    
            int itNr;
            //fs["iterationNr"] >> itNr;
            itNr = (int)fs["iterationNr"];
            cout << itNr;
            if(!fs.isOpened())
            {
                cerr << "Failed to open " << filename << endl;
                return 1;
            }
    
            FileNode n = fs["strings"];
            if(n.type() != FileNode::SEQ)
            {
                cerr << "string is not a sequence! FAIL" << endl;
                return 1;
            }
    
            FileNodeIterator it = n.begin(), it_end = n.end();
            for (; it != it_end; ++it)
            {
                cout << (string)*it << endl;
            }
            n = fs["Mapping"];
            cout << "Two " << (int)(n["Two"]) << "; ";
            cout << "One " << (int)(n["One"]) << endl << endl;
    
            MyData m;
            Mat R, T;
    
            fs["R"] >> R;
            fs["T"] >> T;
            fs["MyData"] >> m;
    
            cout << endl << "R = " << R << endl;
            cout << "T = " << T << endl << endl;
            cout << "MyData = " << endl << m << endl << endl;
    
            //Show default behavior for non existing nodes
            cout << "Attempt to read NonExisting(should initialize the data structure with its defaule).";
            fs["NonExisting"] >> m;
            cout << endl << "NonExisting = " << endl << m << endl;
        }
        cout << endl << "Tip: Open up" << filename << "with a text editor to see the serialized data." << endl;
        return 0;
    }

    程序分析:
    1.XML/YAML文件打开和关闭
    前面已经讲过,可以使用类FileStorage实现对文件的打开操作。对于文件的关闭而言,当FileStorage对象销毁时文件会自动关闭,也可以显式调用FileStorage::release()函数进行。如fs.release()

    2.输入输出文本和数字
    在对XML和YAML文件进行输入输出操作时,和C++中STL用相同的操作符“<<”输出(写入文件)和“>>”输入(读取文件),对于基本的数据类型可以这样打印数值.
    输出任意一种数据类型之前首先需要指出变量的名称,可以通过打印变量的名称来达到这个目的,如下:

    fs << "iterationNr" << 100;

    读取文件使用基本操作符”>>”如:

    int itNr;
    fs["iterationNr"] >> itNr;
    itNr = (int)fs["iterationNr"];

    3.opencv数据结构的输入输出
    opencv数据结构的输入输出和基本的C++输入输出形式相同

    Mat R = Mat_<uchar>::eye(3, 3), T = Mat_<double>::zeros(3, 1);
    
    fs << "R" << R;     //R数据写入文件
    fs << "T" << T;     //T数据写入文件
    
    fs["R"] >> R;           //从文件中读取数据R
    fs["T"] >> T;           //从文件中读取数据T

    4.vector(arrays)和maps输入输出
    就向前面程序中写的,我们同样可以对array,vector和maps进行输出操作,首先打印出变量的名字,之后支出要输入变量的类型是序列(vector, array)还是maps.

    如果数据类型是vector和array类,要在元素前面加上”[“在元素后面加上”]”符号,如下:

    fs << "string" << "[";
    fs << "image1.jpg" << "Awesomeness" << "baboon.jpg";
    fs << "]";

    对于数据结构是maps类型,需要在元素前面和最后加上”{“和”}”符号,如下:

    fs << "Mapping";
    fs << "{" << "One" << 1;
    fs        << "Two" << "}";

    从文件中读取这些数据的时候我们需要用到FileNode和FileNodeIterator数据结构。FileStorage类操作符”[]”返回的是一个FileNode数据类型,对于连续的节点,可以通过FileNodeIterator进行迭代遍历,其函数功能和C++中iterator一样。

    FileNode n = fs["string"];
    if(n.type() != FileNode::SEQ)
    {
        cerr << "string is not a sequence! FAIL" << endl;
        return 1;
    }
    
    FileNodeIterator it = n.begin(), it_end = n.end();
    for(; it != it_end; ++it)
    {
        cout << (string)*it << endl;
    }

    对于maps类型的数据结构可以再次使用”[]”操作符来访问给定的变量对象如下:

    n = fs["Mapping"];
    cout << "Two " << (int)(n[""Two]) << "; ";
    cout << "One " << (int)(n["One"]) << endl << endl;

    5.读取和吸入自己定义的数据结构
    假定已经定义了如下数据结构:

    class MyData
    {
    public:
        MyData():A(0),X(0),id(){}
    public:
    int A;
    double X;
    string id;
    };

    可以通过opencv提供的对XML和YAML文件的接口,在类内或类外各添加添加一个读取函数和一个写入函数实现对文件的连续操作如下:

    void write(FileStorage& fs) const
    {
        fs << "{" << "A" << A << "X" << X << "id" << id << "}";
    }
    
    void read(const FileNode& node)
    {
        A = (int)node["A"];
        X = (double)node["X"];
        id = (string)node["id"];
    }

    然后需要在类外添加如下函数定义

    void write(FileStorage& fs, const std::string&, const MyData& x)
    {
        x.write(fs);
    }
    
    void read(const FileNode& node, MyData& x, const MyData& default_value=MyData())
    {
        if(node.empty())
            x = default_value;
        else
            x.read(node);
    }

    从这里就可以看出,如果我们定义了一个读取部分试图读取一个不存在的节点,这种情况下就会返回一个默认初始化的值,更详细的解决方案是返回-1作为项目代码。
    一旦添加了这四个函数可以使用”>>”和”<<”进行写入和读取的操作。

    MyData m(1);
    fs << "MyData" <<m;     //自定义的数据结构
    fs["MyData"] >> m;      //读取自己的数据结构

    或尝试读取一个不存在文件

    fs["NonExisting"] >> m;
    cout << endl << "NonExisting = " << endl << m << endl;

    程序运行结果:

    Linux环境运行方式如下,首先要先建立一个CMakeLists.txt文件,其语法格式请参考《opencv之在Linux下编译opencv程序的两种方式g++、cmake》对于程序中出现的argc及argv[]运行方式,请参考《程序命令行argc\argv》
    下面分别给出在Linux和Windows下命令运行的截图以供参考
    Linux环境(Ubuntu)
    这里写图片描述
    可以看出在其根文件夹下生成了mydata1234.xml文件
    这里写图片描述

    Windows(win 7)运行如下:
    这里写图片描述
    在其Debug文件夹下生成mydata文件
    这里写图片描述

    展开全文
  • jenkinsfile以代码的形式将持续集成中的流水线构成进行保存,更是可以结合scm进行保存,这篇文章介绍一下如何使用jenkinsfile的两种方式。

    在这里插入图片描述
    jenkinsfile以代码的形式将持续集成中的流水线构成进行保存,更是可以结合scm进行保存,这篇文章介绍一下如何使用jenkinsfile的两种方式。

    前提准备

    使用可以创建pipeline方式的jenkins服务即可,如果没有相关的环境,可参看如下文章进行创建:

    插件安装

    流水线方式搭建,可安装如下插件

    • pipeline-model-definition
    • build-pipeline-plugin
    • buildgraph-view
    • workflow-aggregator

    也可以直接安装blueocean

    • blueocean

    pipeline代码示例

    node {
        stage('build'){
         echo 'build';
        }
        
        stage('test'){
         echo 'test';
        }
        
        stage('deploy'){
         echo 'deploy';
        }
    }
    

    方式1: 通过jenkins图形界面进行jenkinsfile编辑

    点击Jenkins 选择New Item,如下图方式创建Pipeline方式的job,本文中job名称为:build2deployfromjenkins
    在这里插入图片描述
    将sample用的jenkinsfile拷贝到下图中Advanced Project Options中,选择Pipeline script,然后将内容拷贝到Scripts中,点击Save进行保存
    在这里插入图片描述

    点击Build Now进行构建,下图为构建结果的显示
    在这里插入图片描述

    方式2: 结合版本管理工具进行构建

    点击Jenkins 选择New Item,如下图方式创建Pipeline方式的job,本文中job名称为:build2deployfromscm
    在这里插入图片描述
    以sample的jenkinsfile为基础,稍作拷贝用于区别上个示例。选择Advanced Project Options中的Pipeline script from scm,做如下设定:
    在这里插入图片描述

    • scm相关设定准备
    [root@platform jenkins]# git clone http://192.168.163.118:32001/root/jenkinsfileprj.git
    Cloning into 'jenkinsfileprj'...
    Username for 'http://192.168.163.118:32001': root
    Password for 'http://root@192.168.163.118:32001': 
    warning: You appear to have cloned an empty repository.
    [root@platform jenkins]# cd jenkinsfileprj/
    [root@platform jenkinsfileprj]# touch Jenkinsfile
    [root@platform jenkinsfileprj]# vi Jenkinsfile
    [root@platform jenkinsfileprj]# ls
    Jenkinsfile
    [root@platform jenkinsfileprj]# cat Jenkinsfile 
    node {
        stage('build-using-scm'){
         echo 'build';
        }
        
        stage('test-using-scm'){
         echo 'test';
        }
        
        stage('deploy-using-scm'){
         echo 'deploy';
        }
    }
    [root@platform jenkinsfileprj]# git add Jenkinsfile 
    [root@platform jenkinsfileprj]# git commit -m "for jenkinsfile scm test"
    [master (root-commit) 9d55ff6] for jenkinsfile scm test
     1 file changed, 13 insertions(+)
     create mode 100644 Jenkinsfile
    [root@platform jenkinsfileprj]# git push origin master
    Username for 'http://192.168.163.118:32001': root
    Password for 'http://root@192.168.163.118:32001': 
    Counting objects: 3, done.
    Compressing objects: 100% (2/2), done.
    Writing objects: 100% (3/3), 300 bytes | 0 bytes/s, done.
    Total 3 (delta 0), reused 0 (delta 0)
    To http://192.168.163.118:32001/root/jenkinsfileprj.git
     * [new branch]      master -> master
    [root@platform jenkinsfileprj]# 
    

    在这里插入图片描述
    点击Build Now进行构建,下图为构建结果的显示
    在这里插入图片描述

    总结

    这篇文章介绍了在jenkins中使用jenkinsfile的两种常用方法,从Infrastructure as code观点,方式2更值得在实际项目中推荐,所有的操作都以自动化和代码的形式出现,可以更好地保证环境的一致性

    持续集成之jenkins实践教程

    https://liumiaocn.blog.csdn.net/article/details/90762768

    展开全文
  • Web前端项目 npm runwebpack-dev-server --inline --progress --config build/webpack...提示:no such file or directory, scandir '.../node_modules/node-sass/vendor' 显示找不到node_modules/node-sass/vendo...
  • OpenCV编程->FileStorage解析

    千次阅读 2014-04-18 16:53:44
    FileNode(const FileNode& node); //! returns element of a mapping node FileNode operator[](const string& nodename) const; //! returns element of a mapping node CV_WRAP FileNode operator[](const ...
  • 在执行npm install时出现no such file or directory node_modules\.staging\ 出现这个后,执行后续的npm run会报错,如:vue-typescript-admin-template@0.1.0 beta: vue-cli-service build --mode beta。 这个出现...
  • #执行以下方法: cnpm rebuild node-sass
  • Vue 项目 npm install 报错:module build failed: Error: ENOENT: no such file or directory, scandir ‘…\node-sass\vendor’ 今天在自己的gitee上面下载了一个以前自己写的vue的demo文件,下载下来以后运行...
  • OpenCV FileStorage读写操作

    万次阅读 2018-05-09 21:08:54
    这时,我们可以使用FileStorage加上FileNode来完成这些操作。 FileStorage 和 FileNode FileStorage这个类可以看成是纸+笔的功能,负责保存内容和写入内容;而FileNode可以看成是眼睛,读取纸上的内容。...
  • PostgreSQL中Oid和Relfilenode的映射

    千次阅读 热门讨论 2021-01-25 13:23:13
    pg_filenode_relation ---------------------- 1259 (1 row) postgres=# 通过pg_relation_filenode()可以将oid转化为relfilenode, 通过pg_filenode_relation可以将relfilenode转化为oid. 既然pg_class表中不存储...
  • 报错 ...no such file or directory, open '/node_modules/.staging/ 原因 npm版本配置不一致导致,可以尝试重新安装npm解决 解决方案 npm cache clean -f npm install -g npm ...
  • An unhandled exception occurred: The ../node_modules/bootstrap/dist/css/bootstrap.min.css asset path must start with the project source root.
  • node-red教程3.3 file控件介绍

    千次阅读 2018-06-19 19:30:11
    File节点分为两种,功能分别是file in与file out 3.3.1 file的说明信息  File in 控件 读取文件的内容,输出为字符串或二进制缓冲区。 输入 字符串形式的文件名 如果不在节点配置中设置,则该属性设置为...
  • 删除文件 package-lock.json
  • node_file_play node_file_play
  • node-file-manager, 基于 Koa angular.js 和 Bootstrap的node.js 文件管理器web服务器 屏幕快照 用法 npm install -g node-file-manager node-file-manager -p 8080 -d/path/to/或者 git clone https://github
  • Windows下Node.js 多版本管理器-Gnvm

    千次阅读 2018-12-21 17:08:59
    我们在平时的项目开发中,经常需要指定 Node 的版本,所有版本控制管理,就很有必要,需要哪个切哪个。 MacOS 主要有 n 和 nvm,具体可以自行百度,查之,用之 sudo npm install -g n # 直接输入 n ,然后回车,可...
  • 零依赖节点文件上传 纯粹的nodejs文件上传,零依赖。...cd node-file-upload 运行服务器 npm start 要不就 node index.js 测试 curl --upload-file ./<file> http://127.0.0.1:3000/ 执照 麻省理工学院:copyright:
  • Node.js文件管理器 这是一个简单的文件管理器,用于按类别下载和上传服务器上的文件。 文件管理器由Node.js和Express组成。 您可以对其进行更改,改进和自行发布。 您也可以使用此简单的文件服务器与每个设备(例如...
  • 今天部署项目的时候一直部署不成功,大概部署了五六次,每次都失败。开始以为是机器出了问题,后来就在同一台机器上部署另外一个项目,居然成功了。后来就在本地运行npm run build命令,发现失败,截图如下: ...
  • 的构造函数,则编译出错,因为FileNode也定义(重载)了从FileNode到double和string的转换符); 【重载类型转换操作符,自定义类中定义了参数为int的构造函数的话,FileNode->int->自定义类】 inline FileNode::...
  • opencv中的FileStorage类使用注意事项

    千次阅读 2016-10-13 21:50:08
    static void read(const FileNode &node, MyData &mydata, const MyData &default_val = MyData()){ if(node.empty()) mydata = default_val; else { node["index"] >> mydata.i; node["str"] >> mydata.str; ...
  •       var fs = require('fs'), path = require('path'); function exists(path){ return fs.existsSync(path) || path.existsSync(path); }      如何判断是不是文件...function isFile(p...
  • Returns: 顶层映射 读数据:FileStorage::operator[] 返回指定的顶层映射元素 FileNode FileStorage::operator[](const string& nodename) const FileNode FileStorage::operator[](const char* nodename) const ...
  • 我需要将文件写入以下路径: ...no such file or directory, open ‘e:\log\2019-11-15.txt’ 如果整个路径已经存在,mkdirp是一个noop。否则,它会为您创建所有缺少的目录。 const mkdirp = require('...
  • 文件服务器 一个简单/最小的 Node.js 文件服务器,除了 Node.js 本身没有其他依赖项。 它最初是为了学习一些 Node 的 http 模块,但结果证明它是一种在... node file-server.js 或./file-server.js 默认端口为 8080
  • Python编码错误的解决办法SyntaxError: Non-ASCII character '\xe7' in file 现象原因解决办法 python博客第一天 现象 在编辑python时,当有中文输出或注释时,出现错误提示:SyntaxError: Non-ASCII character ‘\...
  • 前几天整了个jenkins的docker容器,准备实践一把 前端自动构建,结果每次构建都出现env: ‘node’: No such file or directory 问题导致构建失败,找了一大圈,后面让我找到一个不算最好的解决方案: # 进入...
  • python cv2 FileStorage使用

    千次阅读 2019-04-27 21:44:22
    首先我给出xml文件的内容 ...1 FileStorage infile(location_file_name, FileStorage::READ); 2 int x1 = 0, y1 = 0, y2 = 0, x2 = 0, large_than_ten; 3 Mat img_11; 4 bool thresh_flag; ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 416,740
精华内容 166,696
关键字:

filenode