2015-06-29 69 views
16

Normal serbest bir projede, SCM eklentisini serbest bırakmak istediğim Git repo'yu işaret edecek şekilde yapıyorum ve bana izin veren "Anket SCM" seçeneğini etkinleştirdim. Stash webhobu, bu repoda bir değişiklik olduğunda Jenkins'e söylemek için yapılandırmak. Bu şekilde, iş, bir değişiklik repo'ya itildiğinde tetiklenebilir.SCM yoklaması Jenkins Workflow eklentisi ile nasıl çalışır

Ancak, serbest bir proje yerine bir iş akışı kullandığımda, oluşturmam gereken kodun SCM'si, groovy iş akışı komut dosyasında programlı olarak belirtilir; bu, Stash webhook'unu dinlemediği anlamına gelir. Bunun yerine, doğrudan iş akışında yapılandırılan SCM, oluşturmaya/yayınlamaya çalıştığım kod tabanından farklı olan yüce betiğin kendisinin SCM'sidir. Bu nedenle, tetikleyicinin buna dayalı olmasını istemiyorum.

node('docker_builder') { 
    git url: serviceRepo 
    releaseVersion = getVersion() 
    pipelineSpec = getPipelineSpec() 
    sh "./gradlew clean build pushDockerImage" 
} 

İş akışı eklentisini kullanırken SCM yoklaması nasıl elde edileceğine dair herhangi bir fikir var mı?

cevap

30

Bu soruyu birçok araştırma ve deneyle çözdüm. Bu belge beni doğru yolda buldu: https://github.com/jenkinsci/workflow-scm-step-plugin/blob/master/README.md. Şöyle ki:

Yoklama (birinde veya daha fazlasında değişiklik, yeni bir yapı tetikleyecek) birden SCMS genelinde desteklenen ve yine iş akışının son yapı kullanılan SCMS göre yapılır "

.

Bu, SCM yoklamanın hala bir Jenkins iş akışıyla desteklendiği anlamına gelir, ancak normal serbest bir projeden farklı olarak, SCM değişikliklerini dinlemeye başlamadan önce bunu manuel olarak çalıştırmanız gerekir.Bu, SCM'lerin Groovy kodunda tanımlandığından anlamlıdır; Bir kez çalışana kadar bilinmemektedir

Bunun bir zor unsuru iş akışınızda birçok SCM'yi tanımlayın. Örneğin, üç tane var: hizmetin kendisi, bir dağıtım senaryosu ve Groovy iş akışı DSL'i. Varsayılan olarak, bu üç SCM'den herhangi birine yapılan değişiklikler, "SCM anketi" seçeneğinin bir yapıyı tetiklemesine neden olur ve bu da istenmeyebilir. Neyse ki, Groovy kodundaki "git" adımında "anket: false" seçeneğini ayarlamak, bu repo üzerinde yoklamayı devre dışı bırakacaktır. Groovy DSL'nizi bir SCM'den okuyorsanız, o zaman, Jenkins UI'daki "ek davranışlar" ı tıklayarak ve "taahhüt bildirimleri üzerine bir yapıyı tetiklemeyin" ifadesini ekleyerek bu repo üzerinde yoklamayı devre dışı bırakabilirsiniz.

Diğer bir zor öğe, Stash web hook eklentisinin varsayılan olarak, Jenkins'e isabet ettiği RESTful URL'deki SHA1 karma kodunu içermesidir. Ne yazık ki, Jenkins tanımlamış olabileceğiniz çoklu SCM'lerden herhangi birini çekmeye çalıştığında aynı taahhüt kodunu kullanma hatasını yapar. Hash kodu sadece bir SCM ile ilgilidir, bu yüzden kırılır. Stash web hook eklentisinde "SHA1 Hash Code atlayın" ayarını yaparak bunu aşabilirsiniz. Daha sonra Jenkins, SCM'lerinizin her birinde oluşturduğunuz şube için en son işlemi kullanacaktır.

+0

Stash eklentisi hakkında bilgi sahibi değilsiniz, ancak aynı işlemlerle ilgili uyarıları muhtemelen [GitHub eklentisi] için geçerlidir (https://issues.jenkins-ci.org/browse/JENKINS-27136). –

+0

Ebeveyn işinde yoklama için herhangi bir özel yapılandırmanız var mı (orada hangi tetikleyicileri etkinleştirdiniz)? Yoklama çalışırken görünmüyor ve oluşturulmuş iş üzerinde yapılandırmayı (jenkinsfile'dan) görüntülemeye gittiğimde hiçbir tetikleyici etkin değil. – Woland

İlgili konular