2017-03-28 1 views
2

開発者がGITプッシュからAWSコーデックコミットを使用してコードをチェックインすると、私たちのERPパッケージ「Exact Online」にイベントを登録します。これにより、プロジェクトマネージャは、ERPパッケージ内からコミットを検討することができます。完全オンラインERPにAWS GITコードプッシュイベントを登録

AWSコーデックコミットはSNSとラムダによるトリガーのみをサポートしています。バッチファイルなどのための接続はありません。私はAWS Lambdaで遊んでいて、AWS CodecommitからSlackにイベントを投稿することができましたが、Exact Onlineにはもっと難しいようです。

正確なオンラインのビジネスオブジェクトにコードコミットのGITイベントを投稿するにはどうすればよいですか?

答えて

1

最良の方法は、次のようなスクリプトを使用して、AWSラムダとInvantiveデータアクセスポイントの組み合わせを使用することです。このスクリプトはまた、スラックするポストを含んで

console.log('Loading function codecommit2slack.'); 

const aws = require('aws-sdk'); 
const codecommit = new aws.CodeCommit({ apiVersion: '2015-04-13', region: 'eu-west-1' }); 
const querystring = require('querystring'); 

const https = require('https'); 
const url = require('url'); 
// 
// To get the slack hook url, go into slack admin and create a new "Incoming Webhook" integration. 
// 
const slack_url = 'https://hooks.slack.com/services/SECRET/STUFF'; 
const slack_req_opts = url.parse(slack_url); 
slack_req_opts.method = 'POST'; 
slack_req_opts.headers = {'Content-Type': 'application/json'}; 

exports.handler = function(event, context) 
{ 
    console.log('Run codecommit2slack.'); 
    (event.Records || []).forEach(function (rec) 
    { 
    var details = rec.codecommit.references[0]; 
    var commitId = details.commit; 
    var ref = details.ref; 
    var repository = rec.eventSourceARN.split(":")[5]; 

    console.log("Repo " + repository + ", commit ID " + commitId + " on " + ref); 

    var params = 
    { commitId: commitId 
    , repositoryName: repository 
    }; 

    codecommit.getCommit 
    ( params 
    , function(err, data) 
     { 
      if (err) console.log(err, err.stack); // an error occurred 
      else  
      { 
       var commitMessage = data.commit.message; 
       var authorName = data.commit.author.name; 
       var committerName = data.commit.committer.name; 

       console.log(commitMessage); 

       var postData = querystring.stringify 
       (
        { 'connection': 'PUBLIC\\Exact Online (nl)' 
        , 'format': 'Xml' 
        , 'query': "insert into events(description, enddate, notes, startdate, status) values ('" + repository + ": " + commitMessage.replace(/[^\x20-\x7E]/gmi, "") + "', sysdate, '" + committerName + "/" + commitId + "', sysdate, 50)" 
        } 
       ) 
       ; 

       var daphttpoptions = 
       { host: "data-access-point.com" 
       , port: 443 
       , path: '/eol/stable/dap/Results' 
       , auth: 'EXACT-ONLINE-USER' + ":" + 'EXACT-ONLINE-PASSWORD' 
       , method: 'POST' 
       , headers: 
        { 'Content-Type': 'application/x-www-form-urlencoded' 
        , 'Content-Length': Buffer.byteLength(postData) 
        } 
       } 

       var dapreq = https.request 
       (daphttpoptions 
       , function (res) 
        { 
         if (res.statusCode === 200) 
         { 
          console.log('posted to DAP'); 
          context.succeed('posted to DAP'); 
         } 
         else 
         { 
          console.log('post to DAP failed with status code: ' + res.statusCode); 
          context.fail('status code: ' + res.statusCode); 
         } 
        } 
       ); 

       dapreq.on 
       ('error' 
       , function(e) 
        { 
         console.log('problem with DAP request: ' + e.message); 
         context.fail(e.message); 
        } 
       ); 

       // 
       // Send to Data Access Point. 
       // 
       dapreq.write(postData); 

       dapreq.end(); 

       var req = https.request 
       (slack_req_opts 
       , function (res) 
        { 
         if (res.statusCode === 200) 
         { 
          console.log('posted to slack'); 
          context.succeed('posted to slack'); 
         } 
         else 
         { 
          console.log('post to slack failed with status code: ' + res.statusCode); 
          context.fail('status code: ' + res.statusCode); 
         } 
        } 
       ); 

       req.on 
       ('error' 
       , function(e) 
        { 
         console.log('problem with Slack request: ' + e.message); 
         context.fail(e.message); 
        } 
       ); 

       // 
       // Send to development-audit channel. 
       // 
       req.write(JSON.stringify({username: committerName, as_user: true, text: commitMessage + " on " + repository + " (ID: " + commitId + ", ref " + ref + ")", channel: '#development-audit'})); 

       req.end(); 
      } 
     } 
    ); 

    }); 
}; 

console.log('Finished loading function codecommit2slack.'); 

https://gist.github.com/vgeshel/1dba698aed9e8b39a464、thxに基づくコードの最初のバージョン。正確なオンラインでの

結果は次のようになりますが、ofcourseのあなたはまた、例えば、それぞれの新しいコミットやタグの記事やシリアル番号を作成するために使用することができます:

GIT commits in Exact Online as events

関連する問題