Jenkins - 单个项目问题的多个作业
Jenkins - Multiple jobs for a single Project Issue
我对 Jenkins 比较陌生(使用 2.32)。所以请原谅我的无知。
在我当前的设置中,我有 2 个针对单个项目的自由式作业 - 一个指向生产分支 (/master),另一个指向开发分支 (/dev ). Bitbucket 配置为在更改时调用(webhook)Jenkins。
一旦构建了开发并通过了所有单元测试,它就会被部署到开发服务器。最终,所有开发更改都通过拉取请求推送到 Master。 Master 分支中的更改会触发 Master 作业并将工件部署到产品中。
我觉得这个设置不正确,希望各位专家就此提出建议。有两份工作让我不舒服。如果我想要分阶段发布怎么办?我需要另一份自由式的工作。没有多大意义。
如何通过一份工作完成这项工作?你们是如何做到这一点的?使用管道?任何指针将不胜感激。
TIA。
你说得对,你可以通过 Jenkins Pipeline
更好地管理它
您可以做的是:
1) 从dev分支签出代码,放到工作区的一个目录下。
2) 从该目录编译和部署。
3) 添加一个手动步骤以批准从 master 分支部署。
4) 重复步骤 1 和 2。
示例代码如下所示:
node {
// Get code from git repo
checkout changelog: false, poll: false, scm: [$class: 'GitSCM', branches: [[name: "origin/dev"]], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'test-dev-dir']], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '<jenkins-github-credential-id>', url: 'https://github.com/test']]]
dir('test-dir') {
// Do your stuff
}
// stage concurrency: 1, name: 'approve'
// input id: 'master-deploy', message: 'Deploy from master?', ok: 'Deploy'
// Get code from git repo
checkout changelog: false, poll: false, scm: [$class: 'GitSCM', branches: [[name: "origin/master"]], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'test-master-dir']], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '<jenkins-github-credential-id>', url: 'https://github.com/test']]]
dir('test-master-dir') {
// Preferbably create a tag for future hotfix maybe?
// Do your stuff
}
}
我对 Jenkins 比较陌生(使用 2.32)。所以请原谅我的无知。
在我当前的设置中,我有 2 个针对单个项目的自由式作业 - 一个指向生产分支 (/master),另一个指向开发分支 (/dev ). Bitbucket 配置为在更改时调用(webhook)Jenkins。
一旦构建了开发并通过了所有单元测试,它就会被部署到开发服务器。最终,所有开发更改都通过拉取请求推送到 Master。 Master 分支中的更改会触发 Master 作业并将工件部署到产品中。
我觉得这个设置不正确,希望各位专家就此提出建议。有两份工作让我不舒服。如果我想要分阶段发布怎么办?我需要另一份自由式的工作。没有多大意义。
如何通过一份工作完成这项工作?你们是如何做到这一点的?使用管道?任何指针将不胜感激。
TIA。
你说得对,你可以通过 Jenkins Pipeline
更好地管理它您可以做的是:
1) 从dev分支签出代码,放到工作区的一个目录下。
2) 从该目录编译和部署。
3) 添加一个手动步骤以批准从 master 分支部署。
4) 重复步骤 1 和 2。
示例代码如下所示:
node {
// Get code from git repo
checkout changelog: false, poll: false, scm: [$class: 'GitSCM', branches: [[name: "origin/dev"]], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'test-dev-dir']], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '<jenkins-github-credential-id>', url: 'https://github.com/test']]]
dir('test-dir') {
// Do your stuff
}
// stage concurrency: 1, name: 'approve'
// input id: 'master-deploy', message: 'Deploy from master?', ok: 'Deploy'
// Get code from git repo
checkout changelog: false, poll: false, scm: [$class: 'GitSCM', branches: [[name: "origin/master"]], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'test-master-dir']], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '<jenkins-github-credential-id>', url: 'https://github.com/test']]]
dir('test-master-dir') {
// Preferbably create a tag for future hotfix maybe?
// Do your stuff
}
}