2016-10-12 19 views
1

私は、現行のジェンキンスをコードワークフローパイプラインにパイプラインに連結された私の既存の一連のJenkinsジョブを移動させています。Jenkins Artifactory Plugin AQLをダウンロード最新のアーティファクトマッチングパターン

このイニシアチブには、Pipelineプラグインが使用できるさまざまな新しいプラグインが用意されています。それらの1つはJenkins Artifactory Pluginです。

このプラグインは、Artifactorys "AQL"言語のjsonオブジェクトを受け入れることができます。逆に、パターンに一致するアーティファクトの一連のreposを検索するための非常に簡単なパターンです。

"AQL"とパターンの両方を使用してアーチファクトを解決しようとしました。

私が抱えている問題は、Jenkins Jobsで使用できる既存のJenkins Artifact Resolverプラグインの動作を模倣したいということです。

このプラグインは、私が現在DSLワークフローに提供しているのと同じパターンを使用し、その特定のリターンセットにLATESTまたはLAST MODIFIEDアーチファクトをダウンロードするだけです。新しいアプローチにも同じことをしたいと思います。ここで

jfrog rt search "client-snapshots/com/client/content_services/search-dist/*.zip" 

[Info:] Pinging Artifactory... 
    [Info:] Done pinging Artifactory. 
    [Info:] Searching Artifactory using AQL query: items.find({"repo": "client-snapshots","$or": [{"$and": [{"path": {"$match":"com/client/content_services/search-dist"},"name":{"$match":"*.zip"}}]},{"$and": [{"path": {"$match":"com/client/content_services/search-dist/*"},"name":{"$match":"*.zip"}}]}]}).include("name","repo","path","actual_md5","actual_sha1","size") 
    [Info:] Artifactory response: 200 OK 
    [Info:] Found 58 artifacts. 

に細工されたJSONオブジェクト

jfrog rt search --spec art-search.json 
[Info:] Pinging Artifactory... 
[Info:] Done pinging Artifactory. 
[Info:] Searching Artifactory using AQL query: items.find({"repo":"client-snapshots","$and":[{"$or":[{"path":{"$match":"com/client/content_services"},"name":{"$match":"*search*"}}]},{"$or":[{"path":{"$match":"*dist*"},"name":{"$match":".zip"}}]},{"$or":[{"path":{"$match":"*1.0-SNAPSHOT*"},"name":{"$match":"*"}}]}]}).include("name","repo","path","actual_md5","actual_sha1","size") 
[Info:] Artifactory response: 200 OK 
[Info:] Found 116 artifacts. 

そしてのためのJSONから「AQL」クエリを使用しての結果である:ここで

は、パターンベースの検索を使用しての結果であります上記のクエリ:

{ 
    "files": [ 
    { 
     "aql": { 
     "items.find": { 
      "repo": "client-snapshots", 
      "$and": [ 
      { 
       "$or": [ 
       { 
        "path": { 
        "$match": "com/client/content_services" 
        }, 
        "name": { 
        "$match": "*search*" 
        } 
       } 
       ] 
      }, 
      { 
       "$or": [ 
       { 
        "path": { 
        "$match": "*dist*" 
        }, 
        "name": { 
        "$match": ".zip" 
        } 
       } 
       ] 
      }, 
      { 
       "$or": [ 
       { 
        "path": { 
        "$match": "*1.0-SNAPSHOT*" 
        }, 
        "name": { 
        "$match": "*" 
        } 
       } 
       ] 
      } 
      ] 
     } 
     }, 
     "target": "Bazinga/Artifactory/" 
    } 
    ] 
} 

最初のものは、指定したリポジトリからのジップだけを返します。私が本当に欲しいもの。 jsonオブジェクトは、指定したレポからポンとジップの両方を返します。私はジムをダウンロードすることにのみ興味があるので、私はポンドなしでやることができました。

さらに、私は上記のパターンの1つを使用して最新のジップを返すだけです。

任意の提案は、だから私はAQLとPowerShellを使用して別の解決策を見つけた

答えて

0

を理解されるであろう。

$pair = "$($art_user):$($art_pass)" 
Write-Verbose "Attempting to convert Artifactory credentials to a base64 string for automation" 
$encodedCreds = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($pair)) 
$basicAuthValue = "Basic $encodedCreds" 
$headers = @{ 
    Authorization = $basicAuthValue 
} 

Write-Host "Attempting to perform a AQL search." 
$aql_search = $art_base_url + "/api/search/aql" 
Write-Host "Building aql query with the following parameters, groupID: $group_id, artifactID: $artifact_id, version: $version, classifier: $classifier and repos: $art_generic_repokey." 
$aql_query = 'items.find({"repo":"' + $art_generic_repokey + '","$or":[{"$and":[{"path":{"$match":"' + $group_id + '/' + $artifact_id + '/' + $version + '"},"name":{"$match":"' + $artifact_id + '*' + $classifier + '*.' + $extension + '"}}]}]}).sort({"$desc":["modified"]}).limit(1)' 
Write-Host "Built the following aql query: '$aql_query' ." 
$aql_content = Invoke-RestMethod -Uri $aql_search -Headers $headers -Method Post -Body $aql_query -ContentType 'text/plain' 
Write-Host "Attempting to submit the aql query to the following artifactory server: $art_base_url." 
$aql_results = ($aql_content).results 
Write-Host "Attempting to parse query results and build the artifact download uri." 
$aql_repo,$aql_path,$aql_name = ($aql_results).repo,($aql_results).path,($aql_results).name 
$artifactDownloadUri = $art_base_url + '/' + $aql_repo + '/' + $aql_path + '/' + $aql_name 
Write-Host "Found the following uri: $artifactDownloadUri !!" 

if ($artifactMimeType -eq 'application/zip' -or $extension -eq 'zip') { 
    Write-Verbose "Attempting to save the artifact to $download_dir/$art_dist_name.zip" 
    Invoke-RestMethod -Uri $artifactDownloadUri -Headers $headers -OutFile "$download_dir/$art_dist_name.zip" 
} 
関連する問題