User Tools

Site Tools


gitlab_satis

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
gitlab_satis [2018/08/21 21:00]
admin [Satis example template]
gitlab_satis [2018/11/14 16:54] (current)
admin [Optional]
Line 1: Line 1:
 ====== Using Gitlab and Satis to generate private composer Repository ====== ====== Using Gitlab and Satis to generate private composer Repository ======
  
-[[https://github.com/ochorocho/gitlab-pages-satis|This]] is mainly a wrapper for [[https://github.com/mborne/satis-gitlab|mborne/satis-gitlab]] intended to make it easy to use with minimal and simple configuration. Best used together with Gitlab. I'm using Gitlab Pages behind **Apache**, nginx is the default/recommended way to use Gitlab Pages with.+[[https://github.com/ochorocho/gitlab-pages-satis|This]] is mainly a wrapper for [[https://github.com/mborne/satis-gitlab|mborne/satis-gitlab]] intended to make it easy to use with minimal and simple configuration. Best used together with Gitlab. <del>I'm using Gitlab Pages behind **Apache**,</del> NGINX is the default/recommended way to use Gitlab Pages with.
  
 **Idea** **Idea**
Line 9: Line 9:
   * <del>Download zips in Satis ??? So no key auth is required??!?!?</del> add ''archive: true'' and *.tar-Files for Tags will be saved in ''./dist/'' Folder. Branches still point to Git Repo.   * <del>Download zips in Satis ??? So no key auth is required??!?!?</del> add ''archive: true'' and *.tar-Files for Tags will be saved in ''./dist/'' Folder. Branches still point to Git Repo.
   * <del>Multiple packages, which one is preferred?</del> Depends on the loading order of your defined repositories in composer.json   * <del>Multiple packages, which one is preferred?</del> Depends on the loading order of your defined repositories in composer.json
 +  * FIXME Run pipeline only if it is not already running, pile up all requests and run it only once.
  
 **Features** **Features**
Line 31: Line 32:
   image: ochorocho/gitlab-pages-satis:latest   image: ochorocho/gitlab-pages-satis:latest
   script:   script:
-    - mkdir public+    - mkdir satis-build
     - gitlab-pages-satis     - gitlab-pages-satis
 +    - mv satis-build public
   artifacts:   artifacts:
     paths:     paths:
Line 42: Line 44:
 ===== Configuration ===== ===== Configuration =====
  
-Go to User Settings -> Access Tokens, give it a name and allow api scope. Hit "Create personal access token" and copy it to your configuration (arguments -> gitlab-token). See below ...+Go to Project -> Settings -> CI/CD -> Pipeline Triggers, give it a name and allow api scope. Hit "Add Trigger" and copy it to your configuration (arguments -> gitlab-token). See below ...
 ==== Using Environment variable ==== ==== Using Environment variable ====
  
Line 48: Line 50:
  
 {{::gitlab-satis-config.png?1000|Gitlab Satis Configuration}} {{::gitlab-satis-config.png?1000|Gitlab Satis Configuration}}
- 
-==== Satis example template ==== 
- 
-Use this template if you want to modify ... 
- 
-  * the Twig template 
-  * to use http instead of https 
-  * and all other options that are not covered by  
- 
-<code javascript satis-template.json> 
-{ 
-    "name": "SATIS repository", 
-    "homepage": "http://localhost/satis/", 
-    "require": [], 
-    "require-dependencies": true, 
-    "require-dev-dependencies": true, 
-    "config": { 
-      "secure-http": false // Not required for https 
-    }, 
-    "twig-template": "template/index.html.twig" 
-} 
-</code> 
  
 === Using Config File === === Using Config File ===
Line 83: Line 63:
   homepage: "https://satis.example.org"   homepage: "https://satis.example.org"
   output: "satis.json"   output: "satis.json"
-  use-file-to-include: '.satisinclude'+  include-if-has-file: '.satisinclude'
   template: '/path/to/satis-template.example.json'   template: '/path/to/satis-template.example.json'
   archive: true   archive: true
Line 91: Line 71:
   username: "admin"   username: "admin"
   password: "password"   password: "password"
 +build-dir: "satis-build"
 </code> </code>
  
Line 98: Line 79:
  
 ==== Optional ==== ==== Optional ====
 +
 +=== Satis example template ===
 +
 +Use this template and set configuration (options -> template) if you want to modify ...
 +
 +  * the Twig template
 +  * to use http instead of https
 +  * and all other options that are not covered by [[https://github.com/mborne/satis-gitlab|mborne/satis-gitlab]]
 +
 +<code javascript satis-template.json>
 +{
 +    "name": "SATIS repository",
 +    "homepage": "http://localhost/satis/",
 +    "require": [],
 +    "require-dependencies": true,
 +    "require-dev-dependencies": true,
 +    "config": {
 +      "secure-http": false // Not required for https
 +    },
 +    "twig-template": "template/index.html.twig"
 +}
 +</code>
 +
 +=== Trigger on tag_push ===
  
 Want to trigger your satis projects pipeline each time a Tag is created/deleted ? Want to trigger your satis projects pipeline each time a Tag is created/deleted ?
Line 108: Line 113:
 <code ruby gitlab_pages_satis.rb> <code ruby gitlab_pages_satis.rb>
 #!/usr/bin/env ruby #!/usr/bin/env ruby
 +
 +#### Config begin
 +
 +# Trigger Token, see Project -> Settings -> CI/CD -> Pipeline triggers
 +trigger_token="XXXXXXXX"
 +
 +# Private Token, see User -> Access Tokens -> Personal Access Tokens
 +auth_token="XXXXXXXX"
 +
 +# GitLab install
 +gitlab_url="https://gitlab.example.org/"
 +
 +# Satis Project id (integer, not the project name)
 +satis_project_id="XX"
 +
 +#### Config end
  
 require 'json' require 'json'
Line 120: Line 141:
  shaFile = "#{temp}/gitlab-trigger.sha"  shaFile = "#{temp}/gitlab-trigger.sha"
  
- # Get hash values to compare + # Get refs to compare 
- payloadHash = "#{payload['before']} #{payload['after']}" + payloadCurrent = "#{payload['ref']}" 
- payloadHashBefore = File.read(shaFile) if File.exist?(shaFile)+ payloadBefore = File.read(shaFile) if File.exist?(shaFile)
  
- # Save before and after hash to compare+ # Save refs to compare on next run ...
  File.delete(shaFile) if File.exist?(shaFile)  File.delete(shaFile) if File.exist?(shaFile)
- File.write(shaFile, "#{payload['before']} #{payload['after']}")+ File.write(shaFile, "#{payload['ref']}") 
 + 
 + # Check if composer files exists in project 
 + project_id="#{payload['project_id']}" 
 + composerExists = `curl -o /dev/null -s -w \"%{http_code}\" --request GET --header 'PRIVATE-TOKEN: #{auth_token}' '#{gitlab_url}/api/v4/projects/#{project_id}/repository/files/composer%2Ejson/raw?ref=master'`
  
  # Trigger Pipeline  # Trigger Pipeline
-  if payloadHashBefore != payloadHash +  if payloadBefore != payloadCurrent && composerExists == '200' 
-  exec('curl --request POST --form "token=XXXXXXX" --form ref=master https://gitlab.example.org/api/v4/projects/36/trigger/pipeline')+  exec("curl --request POST --form \"token=#{trigger_token}\" --form ref=master #{gitlab_url}/api/v4/projects/#{satis_project_id}/trigger/pipeline")
  end  end
 +
 end end
 </code> </code>
gitlab_satis.1534878004.txt.gz · Last modified: 2018/08/21 21:00 by admin