草庐IT

Jenkins+Pipeline流水线项目(1)

晴箜万里 2023-03-28 原文

说明

Jenkins pipeline 是一套插件,支持将连续输送管道实施和整合到Jenkins。Pipeline提供了一组可扩展的工具,用于通过管道DSL为代码创建简单到复杂的传送流水线。他目前支持jenkins 2.x以上版本。pipeline是由groovy语言编写

1.安装jenkins

可以查看:https://www.cnblogs.com/jxxiaocao/p/16191140.html

设置仓库和jenkins的关联(因为我使用的是gitee所以就介绍gitee,其他的都差不多)

gitee和jenkins关联:https://www.cnblogs.com/jxxiaocao/p/12668993.html

其他插件:

用户相关信息:https://www.cnblogs.com/jxxiaocao/p/16203126.html

2.安装pipeline插件

3.创建job

3.1参数化构建过程

  设置git参数

3.2流水线

 pipeline声明式代码:

pipeline {    
 agent any //环境maven、jdk等 stages {
//项目构建 stage('拉取代码') { //拉取代码 steps { //具体实施步骤 echo '拉取代码开始'
//下面 生成流水脚本 生成的 语句
//  extensions: [[$class: 'SparseCheckoutPaths', sparseCheckoutPaths: [[path: 'common']]]] 拉取指定目录 checkout([
$
class: 'GitSCM', branches: [[name: '*']],
extensions: [
[$class: 'CleanCheckout', deleteUntrackedNestedRepositories: true]
],
userRemoteConfigs: [[credentialsId: '需要获取', url: 'git地址']]
]) echo
"拉取的TAG:${TAGNAME}" echo '拉取代码结束' } } stage('编译打包') { // 编译打包 steps { //具体实施步骤 echo 'build project' // 打包命令 } } stage('部署上线') { // 部署上线 steps { //具体实施步骤 echo 'publish project' // 部署命令 } } } post { success { //企微通知 TAGNAME 是上面 git参数 那的 名称 sh 'sh /var/lib/jenkins/pipeline/wechat_send.sh token "环境" "${JOB_NAME}" "${TAGNAME}" "${BUILD_DISPLAY_NAME}" "${BUILD_USER}"' echo 'whole pipeline successful' } failure { echo 'FAILED (global)' } } }

pipeline脚本式代码:

node {
      //全局变量(外部可以使用,比如shell中使用)
      env.ENVI = "test"   //定义环境
      env.WECHAT_TOKEN = "key"
      env.ERRI = "false"
      env.WORKSPACE = "/www/jenkins/workspace/${JOB_NAME}"

      //局部变量(在shel中不能使用)
      def GIT_URL = "git地址"

     try{
          stage('拉取代码') {     //拉取代码
             echo '拉取代码开始'
             checkout([
                 $class: 'GitSCM', branches: [[name: '${TAGNAME}']],
                 extensions: [[$class: 'CleanCheckout', deleteUntrackedNestedRepositories: true]],
                 userRemoteConfigs: [[credentialsId: '4e89640d-3576-4043-a4e2-47d', url: "${GIT_URL}"]]
             ])
             echo "拉取的TAG:${TAGNAME}"
             echo '拉取代码结束'
          }
          stage('编译打包') {        // 编译打包
             echo '编译打包开始'
             echo '编译打包结束'
          }
          stage('部署上线') {
             echo '部署上线开始'
// 这里用到 ansible 同步代码(Jenkins+Pipeline+Ansible 自动化部署) sh
'ansible-playbook -e "host=wb workspace=${WORKSPACE} item=${JOB_NAME} exclude=.git*" /etc/ansible/variables.yml' echo '部署上线结束' } env.RESULT = currentBuild.currentResult }catch(err){ echo "编译失败,错误原因如下:${err} " env.ERRI = "true" env.RESULT = "FAILURE:\n ${err}" }finally{ } //获取构建用时 env.DURATION_STRING = currentBuild.durationString //企微通知 sh 'sh /var/lib/jenkins/pipeline/wechat_send.sh "${WECHAT_TOKEN}" \ "${ENVI}" \ "${JOB_NAME}" \ "${TAGNAME}" \ "${BUILD_DISPLAY_NAME}" \ "${DURATION_STRING}" \ "${RESULT}" \ "${BUILD_USER}"' //判断是否失败,如果是强制显示失败图标 if(env.ERRI == "true"){ script { error "${ERRI}" } } }

ps:Pipeline流水线的优化方案

Pipeline语法:

比如获取credentialsId

 

 

 

 

点击  生成流水脚本 

 

 

 

 把生成的 checkout(.......) 放到 上面

 3.3构建

结果:

 

wechat_send.sh 脚本(通知)

#!/bin/sh
  
CHAT_WEBHOOK_KEY="$1"
ENV="$2"
ITEM="$3"
TAG="$4"
BUILD_DISPLAY_NAME="$5"
MILLIS_TIME="$6"
STATE="$7"
OPERATOR="$8"


CHAT_WEBHOOK_URL='https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key'
CHAT_CONTENT_TYPE='Content-Type: application/json'


curl "${CHAT_WEBHOOK_URL}=${CHAT_WEBHOOK_KEY}" \
   -H "${CHAT_CONTENT_TYPE}" \
   -d '
   {
     "msgtype": "markdown",
     "markdown": {
        "content": "<font color=\"warning\">版本发布通知</font>\n
         >发布环境:<font color=\"info\">'"${ENV}"'</font>
         >项目名称:<font color=\"info\">'"${ITEM}"'</font>
         >发布Tag:<font color=\"info\">'"${TAG}"'</font>
         >构建名称:<font color=\"comment\">'"${BUILD_DISPLAY_NAME}"'</font>
         >构建用时:<font color=\"comment\">'"${MILLIS_TIME}"'</font>
         >构建状态:<font color=\"warning\">'"${STATE}"'</font>
         >执行人:<font color=\"comment\">'"${OPERATOR}"'</font>"
     }
   }

 ps:企微通知需要安装 Qy Wechat Notification 插件,当然也可以用 钉钉 通知就不介绍了都差不多

通知

成功:

 失败:

有关Jenkins+Pipeline流水线项目(1)的更多相关文章

  1. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  2. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  3. ruby-on-rails - 新 Rails 项目 : 'bundle install' can't install rails in gemfile - 2

    我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="

  4. Ruby 从大范围中获取第 n 个项目 - 2

    假设我有这个范围:("aaaaa".."zzzzz")如何在不事先/每次生成整个项目的情况下从范围中获取第N个项目? 最佳答案 一种快速简便的方法:("aaaaa".."zzzzz").first(42).last#==>"aaabp"如果出于某种原因你不得不一遍又一遍地这样做,或者如果你需要避免为前N个元素构建中间数组,你可以这样写:moduleEnumerabledefskip(n)returnto_enum:skip,nunlessblock_given?each_with_indexdo|item,index|yieldit

  5. ruby-on-rails - rbenv:从 RVM 移动到 rbenv 后,在 Jenkins 执行 shell 中找不到命令 - 2

    我从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

  6. jenkins部署1--jenkins+gitee持续集成 - 2

    前置步骤我们都操作完了,这篇开始介绍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

  7. ruby - 如何在 Ruby 字符串中插入项目符号字符? - 2

    我正在尝试创建一个带有项目符号字符的Ruby1.9.3字符串。str="•"+"helloworld"但是,当我输入它时,我收到有关非ASCII字符的语法错误。我该怎么做? 最佳答案 你可以把Unicode字符放在那里。str="\u2022"+"helloworld" 关于ruby-如何在Ruby字符串中插入项目符号字符?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1195

  8. ruby - 在 Rails 项目中测试本地版本的 gem - 2

    我的Rails站点使用了一个确实不是很好的gem。每次我需要做一些新的事情时,我最终不得不花费与向实际Rails项目添加代码一样多的时间来为gem添加功能。但我不介意,我将我的Gemfile设置为指向我的gem的GitHub分支(我尝试提交PR,但维护者似乎已经下台)。问题是我真的没有找到一种合理的方法来测试我添加到gem的新东西。在railsc中测试它会特别好,但我能想到的唯一方法是a)更改~/.rvm/gems/.../foo。rb,这看起来不对或者b)升级版本,推送到Github,然后运行​​bundleup,这除了耗时之外显然是一场灾难,因为我不确定我所做的promise是否正

  9. ruby - 合并 nanoc 中的项目 - 2

    我一直在尝试使用nanoc用于生成静态网站。我需要组织一个复杂的排列页面,我想让我的内容保持干燥。包含或合并的概念在nanoc系统中如何运作?我已阅读文档,但似乎找不到我想要的内容。例如:我如何获取两个部分内容项并将它们合并到一个新的内容项中。在staticmatic您可以在您的页面中执行以下操作。=partial('partials/shared/navigation')类似的约定在nanoc中如何运作? 最佳答案 这里是nanoc的作者。在nanoc中,部分是布局。因此,您可以拥有layouts/partials/shared/

  10. Ruby 和指南针路径与 yeoman 项目 - 2

    我安装了ruby​​、yeoman,当我运行我的项目时,出现了这个错误:Warning:Running"compass:dist"(compass)taskWarning:YouneedtohaveRubyandCompassinstalledthistasktowork.Moreinfo:https://github.com/gruUse--forcetocontinue.Use--forcetocontinue.我有进入可变session目标的路径,但它不起作用。谁能帮帮我? 最佳答案 我必须运行这个:geminstallcom

随机推荐