proxy-nginx/deploy-this/update-from-git.jenkinsfile

89 lines
3.7 KiB
Plaintext
Executable File

def git_remote = "https://git.arti24.eu/gitea"
def projects = [
"proxy-nginx",
"arti24",
"angular-services",
"arti-angular-app"
]
def programs = "/_sd_/_programs_"
def git_take(projects, git_remote) {
withCredentials([usernamePassword(
credentialsId: '9e8daaa4-8c14-41ae-947b-65ba47965dfe',
usernameVariable: 'GIT_USER',
passwordVariable: 'GIT_PASS'
)]) {
// Upewnij się, że katalog bazowy istnieje
sh "mkdir -p ${programs}"
dir(programs) {
projects.each { project ->
if (fileExists(project)) {
dir(project) {
sh """
set -e
echo "=== Updating ${project} ==="
git config --global --add safe.directory \$(pwd)
git remote set-url origin ${git_remote}/${project}.git
# Wstrzykuj poświadczenia tylko dla tego fetch/resetu
git config http.${git_remote}/${project}.git.extraHeader "Authorization: Basic \$(printf '%s:%s' '${GIT_USER}' '${GIT_PASS}' | base64)"
# Wykryj domyślny branch z origin/HEAD; fallback: main -> master
DEFAULT_BRANCH=\$(git remote show origin 2>/dev/null | sed -n '/HEAD branch/s/.*: //p')
[ -z "\$DEFAULT_BRANCH" ] && DEFAULT_BRANCH=main
git fetch --prune origin
# Spróbuj ustawić się na domyślny; jeśli nie istnieje, spróbuj main/master
if git rev-parse --verify origin/\$DEFAULT_BRANCH >/dev/null 2>&1; then
git checkout -B \$DEFAULT_BRANCH origin/\$DEFAULT_BRANCH
elif git rev-parse --verify origin/main >/dev/null 2>&1; then
git checkout -B main origin/main
elif git rev-parse --verify origin/master >/dev/null 2>&1; then
git checkout -B master origin/master
else
echo "⚠️ Brak znanych gałęzi (main/master). Repo może być puste."
fi
# Wyczyść nagłówek z tokenem, żeby nie zostawał globalnie
git config --unset-all http.${git_remote}/${project}.git.extraHeader || true
"""
}
} else {
sh """
set -e
echo "=== Cloning ${project} (last year only) ==="
# Użyj URL bezpośrednio z poświadczeniami do klona (Jenkins zamaskuje hasło w logach)
git clone --shallow-since="1 year ago" https://${GIT_USER}:${GIT_PASS}@git.arti24.eu/gitea/${project}.git ${project}
"""
dir(project) {
sh """
git config --global --add safe.directory \$(pwd)
git --no-pager log -n 1 --pretty=format:'%h %ad %s' --date=short || echo "Repo empty"
"""
}
}
// log ostatniego commita (jeśli repo nie jest puste)
dir(project) {
sh "git --no-pager log -n 1 --pretty=format:'%h %ad %s' --date=short || true"
}
}
}
}
}
pipeline {
agent any
stages {
stage('Update from git') {
steps {
script {
git_take(projects, git_remote)
}
}
}
}
}