当前位置: 首页 > 知识库问答 >
问题:

从管道创建Jenkins管道构建

公冶元青
2023-03-14

我正在尝试从管道中自动创建Jenkins管道构建。

我有一个管道,它创建一个比特桶存储库并向其提交一些代码,包括一个Jenkinsfile。

我需要向此管道添加另一个步骤,然后为其创建管道生成,这将运行 Jenkinsfile 中的步骤。

我认为Jobs DSL应该能够处理这一点,但我找到的文档非常稀少,我仍然不完全确定是否有可能或如何做到这一点。

任何帮助都将不胜感激。我想生成的Pipeline构建只需要有一个指向存储库的链接并被告知在那里运行Jenkinsfile?

共有2个答案

堵乐
2023-03-14

通过使用这个python库jenins-job-builder,你可以轻松地从另一个管道或任何其他远程位置创建预期的管道或自由样式的作业。

例:

步骤-1

python3 -m venv .venv
source .venv/bin/activate
pip install --user jenkins-job-builder

步骤-2

完成上述操作后,创建两个文件,一个名为config.ini,另一个名为job.yml。请注意,文件名没有严格的规则。这可以由你决定。

配置。包含can的ini文件如下所示

[job_builder]
allow_duplicates = False
keep_descriptions = False
ignore_cache = True
recursive = False
update = all
[jenkins]
password = jenkins-password
query_plugins_info = False
url = http://jenkins-url.net
user = jenkins-username

如果要创建管道作业,则 job.yml 文件可能如下所示

- job:
      name: pipeline01
      display-name: 'pipeline01'
      description: 'Do not edit this job through the web!'
      project-type: pipeline
      dsl: |
        node(){
          stage('hello') {
            sh 'echo "Hellow World!"'
          }
        }

步骤-3

在所有上述之后。调用下面的命令

jenkins-jobs --conf config.ini update job.yml

注意-jenkins-作业命令只能在您遵循步骤-1的情况下可用

贡可人
2023-03-14

是的,作业DSL是你的用例所需要的。

看看这个和这个来帮助你开始。

编辑

pipeline {
agent {
        label 'slave'
    }
    stages{
        stage('stage'){
            steps {
                // some other steps

                jobDsl scriptText: '''pipelineJob(\'new-job\') {

                    def repo = \'https://xxxxx@bitbucket.org/xxxx/dummyrepo.git\'

                    triggers {
                        scm(\'H/5 * * * *\')
                    }

                    definition {
                        cpsScm {
                            scm {
                                git {
                                    remote { 
                                        url(repo) 
                                        credentials('bitbucket-jenkins-access')
                                    }
                                    branches(\'master\')
                                    scriptPath(\'Jenkinsfile\')
                                    extensions { } 
                                }
                            }
                        }
                    }
                }'''                    
            }           
        }
    }
}

文档 - https://jenkinsci.github.io/job-dsl-plugin/#path/pipelineJob-scm-git

 类似资料:
  • 根据Andrew Bayer的说法,您不应该向其他人注入声明性管道。将来可能会有人支持它,但可能不会。 我目前正在尝试在管道中启动一个管道,但我想知道我需要做什么才能使它工作。jenkins网页上的文档说明,如果新作业或管道与第一个作业或管道位于同一文件夹中,则可以从直接名称或绝对路径调用它。我已经尝试了所有不同的方法,目前我正在尝试一个文件的绝对路径,我刚刚检查过它一秒钟前存在,但它说它不存在。

  • 如果作业使用构建流(包括重复作业)运行,构建管道插件是否仍然正确显示作业序列? 以下是构建流程的伪代码: 包将从源代码控制中提取代码,编译它,并将其存储为工件 部署将从上游Package作业复制工件,然后将其复制到目标参数中提供的URL 集成测试将针对参数中提供的URL运行一套集成测试。 即使部署作业重复,构建管道插件是否将此管道显示为4个步骤?

  • 我有一个azure构建管道和发布管道。我在发布构建工件中面临问题。在构建管道中,发布构建工件被正确地创建在默认的“drop”目录中。 当我在发布管道中下载该工件时,发布文件正在服务抛出错误的中下载 您没有查看此目录或页面的权限。 这意味着我的发布工件没有在“home/wwwroot”目录中下载。 构建管道 释放管道 我错过了什么?

  • 我有一个多项目分级建筑在当地工作。有一个父级文件build.gradle设置。gradle文件将项目分配给它们各自的分级生成文件: 错误仍然相同,build.gradle文件(父文件)无法识别依赖项任务查看调试语句,找到并识别子生成分级文件:使用生成文件'/var/../LoadRemote/RemoteLoad_build.gradle'计算项目':LoadRemote'。对加载构建文件显示相同

  • 问题内容: 我正在使用詹金斯管道项目。在脚本中,我想以动态方式编写 并行 块,因为节点数可以更改。例如,从此: 像这样 但是这种方式行不通,Groovy / Jenkins对这种语法不满意。有人可以建议一种更好的方法吗? 问题答案: 您可以像先定义节点图一样,然后将其执行为。

  • 我是Docker和Jenkins的新手,我正在尝试创建一个Jenkins管道来构建Docker的形象。我在尝试构建时遇到了问题,并不断收到此错误: /var/jenkins_home/workspace/Docker-Pipeline@tmp/耐用-a11b32f8/脚本。sh:第1行:docker:未找到命令 我已经在虚拟机上安装了ubuntu 我正在做和他完全一样的事情,但总是失败。