|
|
第1行: |
第1行: |
− | =Jenkins Pipeline 简介= | + | =站内源码 = |
− | Jenkins pipeline 是 Jenkins 2.0 的精髓,,是帮助 Jenkins 实现 CI 到 CD 转变的重要角色。
| + | [[代码发布]] |
| | | |
− | 简单来说,就是一套运行于 Jenkins 上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂发布流程。
| + | =jenkins 使用Maven构建Java应用程序= |
| + | [https://www.jenkins.io/zh/doc/tutorials/build-a-java-app-with-maven/ 使用Maven构建Java应用程序 ] |
| | | |
− | Pipeline 的实现方式是一套 Groovy DSL,任何发布流程都可以表述为一段 Groovy 脚本,并且 Jenkins 支持从代码库直接读取脚本,从而实现了 Pipeline as Code 的理念。
| + | =java+maven项目+tapd+jenkins+gitlab+sonarqube+docker实现自动化持续部署= |
| + | [https://juejin.cn/post/6955025879688806430#heading-66 java+maven项目+tapd+jenkins+gitlab+sonarqube+docker实现自动化持续部署(超详细) ] |
| | | |
− | [https://www.cnblogs.com/itech/p/5633948.html jenkins2 pipeline入门 ]
| + | =download.app= |
| | | |
− | 官方文档
| + | jenkins project name prod-tg-websi |
− | 流水线可以通过以下任一方式来创建:
| |
| | | |
− | 通过 Blue Ocean - 在 Blue Ocean 中设置一个流水线项目后,Blue Ocean UI 会帮你编写流水线的 Jenkinsfile 文件并提交到源代码管理系统。
| + | =* conf project = |
− | | |
− | 通过经典 UI - 你可以通过经典 UI 在 Jenkins 中直接输入基本的流水线。
| |
− | | |
− | 在源码管理系统中定义 - 你可以手动编写一个 Jenkinsfile 文件,然后提交到项目的源代码管理仓库中。[3]
| |
− | | |
− | 使用两种方式定义流水线的语法是相同的。尽管 Jenkins 支持在经典 UI 中直接进入流水线,但通常认为最好的实践是在 Jenkinsfile 文件中定义流水线,Jenkins 之后会直接从源代码管理系统加载。
| |
− | | |
− | =Jenkins Pipeline 支持两种语法= | |
| <pre> | | <pre> |
| + | 新建 自由风格的软件项目 -> |
| + | geneal 丢弃旧的构建 |
| + | 源码管理 用git http的话就直接用上你的gitlabt用户和密码 |
| + | 构建 这里填写上你的 over SSH 服务器 一般在 系统管理--系统设置里面配置并起别名 |
| + | 一般hostname 填写IP username Remote Directory / 其它的看着办 |
| | | |
| | | |
− | My-pipeline-job01 ->流水线语法 我好像没怎么用
| + | 构建 要填写的 |
− | | |
− | Jenkins Pipeline 支持两种语法,一种 Declarative Pipeline(声明式),一种 ScriptedPipeline(脚本式)。
| |
− | | |
− | 安装pipeline相关插件 全部要显示为Success pending是不行的
| |
− | | |
− | | |
− | 声明式的 Pipeline 限制用户使用严格的预选定义的结构,是一种声明
| |
− | 式的编程模型,对比脚本式的 Pipeline 学习起来更加简单;
| |
− | | |
− | 脚本式的 Pipeline 限制比较少,结构和语法的限制由 Groovy 本身决定,是一种命令式的编程模型。
| |
− | 所以我们学习使用声明式的方式编写 jenkinsfile。
| |
− | 一般来说 jenkinsfile 会被放在代码库的根目录下。
| |
− | | |
− | 当然也可以在 Web 页面定义。
| |
| | | |
− | 下面是两种不同方式的 jenkinsfile 示例
| + | Source files ** |
| + | Remove prefix 不填写 |
| + | Remote directory 你远程服务器的web目录 |
| </pre> | | </pre> |
− | ==Jenkinsfile (声明式)==
| |
| | | |
| + | =* 配置权限= |
| <pre> | | <pre> |
| + | #这样还视图自动归类功能 不错不错 记住前面不要有空格 |
| + | Manage and Assign Roles --> Manage Roles --> 在他有的项目组里面 Frontend_h5 添加 prod-tg-websit| --> |
| | | |
− | pipeline {
| |
− | agent any
| |
− | stages {
| |
− | stage('Build') {
| |
− | steps {
| |
− | echo 'Building..'
| |
− | }
| |
− | }
| |
− | stage('Test') {
| |
− | steps {
| |
− | echo 'Testing..'
| |
− | }
| |
− | }
| |
− | stage('Deploy') {
| |
− | steps {
| |
− | echo 'Deploying....'
| |
− | }
| |
− | }
| |
− | }
| |
− | }
| |
| | | |
− | 前面我们说过,声明式的Pipeline有严格的预定义格式结构,有固定的格式,外层必须是pipeline{},
| + | Manage and Assign Roles --> Assign Roles |
− | 紧接着是 agent 就是节点node ,agent也是固定的,pipeline紧跟着进来 一定是agent 参考上面的格式 后面的any是任何节点还是其中一个节点,指定某一个节点是自己指定,通过标签自己来指定节点
| |
− | | |
− | 指示 Jenkins 分配一个执行器和工作空间来执行下面的 Pipeline,
| |
− | | |
− | stages和steps是申明式Jenkinsfile必须的,stages是一个个阶段,所有的stage必须要定义在stages里,
| |
− | | |
− | stages(‘’) 括号里面是名称,这个阶段是什么名称,stages这个名称不能重复,同一个stage名称只能有一个
| |
− | | |
− | 每一个stage下的 step 要定义在一个 steps 里,stages里面包含了step,具体的执行步骤都写在step里面 ,一行一个,可以写多行
| |
− | </pre>
| |
| | | |
− | ==Jenkinsfile(脚本式)==
| + | Item roles -->User/group to add 填写项目名 prod-tg-website</pre> |
− | <pre>
| |
− | | |
− | node {
| |
− | stage('Build') {
| |
− | //
| |
− | }
| |
− | stage('Test') {
| |
− | //
| |
− | }
| |
− | stage('Deploy') {
| |
− | //
| |
− | }
| |
− | }
| |
− | | |
− | 在脚本式 jenkinsfile 里,你可以定义一个 node 或者多个 node 块,然后在 node 块里
| |
− | 定义你的 stage,在 stage 里定义你的 step 即可
| |
− | </pre> | |
| | | |
− | =进阶advance= | + | =前端 nodejs jenkins之自动打包构建nodejs应用= |
| | | |
− | [https://www.jenkins.io/zh/doc/book/pipeline/getting-started/ .jenkins.io/zh/doc/book 流水线入门] | + | [https://www.cnblogs.com/vipzhou/p/7890016.html jenkins学习之自动打包构建nodejs应用 ] |
| | | |
− | [https://www.jenkins.io/zh/doc/book/pipeline/getting-started/ jenkins.io 流水线入门] | + | [https://www.huaweicloud.com/articles/4e4228c181b8e610999badfa00ff7e4e.html Jenkins打包NodeJS项目---入门篇] |
| | | |
− | [https://zhuanlan.zhihu.com/p/143552791 Jenkins 声明式流水线的语法错误检查] | + | [https://my.oschina.net/mobinchao/blog/871703 Jenkins打包NodeJS项目---入门篇] |
| | | |
− | [https://www.cnblogs.com/mingerlcm/p/12806076.html Pipeline 语法生成器] | + | [https://blog.csdn.net/weixin_43931358/article/details/103013031 jenkins系列之使用yarn构建前端项目] |
| | | |
− | [https://www.jenkins.io/zh/doc/book/pipeline/syntax/ 流水线语法]
| |
| | | |
| + | [https://blog.51cto.com/wzlinux/2491394 docker 中运行的 jenkins 使用 npm 构建 Node.js 应用] |
| | | |
− | Jenkins2 下载与启动
| + | [https://juejin.cn/post/6971630514742493197 jenkins+docker+gogs前端自动化部署 ] |
− | jenkins2 插件安装
| |
− | jenkins2 hellopipeline
| |
− | jenkins2 pipeline介绍
| |
− | jenkins2 javahelloworld
| |
− | jenkins2 groovy入门
| |
− | jenkins2 pipeline入门
| |
− | jenkins2 pipeline高级
| |
− | jenkins2 Jenkinsfile
| |
− | jenkins2 multibranch
| |
− | jenkins2 Jenkinsfile和load
| |
− | jenkins2 groovy脚本参考
| |
− | jenkins2 pipeline实例
| |
− | jenkins2 pipeline插件的10个最佳实践
| |
− | jenkins2 pipeline 语法快速参考
| |
| | | |
− | https://www.cnblogs.com/itech/category/245402.html?page=3
| + | =后端= |
| + | ==php jenkins== |
| + | [[Jenkins实现PHP持续集成部署]] |
| | | |
| + | [[category:ops]] [[category:devops]] |
| | | |
− | [https://www.cnblogs.com/itech/p/5646219.html jenkins2 pipeline高级 ] | + | == Java springboot== |
| + | [https://zhuanlan.zhihu.com/p/354677279 SpringBoot项目打包+shell脚本部署实践] |
| | | |
− | =pipeline for example= | + | == Java tomcat== |
− | | |
− | | |
− | 其实就是有点像share library
| |
− | 流水线 -->定义
| |
− | <gallery>
| |
− | Jul012021Z1.png
| |
− | </gallery>
| |
− | | |
− | 然后有个叫jenkinsfile
| |
− | | |
− | [https://blog.51cto.com/u_13760351/2527263 Jenkins--pipline 流水线部署Java后端项目]
| |
− | | |
− | [https://blog.51cto.com/u_13760351/2526052 本地java代码上传Gitlab仓库]
| |
| | | |
| + | 和xk的一样喽 |
| [https://blog.51cto.com/u_13760351/2382103 Jenkins自动部署发布Java代码(完整教程] | | [https://blog.51cto.com/u_13760351/2382103 Jenkins自动部署发布Java代码(完整教程] |
− | ==java sprint boot ==
| |
− | Jenkins Pipeline 部署 SpringBoot 应用
| |
− |
| |
− | ===java===
| |
− | <pre>修改/etc/profile文件,添加JAVA_HOME
| |
− |
| |
− | vi /etc/profile
| |
− | 在文件的最后面,加上以下代码
| |
− | export JAVA_HOME=/java/jdk1.8.0_171
| |
− | export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
| |
− | export PATH=$JAVA_HOME/bin:$PATH
| |
− |
| |
− | #me on kali xps
| |
− | export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
| |
− | export M2_HOME=/usr/local/maven3
| |
− | export PATH=$PATH:$JAVA_HOME/bin:$M2_HOME/bin
| |
− | </pre>
| |
− |
| |
− | ===maven ===
| |
− | <pre>wget -c https://mirrors.bfsu.edu.cn/apache/maven/maven-3/3.8.1/binaries/apache-maven-3.8.1-bin.tar.gz
| |
− | tar zxf apache-maven-3.8.1-bin.tar.gz
| |
− | mv apache-maven-3.1.1 /usr/local/maven3
| |
− |
| |
− | vi /etc/profile然后还需要 配置环境变量。 #在适当的位置添加
| |
− |
| |
− | export M2_HOME=/usr/local/maven3
| |
− | export PATH=$PATH:$JAVA_HOME/bin:$M2_HOME/bin
| |
− |
| |
− | 保存退出后运行下面的命令使配置生效,或者重启服务器生效。
| |
− | source /etc/profile
| |
− |
| |
− | 验证版本
| |
− | mvn -v
| |
− |
| |
− | 出现maven版本即成功
| |
− |
| |
− | 阿里云源
| |
− |
| |
− | <mirrors>
| |
− | <mirror>
| |
− | <id>alimaven</id>
| |
− | <name>aliyun maven</name>
| |
− | <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
| |
− | <mirrorOf>central</mirrorOf>
| |
− | </mirror>
| |
− | </mirrors>
| |
− | </pre>
| |
− |
| |
− | ===安装Jenkins部署SpringBoot应用===
| |
− | jenkins 安装过程省略
| |
− |
| |
− | 登陆之后进入Manage Jenkins -> Global Tool Configuration 中进行配置Maven,Git,JDK
| |
− | 可能不同环境有小许要修改
| |
− |
| |
− | <gallery>Jul012021j1.png</gallery>
| |
− |
| |
− | ===新建Pipeline 项目===
| |
− | 新建Item --> 名就叫 01_Eureka 再选中pipeline 最后确定 -->
| |
− |
| |
− | 配置Git仓库:
| |
− | http://mygitlab.com/root/01_eureka.git
| |
− |
| |
− | <pre>
| |
− | tree .
| |
− | .
| |
− | └── jenkins_files
| |
− | └── 01_eureka
| |
− |
| |
− | 1 directory, 1 file
| |
− |
| |
− | #脚本式
| |
− | cat jenkins_files/01_eureka
| |
− |
| |
− | node {
| |
− | def mvnHome
| |
− | def workspace = pwd()
| |
− | def project_name = 'eureka-server-1.0.0.jar'
| |
− | def project_log = 'eureka-server-1.0.0.log'
| |
− | def project_home = 'app-centre/eureka-server'
| |
− | def vm_ip = 'xxx.xxx.xxx.xxx'
| |
− | def vm_port = '22'
| |
− | def vm_user = 'root'
| |
− | //代码获取
| |
− | stage('Preparation') { // for display purposes
| |
− | git branch: 'master',
| |
− | url:' https://gitee.com/didispace/didi-eureka-server.git'
| |
− | }
| |
− | //构建
| |
− | stage('Build') {
| |
− | // Run the maven build
| |
− | if (isUnix()) {
| |
− | sh "/usr/local/maven3/bin/mvn -Dmaven.test.skip=true clean package"
| |
− |
| |
− | } else {
| |
− | bat(/mvn -Dmaven.test.skip=true clean package/)
| |
− | }
| |
− | }
| |
− |
| |
− | //移动
| |
− | stage('MV') {
| |
− | sh "mv ${project_home}/target/${project_name} /usr/local/src/"
| |
− | }
| |
− |
| |
− | //上传到服务器
| |
− | stage('Upload VM') {
| |
− | sh "scp -P ${vm_port} /usr/local/src/${project_name} ${vm_user}@${vm_port}:/usr/local/src/bk"
| |
− | //sh "ssh -p ${vm_port} ${vm_user}@${vm_ip} 'nohup java -jar /usr/local/src/${project_name} >> ${project_log} '"
| |
− | }
| |
− |
| |
− |
| |
− | //运行JAR包
| |
− | stage('Run') {
| |
− | //sh "if (ps -ef| grep java|grep ${project_name})then (ps -ef| grep java|grep ${project_name}| awk '{print \$2}'|xargs kill -9) fi"
| |
− | sh "ssh -p ${vm_port} ${vm_user}@${vm_ip} 'nohup java -jar /usr/local/src/${project_name} >${project_log} 2>&1 &'"
| |
− | }
| |
− | }
| |
− | </pre>
| |
− |
| |
− | 流水线选项卡
| |
− | 定义 : pipeline script from SCM
| |
− | SCM repository URl http://mygitlab.com/root/01_eureka.git
| |
− |
| |
− | Credentials 你的用户和密码
| |
− |
| |
− | 指定分支(为空时代表any) 我这里为 */main
| |
− |
| |
− | 脚本路径 jenkins_files/01_eureka
| |
− |
| |
− | ====see also springboot ====
| |
− | [https://www.cnblogs.com/SimpleWu/p/13262966.html Jenkins Pipeline 部署 SpringBoot 应用 ]
| |
− |
| |
− | [https://juejin.cn/post/6844903955600769031 最优雅的Docker+Jenkins pipeline部署Spring boot项目 ]
| |
− | === vue ===
| |
− |
| |
− | [https://juejin.cn/post/6844903955634323469 最优雅的Docker+Jenkins pipeline部署vue项目,前端项目都可参考 ]
| |
− |
| |
− | =docker=
| |
− |
| |
− | [https://www.jenkins.io/doc/book/pipeline/docker/ Using Docker with Pipeline,官方文档]
| |
− | =是Blue Ocean=
| |
− | https://www.jenkins.io/zh/doc/book/blueocean/
| |
− |
| |
− | Blue Ocean 重新思考Jenkins的用户体验,从头开始设计Jenkins Pipeline, 但仍然与自由式作业兼容,Blue Ocean减少了混乱而且进一步明确了团队中每个成员 Blue Ocean 的主要特性包括:
| |
− |
| |
− | 持续交付(CD)Pipeline的 复杂可视化 ,可以让您快速直观地理解管道状态。
| |
− | Pipeline 编辑器 - 引导用户通过直观的、可视化的过程来创建Pipeline,从而使Pipeline的创建变得平易近人。
| |
− | 个性化 以适应团队中每个成员不同角色的需求。
| |
− | 在需要干预和/或出现问题时 精确定位 。 Blue Ocean 展示 Pipeline中需要关注的地方, 简化异常处理,提高生产力
| |
− | 本地集成分支和合并请求, 在与GitHub 和 Bitbucket中的其他人协作编码时实现最大程度的开发人员生产力。
| |
− |
| |
− | 简言之:简化复杂可视化,提供更个性直观的界面,可以精准定位构建失败的位置
| |
− |
| |
− | [https://www.cnblogs.com/hellxz/p/pipeline_maven_build.html Jenkins教程(四)安装BlueOcean与Maven构建 ]
| |
− |
| |
− | =see also=
| |
− | [https://www.cnblogs.com/mingerlcm/p/12790884.html Jenkins Pipeline介绍]
| |
− |
| |
− | [https://www.cnblogs.com/mingerlcm/p/12727253.html jenkins从头到尾 目录]
| |
− |
| |
− | [https://www.cnblogs.com/mingerlcm/p/12799362.html Jenkins Pipeline示例]
| |
− |
| |
− | [https://www.cnblogs.com/mingerlcm/p/12799493.html 使用 pipeline 实现 monitor 仓库代码的发布 ]
| |
− |
| |
− | [https://www.cnblogs.com/itech/p/12747748.html Jenkins pipeline jenkinsfile的两种写作方式声明式和脚本式 ]
| |
− |
| |
− | [https://objcoding.com/2019/02/16/docker-jenkins-pipeline/ 基于Jenkins Pipeline自动化部署知道个过程而已]
| |
− |
| |
− |
| |
− | [https://www.jianshu.com/p/bcd42b4f9885 Jenkins + Pipeline 自动化部署项目]
| |
− |
| |
− | [https://www.jianshu.com/p/daf32c908ff9 Jenkins + Pipeline 构建流水线发布]
| |
− |
| |
− | [https://www.cnblogs.com/itech/p/12747740.html Jenkins pipeline之声明式的jenkinsfile ]
| |
− | [[category:ops]] [[category:devops]]
| |