mirror of
https://github.com/YunoHost-Apps/gitlab-runner_ynh.git
synced 2024-09-03 19:15:58 +02:00
commit
4d250de727
6 changed files with 306 additions and 30 deletions
49
actions.json
Normal file
49
actions.json
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"id": "register",
|
||||||
|
"name": "Register",
|
||||||
|
"command": "/bin/bash scripts/actions/register",
|
||||||
|
"user": "root",
|
||||||
|
"accepted_return_codes": [
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"description": {
|
||||||
|
"en": "Add this runner to a new repo/GitLab instance.",
|
||||||
|
"fr": "Ajoute ce runner à un nouveau·elle dépôt/instance GitLab."
|
||||||
|
},
|
||||||
|
"arguments": [
|
||||||
|
{
|
||||||
|
"name": "gitlab_url",
|
||||||
|
"type": "string",
|
||||||
|
"ask": {
|
||||||
|
"en": "Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com)",
|
||||||
|
"fr": "Veuillez entrer l'URL du coordinateur gitlab-ci (par ex. https://gitlab.com)"
|
||||||
|
},
|
||||||
|
"example": "https://gitlab.com/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "token",
|
||||||
|
"type": "password",
|
||||||
|
"ask": {
|
||||||
|
"en": "Please enter the gitlab-ci token for this runner",
|
||||||
|
"fr": "Veuillez entrer le jeton gitlab-ci pour ce runner"
|
||||||
|
},
|
||||||
|
"help": {
|
||||||
|
"en": "This token can be retrived at this location: Gitlab Project->Settings->Runner",
|
||||||
|
"fr": "Ce token peut être récupéré à cet emplacement : Projet Gitlab->Settings->Runner"
|
||||||
|
},
|
||||||
|
"example": "xxx"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "docker_image",
|
||||||
|
"type": "string",
|
||||||
|
"ask": {
|
||||||
|
"en": "Please enter the Docker image",
|
||||||
|
"fr": "Veuillez entrer l'image du Docker"
|
||||||
|
},
|
||||||
|
"example": "ruby:2.1",
|
||||||
|
"default": "alpine:latest"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
|
@ -6,7 +6,7 @@
|
||||||
"en": "GitLab Runner is a continuous integration tool to use with a GitLab instance (YNH or not).",
|
"en": "GitLab Runner is a continuous integration tool to use with a GitLab instance (YNH or not).",
|
||||||
"fr": "GitLab Runner est un outil d'intégration continue à utiliser avec une instance GitLab (YNH ou non)."
|
"fr": "GitLab Runner est un outil d'intégration continue à utiliser avec une instance GitLab (YNH ou non)."
|
||||||
},
|
},
|
||||||
"version": "11.9.0~ynh1",
|
"version": "11.9.0~ynh2",
|
||||||
"url": "https://gitlab.com/gitlab-org/gitlab-runner",
|
"url": "https://gitlab.com/gitlab-org/gitlab-runner",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"maintainer": {
|
"maintainer": {
|
||||||
|
@ -47,10 +47,10 @@
|
||||||
"name": "docker_image",
|
"name": "docker_image",
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"ask": {
|
"ask": {
|
||||||
"en": "Please enter the Docker image (eg. ruby:2.1)",
|
"en": "Please enter the Docker image",
|
||||||
"fr": "Veuillez entrer l'image du Docker (ex. ruby:2.1)"
|
"fr": "Veuillez entrer l'image du Docker"
|
||||||
},
|
},
|
||||||
"example": "alpine:latest",
|
"example": "ruby:2.1",
|
||||||
"default": "alpine:latest"
|
"default": "alpine:latest"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -11,13 +11,87 @@ pkg_dependencies="ca-certificates git curl tar docker-ce"
|
||||||
# PERSONAL HELPERS
|
# PERSONAL HELPERS
|
||||||
#=================================================
|
#=================================================
|
||||||
|
|
||||||
|
# Restore a previous backup if the action process failed
|
||||||
|
#
|
||||||
|
# usage:
|
||||||
|
# ynh_backup_before_action
|
||||||
|
# ynh_clean_setup () {
|
||||||
|
# ynh_restore_actionbackup
|
||||||
|
# }
|
||||||
|
# ynh_abort_if_errors
|
||||||
|
ynh_restore_actionbackup () {
|
||||||
|
echo "Action failed." >&2
|
||||||
|
local app_bck=${app//_/-} # Replace all '_' by '-'
|
||||||
|
|
||||||
|
NO_BACKUP_ACTION=${NO_BACKUP_ACTION:-0}
|
||||||
|
|
||||||
|
if [ $NO_BACKUP_ACTION -eq "0" ]
|
||||||
|
then
|
||||||
|
# Check if an existing backup can be found before removing and restoring the application.
|
||||||
|
if sudo yunohost backup list | grep -q $app_bck-pre-action$backup_number
|
||||||
|
then
|
||||||
|
# Remove the application then restore it
|
||||||
|
sudo yunohost app remove $app
|
||||||
|
# Restore the backup
|
||||||
|
sudo yunohost backup restore $app_bck-pre-action$backup_number --apps $app --force --debug
|
||||||
|
ynh_die --message="The app was restored to the way it was before the failed action."
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "\$NO_BACKUP_ACTION is set, that means there's no backup to restore. You have to fix this action by yourself !" >&2
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Make a backup in case of failed action
|
||||||
|
#
|
||||||
|
# usage:
|
||||||
|
# ynh_backup_before_action
|
||||||
|
# ynh_clean_setup () {
|
||||||
|
# ynh_restore_actionbackup
|
||||||
|
# }
|
||||||
|
# ynh_abort_if_errors
|
||||||
|
ynh_backup_before_action () {
|
||||||
|
if [ ! -e "/etc/yunohost/apps/$app/scripts/backup" ]
|
||||||
|
then
|
||||||
|
echo "This app doesn't have any backup script." >&2
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
backup_number=1
|
||||||
|
local old_backup_number=2
|
||||||
|
local app_bck=${app//_/-} # Replace all '_' by '-'
|
||||||
|
NO_BACKUP_ACTION=${NO_BACKUP_ACTION:-0}
|
||||||
|
|
||||||
|
if [ $NO_BACKUP_ACTION -eq "0" ]
|
||||||
|
then
|
||||||
|
# Check if a backup already exists with the prefix 1
|
||||||
|
if sudo yunohost backup list | grep -q $app_bck-pre-action1
|
||||||
|
then
|
||||||
|
# Prefix becomes 2 to preserve the previous backup
|
||||||
|
backup_number=2
|
||||||
|
old_backup_number=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Create backup
|
||||||
|
sudo BACKUP_CORE_ONLY=1 yunohost backup create --apps $app --name $app_bck-pre-action$backup_number --debug
|
||||||
|
if [ "$?" -eq 0 ]
|
||||||
|
then
|
||||||
|
# If the backup succeeded, remove the previous backup
|
||||||
|
if sudo yunohost backup list | grep -q $app_bck-pre-action$old_backup_number
|
||||||
|
then
|
||||||
|
# Remove the previous backup only if it exists
|
||||||
|
sudo yunohost backup delete $app_bck-pre-action$old_backup_number > /dev/null
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
ynh_die --message="Backup failed, the action process was aborted."
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "\$NO_BACKUP_ACTION is set, backup will be avoided. Be careful, this action is going to be operated without a security backup"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# EXPERIMENTAL HELPERS
|
# EXPERIMENTAL HELPERS
|
||||||
#=================================================
|
#=================================================
|
||||||
|
|
||||||
|
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Pin a repository.
|
# Pin a repository.
|
||||||
#
|
#
|
||||||
# usage: ynh_pin_repo --package=packages --pin=pin_filter --priority=priority_value [--name=name] [--append]
|
# usage: ynh_pin_repo --package=packages --pin=pin_filter --priority=priority_value [--name=name] [--append]
|
||||||
|
|
114
scripts/actions/register
Normal file
114
scripts/actions/register
Normal file
|
@ -0,0 +1,114 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# GENERIC STARTING
|
||||||
|
#=================================================
|
||||||
|
# IMPORT GENERIC HELPERS
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
source scripts/_common.sh
|
||||||
|
source /usr/share/yunohost/helpers
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# RETRIEVE ARGUMENTS
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
new_gitlab_url=${YNH_ACTION_GITLAB_URL}
|
||||||
|
new_token=${YNH_ACTION_TOKEN}
|
||||||
|
new_docker_image=${YNH_ACTION_DOCKER_IMAGE}
|
||||||
|
|
||||||
|
app=${YNH_APP_INSTANCE_NAME:-$YNH_APP_ID}
|
||||||
|
|
||||||
|
gitlab_url=$(ynh_app_setting_get $app gitlab_url)
|
||||||
|
token=$(ynh_app_setting_get $app token)
|
||||||
|
docker_image=$(ynh_app_setting_get $app docker_image)
|
||||||
|
executor=$(ynh_app_setting_get $app executor)
|
||||||
|
architecture=$(ynh_app_setting_get $app architecture)
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# CHECK IF ARGUMENTS ARE CORRECT
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
# Adding a comma at the end
|
||||||
|
if [ ${new_gitlab_url: -1} != "," ]; then
|
||||||
|
new_gitlab_url=${new_gitlab_url},
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Adding a comma at the end
|
||||||
|
if [ ${new_token: -1} != "," ]; then
|
||||||
|
new_token=${new_token},
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Adding a comma at the end
|
||||||
|
if [ ${new_docker_image: -1} != "," ]; then
|
||||||
|
new_docker_image=${new_docker_image},
|
||||||
|
fi
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# BACKUP BEFORE ACTION THEN ACTIVE TRAP
|
||||||
|
#=================================================
|
||||||
|
ynh_print_info "Backing up the app before action (may take a while)..."
|
||||||
|
|
||||||
|
# Backup the current version of the app
|
||||||
|
ynh_backup_before_action
|
||||||
|
ynh_clean_setup () {
|
||||||
|
# restore it if the action fails
|
||||||
|
ynh_restore_actionbackup
|
||||||
|
}
|
||||||
|
# Exit if an error occurs during the execution of the script
|
||||||
|
ynh_abort_if_errors
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# CHECK IF AN ACTION HAS TO BE DONE
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# SPECIFIC ACTION
|
||||||
|
#=================================================
|
||||||
|
# REGISTER THE RUNNER
|
||||||
|
#=================================================
|
||||||
|
ynh_print_info "Register Gitlab Runner..."
|
||||||
|
|
||||||
|
# Can be registered several time, to do this give a list of gitlab_url, token and docker_image separated by a comma.
|
||||||
|
split_char=","
|
||||||
|
|
||||||
|
nb_to_register=$(echo "${new_gitlab_url}" | awk -F"${split_char}" '{print NF-1}')
|
||||||
|
|
||||||
|
for i in $(seq $nb_to_register)
|
||||||
|
do
|
||||||
|
url=$(echo $new_gitlab_url | cut -d$split_char -f$i)
|
||||||
|
tok=$(echo $new_token | cut -d$split_char -f$i)
|
||||||
|
docker_img=$(echo $new_docker_image | cut -d$split_char -f$i)
|
||||||
|
|
||||||
|
# Register the runner
|
||||||
|
ynh_exec_warn_less $app register \
|
||||||
|
--non-interactive \
|
||||||
|
--url "$url" \
|
||||||
|
--registration-token "$tok" \
|
||||||
|
--executor "$executor" \
|
||||||
|
--docker-image "$docker_img" \
|
||||||
|
--description "Yunohost runner" \
|
||||||
|
--tag-list "$executor,$architecture" \
|
||||||
|
--run-untagged \
|
||||||
|
--locked="false"
|
||||||
|
|
||||||
|
gitlab_url=${gitlab_url}${url},
|
||||||
|
token=${token}${tok},
|
||||||
|
docker_image=${docker_image}${docker_img},
|
||||||
|
done
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# STORE SETTINGS
|
||||||
|
#=================================================
|
||||||
|
ynh_print_info "Storing settings..."
|
||||||
|
|
||||||
|
ynh_app_setting_set $app gitlab_url $gitlab_url
|
||||||
|
ynh_app_setting_set $app token $token
|
||||||
|
ynh_app_setting_set $app docker_image $docker_image
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# END OF SCRIPT
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
ynh_print_info "Action of $app completed"
|
|
@ -53,6 +53,21 @@ fi
|
||||||
# By default, the runner will use docker to run your builds. PR are welcomes to implement more executors
|
# By default, the runner will use docker to run your builds. PR are welcomes to implement more executors
|
||||||
executor="docker"
|
executor="docker"
|
||||||
|
|
||||||
|
# Adding a comma at the end
|
||||||
|
if [ ${gitlab_url: -1} != "," ]; then
|
||||||
|
gitlab_url=${gitlab_url},
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Adding a comma at the end
|
||||||
|
if [ ${token: -1} != "," ]; then
|
||||||
|
token=${token},
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Adding a comma at the end
|
||||||
|
if [ ${docker_image: -1} != "," ]; then
|
||||||
|
docker_image=${docker_image},
|
||||||
|
fi
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# STORE SETTINGS FROM MANIFEST
|
# STORE SETTINGS FROM MANIFEST
|
||||||
#=================================================
|
#=================================================
|
||||||
|
@ -116,17 +131,29 @@ dpkg -i $tempdir/$gitlab_runner_filename
|
||||||
#=================================================
|
#=================================================
|
||||||
ynh_print_info "Configuring Gitlab Runner..."
|
ynh_print_info "Configuring Gitlab Runner..."
|
||||||
|
|
||||||
|
# Can be registered several time, to do this give a list of gitlab_url, token and docker_image separated by a comma.
|
||||||
|
split_char=","
|
||||||
|
|
||||||
|
nb_to_register=$(echo "${gitlab_url}" | awk -F"${split_char}" '{print NF-1}')
|
||||||
|
|
||||||
|
for i in $(seq $nb_to_register)
|
||||||
|
do
|
||||||
|
url=$(echo $gitlab_url | cut -d$split_char -f$i)
|
||||||
|
tok=$(echo $token | cut -d$split_char -f$i)
|
||||||
|
docker_img=$(echo $docker_image | cut -d$split_char -f$i)
|
||||||
|
|
||||||
# Register the runner
|
# Register the runner
|
||||||
ynh_exec_warn_less $app register \
|
ynh_exec_warn_less $app register \
|
||||||
--non-interactive \
|
--non-interactive \
|
||||||
--url "$gitlab_url" \
|
--url "$url" \
|
||||||
--registration-token "$token" \
|
--registration-token "$tok" \
|
||||||
--executor "$executor" \
|
--executor "$executor" \
|
||||||
--docker-image "$docker_image" \
|
--docker-image "$docker_img" \
|
||||||
--description "Yunohost runner" \
|
--description "Yunohost runner" \
|
||||||
--tag-list "$executor,$architecture" \
|
--tag-list "$executor,$architecture" \
|
||||||
--run-untagged \
|
--run-untagged \
|
||||||
--locked="false" \
|
--locked="false"
|
||||||
|
done
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# STORE THE CONFIG FILE CHECKSUM
|
# STORE THE CONFIG FILE CHECKSUM
|
||||||
|
|
|
@ -95,17 +95,29 @@ dpkg -i $tempdir/$gitlab_runner_filename
|
||||||
#=================================================
|
#=================================================
|
||||||
ynh_print_info "Configuring Gitlab Runner..."
|
ynh_print_info "Configuring Gitlab Runner..."
|
||||||
|
|
||||||
|
# Can be registered several time, to do this give a list of gitlab_url, token and docker_image separated by a comma.
|
||||||
|
split_char=","
|
||||||
|
|
||||||
|
nb_to_register=$(echo "${gitlab_url}" | awk -F"${split_char}" '{print NF-1}')
|
||||||
|
|
||||||
|
for i in $(seq $nb_to_register)
|
||||||
|
do
|
||||||
|
url=$(echo $gitlab_url | cut -d$split_char -f$i)
|
||||||
|
tok=$(echo $token | cut -d$split_char -f$i)
|
||||||
|
docker_img=$(echo $docker_image | cut -d$split_char -f$i)
|
||||||
|
|
||||||
# Register the runner
|
# Register the runner
|
||||||
ynh_exec_warn_less $app register \
|
ynh_exec_warn_less $app register \
|
||||||
--non-interactive \
|
--non-interactive \
|
||||||
--url "$gitlab_url" \
|
--url "$url" \
|
||||||
--registration-token "$token" \
|
--registration-token "$tok" \
|
||||||
--executor "$executor" \
|
--executor "$executor" \
|
||||||
--docker-image "$docker_image" \
|
--docker-image "$docker_img" \
|
||||||
--description "Yunohost runner" \
|
--description "Yunohost runner" \
|
||||||
--tag-list "$executor,$architecture" \
|
--tag-list "$executor,$architecture" \
|
||||||
--run-untagged \
|
--run-untagged \
|
||||||
--locked="false" \
|
--locked="false"
|
||||||
|
done
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# ADVERTISE SERVICE IN ADMIN PANEL
|
# ADVERTISE SERVICE IN ADMIN PANEL
|
||||||
|
|
Loading…
Add table
Reference in a new issue