实际应用过程中,一般多分支流水线的方式用得比较多一些,
master 对应 生成环境
develop 对应 测试环境,
将不同分支的代码构建到不同的环境中
Jenkinsfile 内容见:Jenkins Pipeline 流水线 - 完整构建 Pipeline Script 脚本
DevOps/trunk 专门用来放运维脚本

提交 Jenkins 到 SVN
注意代码要放到 trunk,branches 等 分支中





多个 stage 使用不同代理,会在每一步都进行SVN 的切换

完整 pipeline 脚本
pipeline {
agent { label 'JenkinsAgent' }
parameters {
string defaultValue: '4.2', description: '编译版本号', name: 'BUILD_NUMBER'
}
tools {
maven 'Maven36' //添加 Maven 工具
}
stages {
stage('CheckOut SVN Code') {
steps {
checkout([$class: 'SubversionSCM', additionalCredentials: [], excludedCommitMessages: '', excludedRegions: '', excludedRevprop: '', excludedUsers: '', filterChangelog: false, ignoreDirPropChanges: false, includedRegions: '', locations: [[cancelProcessOnExternalsFail: true, credentialsId: 'c3b4ef0e-b414-4376-8a21-2e08e1c84dfb', depthOption: 'infinity', ignoreExternalsOption: true, local: '.', remote: 'SVN地址']], quietOperation: true, workspaceUpdater: [$class: 'UpdateUpdater']]) //该脚本由流水线语法自动生成
echo 'CheckOut SVN Success'
}
}
// Jenkinsfile 的 地址和代码不在同一个仓库下时,需要用这种嵌套的方式,否则,代码刚拉下来,执行第二个 stage 时就被删除了。
stage('Maven Build') {
steps {
bat 'mvn clean package -Dmaven.test.skip=true'
echo 'Maven Build Success'
}
}
//Docker 在 3.88服务器
stage('Docker Build 、Push Repository') {
steps {
#sourceFiles windows下注意 用 \\ 否则可能上传时导致文件找不到。
sshPublisher(publishers: [sshPublisherDesc(configName: 'DockerPublishSSH', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: 'PipelineDemo', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'target/demojenkins.jar'), sshTransfer(cleanRemote: false, excludes: '', execCommand: '''
cd /opt/jenkins/PipelineDemo
docker build -t registry.cn-shanghai.aliyuncs.com/vipsoft/vipsoft:${BUILD_NUMBER} .
docker login -u hi帐号ID@aliyun.com -p 密码 registry.cn-shanghai.aliyuncs.com
docker push registry.cn-shanghai.aliyuncs.com/vipsoft/vipsoft:${BUILD_NUMBER}''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: 'PipelineDemo', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'Dockerfile')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: true)])
echo 'Docker SUCCESS'
}
}
//K8S 在 3.181服务器
stage('K8S Deployment') {
steps {
script {
def remote = [:]
remote.name = 'K8S Server'
remote.host = '172.16.3.181'
remote.allowAnyHosts = true
withCredentials([usernamePassword(credentialsId: 'K8SMaster', passwordVariable: 'password', usernameVariable: 'username')]) {
remote.user = "${username}" // 变量要使用“”双引号
remote.password = "${password}" //把凭证中的用户名、密码拿出来给 remote参数
}
sshCommand remote: remote, command: "kubectl set image deployment/javademo1 vipsoft=registry.cn-shanghai.aliyuncs.com/vipsoft/vipsoft:${BUILD_NUMBER}"
echo 'K8S Deployment SUCCESS'
}
}
}
}
}


我从Ubuntu服务器上的RVM转移到rbenv。当我使用RVM时,使用bundle没有问题。转移到rbenv后,我在Jenkins的执行shell中收到“找不到命令”错误。我内爆并删除了RVM,并从~/.bashrc'中删除了所有与RVM相关的行。使用后我仍然收到此错误:rvmimploderm~/.rvm-rfrm~/.rvmrcgeminstallbundlerecho'exportPATH="$HOME/.rbenv/bin:$PATH"'>>~/.bashrcecho'eval"$(rbenvinit-)"'>>~/.bashrc.~/.bashrcrbenvversions
前置步骤我们都操作完了,这篇开始介绍jenkins的集成。话不多说,看操作1、登录进入jenkins后会让你选择安装插件,选择第一个默认的就行。安装完成后设置账号密码,重新登录。2、配置JDK和Git都需要执行路径,所以需要先把执行路径找到,先进入服务器的docker容器,2.1JDK的路径root@69eef9ee86cf:/usr/bin#echo$JAVA_HOME/usr/local/openjdk-82.2Git的路径root@69eef9ee86cf:/#whichgit/usr/bin/git3、先配置JDK和Git。点击:ManageJenkins>>GlobalToolCon
我有一个使用Jekyll托管在GitHub上的静态网站。问题是,我真的不需要master分支,因为存储库唯一包含的是网站。这样我就必须gitcheckoutgh-pages,然后gitmergemaster,然后gitpushorigingh-pages。有什么简单的方法可以摆脱gh-pages分支并直接从master推送? 最佳答案 Theproblemis,Idon'treallyneedthemasterbranch,astheonlythingtherepositorycontainsisthewebsite.Isthere
我看到有几十个与svn相关的gem,但是我在其中任何一个上找到的少量文档表明它们是命令行包装器和杂项帮助程序。(svn命令、svn钩子(Hook)等)我在野外看到过执行以下操作的代码:require'svn/core'和SVN.Repos.add(...),但该模块的作者通过apt-get提取了他的svnruby工具。这对我来说不是一个选择,因为我正在开发一个windows/osx工具。Thispage列出了一些项目,但特别是,我需要一些可以访问svn+ssh存储库的东西,而且我没有时间花一半的时间来挖掘文档-十几个项目,试图引导每一个。我在寻找哪个gem?从那里开始,我很乐意挖掘
我有一个简单的类,它在初始化时接受一到八个参数。它将访问器设置为这些访问器以供以后使用。Rubocop正试图以ABC太高为由逮捕我,但我不确定我所做的是否真的有任何问题。在这种情况下,我只是在初始化时禁用检查吗?classFooattr_accessor:one,:two,:three,:fourattr_accessor:five,:six,:seven,:eightdefinitialize(p={})@one=p[:one]ifp[:one].present?#...@eight=p[:eight]ifp[:eight].present?endend关于减小大小,我唯一的想法是做
我正在用Ruby开发一个Jenkins插件。您应该能够配置连接到服务器的每个节点,以便在节点失去与主服务器的连接时将电子邮件发送到指定地址。EmailNodeProperty添加一个字段以输入电子邮件地址:##Saveanemailpropertyforeverynode#classEmailNodeProperty配置节点时,有一个名为email的字段,您可以在其中输入电子邮件地址。我希望在您输入地址时验证此字段。当您保存配置时,将创建一个EmailNodeProperty,您可以从中(没错)访问电子邮件地址。MyComputerListener的offline在节点失去连接时被调用
我目前正在尝试为我的一些cucumber任务运行jenkins构建。我所有的gem都是使用Bundler安装的。Gem存储在vendor文件夹中。但是,当我尝试在执行shell构建步骤中运行bundleinstall--deployment时,出现以下错误:StartedbyuseranonymousBuildinginworkspace/Users/Shared/Jenkins/Home/jobs/cukes/workspace[workspace]$/bin/sh-xe/var/folders/zz/zyxvpxvq6csfxvn_n0000004000001/T/hudson44
我有一个railsrepo的fork在github上,我有一个基于rails-2-3-stable分支的分支。我想根据Rails2.3.10和我的应用程序一起开发一些更改。我们正在使用bundler,并且该应用程序使用SVN进行版本控制。在Rails的github分支中使用我的分支并跨机器共享它的最干净的方法是什么?一种方法是这样的:howdoIinstalledgerails?这可行,但感觉不够干净,因为我们必须在存储库更改时手动更新销售版本,并且我们必须将git存储库检入svn。我已经在Gemfile中尝试了这个的变体:gem'rails','2.3.10',:git=>'git:
我是JenkinsCI的新手。我在我的远程Jenkins中安装RVM,当我在shell下执行时。#!/bin/bash-xsource~/.bashrcrvmuse1.9.3@rails-3.2.3我收到以下错误。+source/var/lib/jenkins/.bashrc++PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/var/lib/jenkins/.rvm/bin:/var/lib/jenkins/.rvm/bin+rvmuse1.9.3@rails-3.2.3RVMisnotafunction,s
如何在IDEA上使用Git克隆项目和分支、提交项目克隆项目在启动IDEA窗口中选择GetfromVCS克隆项目启动页面获取远程仓库的地址下图第一个选项是直接复制下来的远程仓库地址第二个GitHub是可以登录自己的账号获取到自己的远程仓库的第三个是企业GitHub账号登录点击Clon就会克隆文件到指定的文件夹下载完成会自动打开对应的目录文件进入IDEA,相同的在本地文件也会存有新建分支在克隆打开的项目中,右下角点击main主分支就可以新建分支了输入分支名称创建分支之后项目也会从main主分支切换到创建的分支中创建的分支目前是在文件中创建的,远程还没有分支分支推送到远程仓库推送方式二两个方法打开的