This is mainly a wrapper for 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.
Idea
archive: true
and *.tar-Files for Tags will be saved in ./dist/
Folder. Branches still point to Git Repo.Features
basic-auth
is set)build-dir
to configure target folderoptions
is passed to satis-gitlab
as –option
arguments
is passed to satis-gitlab
as argument–ignore
to exclude certain repos
The image ochorocho/gitlab-pages-satis provides gitlab-pages-satis
command which reads the environment variable GITLAB_SATIS_CONFIG
first. Fallback is ./config.yml
or the configured file e.g. gitlab-pages-satis /path/to/config.yml
stages: - deploy pages: stage: deploy image: ochorocho/gitlab-pages-satis:latest script: - mkdir satis-build - gitlab-pages-satis - mv satis-build public artifacts: paths: - public/ only: - master
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 …
In Gitlab go to Project → Settings → CI / CD → Variables and create variable named $GITLAB_SATIS_CONFIG
and add your config to the “input variable value” field.
Add a config file to your repository. By default the script is looking for config.yml
file. If you want to change that simply call the script this way gitlab-pages-satis /path/to/custom_config.yml
arguments: gitlab-url: "https://gitlab.example.org" gitlab-token: "GITLAB_TOKEN" options: ignore: "(^namespace_name|^namespace\/project)" homepage: "https://satis.example.org" output: "satis.json" include-if-has-file: '.satisinclude' template: '/path/to/satis-template.example.json' archive: true basic-auth: auth-name: "Satis Repository" auth-file: "/path/to/.htpasswd" # Absolute path required username: "admin" password: "password" build-dir: "satis-build"
Make sure Gitlab Pages is activated for your project.
Trigger the Pipeline, that's it!
Use this template and set configuration (options → template) if you want to modify …
{ "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" }
Want to trigger your satis projects pipeline each time a Tag is created/deleted ?
/opt/gitlab/embedded/service/gitlab-rails/plugins/gitlab_pages_satis.rb
chmod +x gitlab_pages_satis.rb
)sudo gitlab-rake plugins:validate
to make sure its running#!/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 'tmpdir' payload = JSON.parse(STDIN.read) # Only run this code in case we are dealing with tag_push event if payload['event_name'] == 'tag_push' temp = Dir.tmpdir() shaFile = "#{temp}/gitlab-trigger.sha" # Get refs to compare payloadCurrent = "#{payload['ref']}" payloadBefore = File.read(shaFile) if File.exist?(shaFile) # Save refs to compare on next run ... File.delete(shaFile) if File.exist?(shaFile) 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 if payloadBefore != payloadCurrent && composerExists == '200' exec("curl --request POST --form \"token=#{trigger_token}\" --form ref=master #{gitlab_url}/api/v4/projects/#{satis_project_id}/trigger/pipeline") end end