Как очистить конвейер перед проверкой репозитория в Jenkinsfile
Я хочу сделать clean before checkout
операция, описанная в документации плагина Jenkins git:
Очистить перед проверкой Очищайте рабочую область перед каждой проверкой, удаляя все неотслеживаемые файлы и каталоги, включая те, которые указаны в.gitignore....
Но как добавить эту опцию к этапу оформления заказа по умолчанию, который выполняется как первый шаг?
Я считаю, что это должна быть опция, расширенная плагином git, который можно включить в options
блок Jenkinsfile, как описано в документах:
Директива options позволяет настраивать параметры, специфичные для конвейера, из самого конвейера. Pipeline предоставляет несколько из этих опций, например buildDiscarder, но они также могут быть предоставлены плагинами...
Но как узнать, какие опции и их названия предлагает этот плагин? Не нашел в документации, также могу ошибаться, чтоclean before checkout
должен быть помещен в options
блок Jenkinsfile.
Пожалуйста помоги.
2 ответа
Как уже упоминалось в комментариях, лучше всего использовать skipDefaultCheckout()
(Источник) в параметрах конвейера, чтобы не проверять репозиторий, если конвейер запускается.
skipDefaultCheckout
По умолчанию в директиве агента пропускать извлечение кода из системы управления версиями.
Чтобы получить репозиторий вручную, вы можете использовать checkout scm
( Источник)
pipeline {
agent any
options {
skipDefaultCheckout()
}
stages {
stage('Example') {
steps {
// Cleanup before starting the stage
// deleteDir() / cleanWs() or your own way of cleaning up
// Checkout the repository
checkout scm
// do whatever you like
}
}
}
}
В одной из своих работ я использовал это:
def gitCheckoutExtensions = []
if (cleanWorkspace) {
println '>>> workspace will be cleaned and retrieved all codes again..!'
gitCheckoutExtensions.push([$class: 'CleanBeforeCheckout'])
}
gitCheckoutExtensions.push([$class: 'LocalBranch', localBranch: srcBranch])
checkout([
$class: 'GitSCM',
branches: [[name: "*/${srcBranch}"]],
doGenerateSubmoduleConfigurations: false,
extensions: gitCheckoutExtensions,
submoduleCfg: [],
userRemoteConfigs: [
[
credentialsId: credId,
url: url
]
]
])
Более длинная форма стадии:
@Library('gui_multi_repo@master')_
pipeline {
agent {
docker {
label "DockerAgent"
image "node:14.21.3"
}
}
parameters {
string(trim: true, name: 'REPO_URL', defaultValue: "http://user.name@server_domain_or_ipAddres", description: 'Repo adresi')
string(trim: true, name: 'REPO_CRED_ID', defaultValue: RepoCredId, description: 'GIT Repo bağlantısı olacaksa CRED_ID kullanılacak')
string(trim: true, name: 'REPO_SOURCE_BRANCH_NAME', defaultValue: 'refs/remotes/origin/developer', description: 'Kodları hangi BRANCH üstünden çekeceğini belirtiyoruz')
string(trim: true, name: 'REPO_TARGET_BRANCH_NAME', defaultValue: 'refs/remotes/origin/master', description: 'Push ile kodun gönderileceği branch')
}
stages {
stage("Git İşlemleri") {
steps {
script {
def credId="${params.REPO_CRED_ID}"
def repoUrl="${params.REPO_URL}"
def srcBranch="${params.REPO_SOURCE_BRANCH_NAME}"
def targetBranch="${params.REPO_TARGET_BRANCH_NAME}"
def tagName="cem13"
def tagMessage="naber13"
echo "credId: $credId"
echo "repoUrl: $repoUrl"
echo "srcBranch: $srcBranch"
echo "targetBranch: $targetBranch"
echo "tagName: $tagName"
echo "tagMessage: $tagMessage"
/**
* CredId ile tanımlanan Git kimlik bilgilerini alır
* Artık GIT_USERNAME ve GIT_PASSWORD değişkenleri içinde, verilen credId'nin
* kullanıcı adı ve şifresi olacak ve tüm çıktılarda *** ile gizlenecek
*/
checkout([$class: 'GitSCM',
branches: [[name: "${srcBranch}"]],
extensions: [
[$class: 'CleanBeforeCheckout']
],
userRemoteConfigs: [[
// credId veya gitCredentials.id ile tanımlanan kullanıcı bilgilerinin id değeri verilir
credentialsId: "${credId}",
url: "${repoUrl}"
]]
])
withCredentials([usernamePassword(credentialsId: "${credId}", passwordVariable: 'GIT_PASSWORD', usernameVariable: 'GIT_USERNAME')]) {
def gitUrlWithCredentials = repoUrl.replaceFirst(/(http[s]:\/\/).*@(.*)/,"\$1${GIT_USERNAME}:${GIT_PASSWORD}@\$2")
echo "gitUrlWithCredentials: ${gitUrlWithCredentials}"
sh """
#!/bin/sh -e
git config --global credential.helper cache
git config --global push.default simple
# Kullanıcı e-posta adresini ayarlar
git config --global user.email "${GIT_USERNAME}@domain.com"
# Kullanıcı adını ayarlar
git config --global user.name "${GIT_USERNAME.replace('.', ' '}"
# SSL Doğrulama yapmaz
git config --global http.sslverify 'false'
# Git URL'sinde parolayı kullanarak güncellenmiş URL'yi oluşturun
git tag -a ${tagName} -m '${tagMessage}'
git push ${gitUrlWithCredentials} ${tagName}
git checkout ${targetBranch}
# sonra birleştireceğimiz 'kaynak dalını' isteyelim
git merge ${srcBranch}
git push ${gitUrlWithCredentials} ${targetBranch}
"""
}
}
}
}
}
post {
success{
echo "** Süreç başarıyla tamamlandı"
}
failure {
echo "** Süreç hatalı tamamlandı"
}
cleanup{
echo "** Süreç tamamlandı cleanup zamanı"
}
always {
echo "** Süreç günahıyla sevabıyla tamamlandı"
}
}
}