2016-03-30 3 views
2

Я использую плагин github-organization для управления заданиями jenkins из github, но я обнаружил, что Jenkins API не сообщает об этих сборках.Как программно запускать определенную сборку jenkins, управляемую github-организацией?

Фактически API перечисляет всю организацию как отдельную работу.

Как я могу построить конкретный репозиторий и ветвь с помощью API?

Чтобы было ясно, я ищу какой-то заводной код, чтобы добавить внутри Jenkinsfile

#!groovy 

stage 'test-downstream' 
node { 
    def job = build job: 'some-job' 
} 

Теперь, проблема заключается в том, что Дженкинс видит всю организацию как единое задание!

Если я использую API Jenkins для получения заданий, он вернет только организацию, а не все репозитории и задания внутри нее.

Я подозреваю, что это связано с тем, что этот плагин был реализован, и я полагаю, что мне нужно предоставить дополнительные параметры, чтобы указать, какой репозиторий и ветвь я хочу построить внутри организации ... создание организации не делает много смысла.

+1

Вы можете уточнить, вы используете это [GitHub-организации-фальцевально-плагин] (https://github.com/jenkinsci/github-organization-folder-plugin) и хотите, чтобы вручную запустить один из тех, рабочие места, созданные Jenkinsfile? Кроме того, вы пробовали, если он работает, чтобы вызвать его через [url] (https://wiki.jenkins-ci.org/display/JENKINS/Remote+access+API) с именем задания из уже созданного задания? Тогда вам просто нужно узнать о соглашении о назначении работы с этим материалом Jenkinsfile Pipeline. –

+0

К сожалению, я пытался использовать 'acme/job/foo/job/master' в качестве имени задания, но получил' No параметризованное задание с именем acme/job/foo/job/master found', которое говорит мне, что, вероятно, оно не раскрывает их как реальные рабочие места. – sorin

+1

Проверьте, что отображается на 'http: // : /api/xml' –

ответ

4

Вопрос нечеткий, но я предполагаю, что «API» в этом контексте означает, что API REST запускает сборку. Вы можете использовать, например,

curl -X POST -u user:apitoken http://jenkins/job/yourorg/job/yourrepo/job/master/build 
+0

Хотя это не совсем идеально, это может сработать, если я не смогу найти отличный. Тем не менее я ненавижу иметь дело с проблемой токена API отсюда, когда выполнение Jenkinsfile должно было иметь доступ к Jenkins api. – sorin

+0

Тогда, возможно, вы задаете нечто совершенно иное, и это просто дубликат: http://stackoverflow.com/questions/36306883/how-can-i-trigger-another-job-from-a-jenkins-pipeline- jenkinsfile –

0

Следующее задание запуска кода с помощью шага построения системы Groovy. Обратите внимание, что система groovy всегда запускается на сервере, поэтому передача информации с предыдущих шагов сборки может быть сложной задачей.

import jenkins.model.* 
import hudson.model.* 
import java.util.concurrent.* 

def run_job(job_name) { 
    def currentBuild = Thread.currentThread().executable 
    def jenkins = jenkins.model.Jenkins.getInstance(); 

    def job = jenkins.getItemByFullName(job_name); 
    if (job == null) 
     throw new hudson.AbortException("Cannot find job:" + job_name); 

    def params =[ 
    new StringParameterValue('PARAMETER1', "invoke 1 param1"), 
    new StringParameterValue('PARAMETER2', ",invoke 1 param2") 
    ] 

    def paramsAction = new ParametersAction(params) 
    def cause = new hudson.model.Cause.UpstreamCause(currentBuild) 
    def causeAction = new hudson.model.CauseAction(cause)  

    def future_build = job.scheduleBuild2(0,causeAction,paramsAction); 
    def running_build = future_build.waitForStart() 
    return running_build 
} 

run_job("runner1") 
Смежные вопросы