Jenkins Tutorial

什么是Jenkins

Jenkins是一个自动化平台,它允许你使用pipelines去部署应用。它也可以自动化其他任务。

  • BUILD
  • TEST
  • DEPLOYMENT

Jenkins 架构

首先,你拥有一个Master Server,它控制pipelines和安排Build到你的Agent上;
其次,你有Agents,能够运行在Build在它们的工作台上。

构建(Build)类型

Freestyle Build

  • 创建一个Build最简单的方法
  • 感觉就像Shell脚本一样

Pipelines

  • 使用Jenkins files
  • 使用 satge 分解构建的组件

安装Jenkins

这里使用Docker进行安装,也可以使用其他方式安装
https://www.jenkins.io/download/

$ docker pull jenkins/jenkins
$ docker run -p 8080:8080 -p 50000:50000 -v jenkins_home:/var/jenkins_home --name jenkins-master --network jenkins jenkins/jenkins

访问http://localhost:8080/ 进入容器复制密码并粘贴
image.png
安装推荐的插件,创建管理员用户
image.png
配置
image.png

创建一个简单的Freestyle Job

  • 点击新建Item

image.png

  • 选择FreeStyle,点击创建image.png

  • 简单编写shellimage.png

  • 在这里能看到构建历史image.png

  • 点击某个构建历史,查看控制台输出,发现我们编写的shell命令已经执行了image.png

  • 点击配置修改,点击查看环境变量列表image.png

  • 去使用Jenkins环境变量,填写在Build Steps处

echo "Hello world"
echo "The build ID of this job is ${BUILD_ID}"
echo "The build URL of this job is ${BUILD_URL}"
  • 点击立即构建,查看控制台输出image.png
  • 重新更新shell script在Build Steps处
echo "Hello world"
echo "The build ID of this job is ${BUILD_ID}"
echo "The build URL of this job is ${BUILD_URL}"

ls -ltr
echo "Jenkins" > test.txt
ls -ltr
  • 保存并构建,查看控制台输出,你可以看到一开始没有文件,之后出现了文件

image.png

  • 点击工作空间,你可以看到文件image.png

  • 再次构建一次,查看控制台输出,我们可以看到之前的文件依旧存在image.png

  • 如果我们需要每次构建去清除工作空间,配置勾选此选项image.png

  • 再此查看控制台输出,我们发现之前的文件已经不存在,重新生成了新的文件image.png

探索Jenkins文件系统和工作空间

#进入容器
$ docker exec -it jenkins-master bash

jenkins@9fbb1603c9e7:/$ cd /var/jenkins_home/
jenkins@9fbb1603c9e7:~$ ls -ltra
total 128
drwxr-xr-x  1 root    root     4096 Dec 19 15:06 ..
drwxr-xr-x 10 jenkins jenkins  4096 Dec 24 03:08 war
drwxr-xr-x  3 jenkins jenkins  4096 Dec 24 03:08 .cache
drwxr-xr-x  3 jenkins jenkins  4096 Dec 24 03:08 .java
-rw-r--r--  1 jenkins jenkins    64 Dec 24 03:08 secret.key
-rw-r--r--  1 jenkins jenkins     0 Dec 24 03:08 secret.key.not-so-secret
drwxr-xr-x  2 jenkins jenkins  4096 Dec 24 03:08 nodes
-rw-r--r--  1 jenkins jenkins   171 Dec 24 03:08 jenkins.telemetry.Correlator.xml
drwxr-xr-x  2 jenkins jenkins  4096 Dec 24 03:08 userContent
-rw-r--r--  1 jenkins jenkins   129 Dec 24 03:08 queue.xml.bak
-rw-r--r--  1 jenkins jenkins   100 Dec 24 03:14 copy_reference_file.log
-rw-r--r--  1 jenkins jenkins   156 Dec 24 03:14 hudson.model.UpdateCenter.xml
-rw-r--r--  1 jenkins jenkins  1037 Dec 24 03:14 nodeMonitors.xml
-rw-r--r--  1 jenkins jenkins  1661 Dec 24 03:14 config.xml
-rw-r--r--  1 jenkins jenkins     0 Dec 24 03:14 .lastStarted
drwxr-xr-x 87 jenkins jenkins 12288 Dec 24 03:22 plugins
-rw-------  1 jenkins jenkins  1680 Dec 24 03:22 identity.key.enc
drwxr-xr-x  2 jenkins jenkins  4096 Dec 24 03:22 updates
-rw-r--r--  1 jenkins jenkins   370 Dec 24 03:22 hudson.plugins.git.GitTool.xml
drwxr-xr-x  3 jenkins jenkins  4096 Dec 24 03:22 .groovy
drwxr-xr-x  3 jenkins jenkins  4096 Dec 24 03:24 users
-rw-r--r--  1 jenkins jenkins   179 Dec 24 03:24 jenkins.model.JenkinsLocationConfiguration.xml
-rw-r--r--  1 jenkins jenkins     5 Dec 24 03:24 jenkins.install.UpgradeWizard.state
-rw-r--r--  1 jenkins jenkins     5 Dec 24 03:24 jenkins.install.InstallUtil.lastExecVersion
-rw-r--r--  1 jenkins jenkins     1 Dec 24 03:41 .owner
drwxr-xr-x  3 jenkins jenkins  4096 Dec 24 03:48 jobs
drwx------  2 jenkins jenkins  4096 Dec 24 03:55 secrets
drwxr-xr-x  3 jenkins jenkins  4096 Dec 24 04:21 logs
-rw-r--r--  1 jenkins jenkins   504 Dec 24 04:24 org.jenkinsci.plugins.resourcedisposer.AsyncResourceDisposer.xml
drwxr-xr-x  3 jenkins jenkins  4096 Dec 24 04:24 workspace
-rw-r--r--  1 jenkins jenkins   129 Dec 24 04:25 queue.xml
drwxr-xr-x 15 jenkins jenkins  4096 Dec 24 04:25 .
  • 进入/var/jenkins_home/workspace,可以看到我们的Job Name
jenkins@9fbb1603c9e7:~$ cd workspace/
jenkins@9fbb1603c9e7:~/workspace$ ls -ltra
total 12
drwxr-xr-x  2 jenkins jenkins 4096 Dec 24 04:24 my_first_job
drwxr-xr-x  3 jenkins jenkins 4096 Dec 24 04:24 .
drwxr-xr-x 15 jenkins jenkins 4096 Dec 24 04:25 ..
  • 进入我们创建的Job目录下
jenkins@9fbb1603c9e7:~/workspace$ cd my_first_job/
jenkins@9fbb1603c9e7:~/workspace/my_first_job$ ls -ltra
total 12
-rw-r--r-- 1 jenkins jenkins    8 Dec 24 04:24 test.txt
drwxr-xr-x 3 jenkins jenkins 4096 Dec 24 04:24 ..
drwxr-xr-x 2 jenkins jenkins 4096 Dec 24 04:24 .
jenkins@9fbb1603c9e7:~/workspace/my_first_job$ cat test.txt
Jenkins

使用Jenkins运行Python脚本

  • 新建一个Jobimage.png
  • 添加Git仓库位置https://github.com/devopsjourney1/jenkins-101image.png
  • 编写Shell Script在Build Stepsimage.png
  • 点击构建查看控制台输出,发现进行拉取Git仓库执行helloworld.py文件image.png

helloworld.py

print("Hello world")

设置Docker Cloud Agent

image.png
image.png

  • 点击cloudsimage.png
  • 安装插件image.png
  • 你可以在这里添加你需要的云节点(如Docker ,AWS,k8s)image.png

设置Commit触发

  • 在Job的此位置设置,这样类似于设置一个Crontab去检测Git仓库最后一次的commit提交,然后执行自动化

image.png

  • H/5 * * * * 每5分钟去进行一次检测

Pipelines

  • 创建一个任务,选择Pipeline(选择流水线)image.png
  • 向下拉取,你需要添加pipeline脚本在这里image.png

pipeline文件格式

pipeline {  #所有命令包裹着pipeline里
    agent { 
        node { #通过标签选择agent
            label 'jenkins-agent-goes-here'
            }
      }
    triggers { #触发器
        pollSCM '* * * * *'
    }  
    stages {  #stages->stage->steps
        stage('Build') {
            steps {
                echo "Building.."
                sh '''
                echo "doing build stuff.."
                '''
            }
        }
        stage('Test') {
            steps {
                echo "Testing.."
                sh '''
                echo "doing test stuff..
                '''
            }
        }
        stage('Deliver') {
            steps {
                echo 'Deliver....'
                sh '''
                echo "doing delivery stuff.."
                '''
            }
        }
    }
}
  • 将这段pipeline脚本填入,并保存构建
pipeline {
    agent any   #选择任意一个可用的节点当作agent 这里使用的为本机
    stages {
        stage('Build') {
            steps {
                echo "构建中.."

            }
        }
        stage('Test') {
            steps {
                echo "测试中.."
  
            }
        }
        stage('Deploy') {
            steps {
                echo '部署中..'

            }
        }
    }
}

image.png

  • 查看控制台输出image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/268855.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

好物周刊#32:Go 学习指南

村雨遥的好物周刊,记录每周看到的有价值的信息,主要针对计算机领域,每周五发布。 一、项目 1. 抖音/TikTok API 一个开箱即用的高性能异步抖音 | TikTok 数据爬取工具,支持 API 调用,在线批量解析及下载。 2. LogicF…

【LeetCode】每日一题 2023_12_25 不浪费原料的汉堡制作方案(数学,解二元一次方程)

文章目录 刷题前唠嗑题目:不浪费原料的汉堡制作方案题目描述代码与解题思路 结语 刷题前唠嗑 LeetCode?启动!!! 题目:不浪费原料的汉堡制作方案 题目链接:1276. 不浪费原料的汉堡制作方案 题…

小狐狸ChatGPT付费创作系统 前端对话提示undefined index:temperature解决方法

很多会员使用着ChatGPT付费创作系统,特别是新安装系统后前端输入对话时提示错误undefined index:temperature,检查了反代、检查了KEY均正常,这问题主要是因为后台设置里新用户免费送对话次数为空,没设置赠送次数原因,导…

OAuth 2.0 入门指南:掌握授权码模式

一、授权码模式 (1)spring-security-oauth2 从2.4.x版本开始,EnableAuthorizationServer注解就弃用过时了 (2)当前演示Demo版本:springboot的1.5.x版本与spring-security-oauth2的2.3.8.RELEASE整合&#…

AI绘画训练一个扩散模型-上集

介绍 AI绘画,其中最常见方案基于扩散模型,Stable Diffusion 在此基础上,增加了 VAE 模块和 CLIP 模块,本文搞了一个测试Demo,分为上下两集,第一集是denoising_diffusion_pytorch ,第二集是diff…

TomcatHttp协议

1 javaWEB 1.1 Web概述 Web在英文中的含义是网状物,网络。在计算机领域,它通常指的是后者,即网络。像我们前面接触的WWW,它是由3个单词组成的,即:World Wide Web,中文含义是万维网。而我们前…

读书笔记--构建数据湖仓阅读有感

企业为什么要开展数据治理?为什么在数据治理过程中提出数据湖仓构建?数据湖如果没有分析基础设施的建设,就会形成数据沼泽或臭水沟,因为没有人用,也不知道数据之间的关系。我们知道数据因业务运行而产生,后…

盒子 Box

UVa1587 思路&#xff1a; 1.输入每个面的长宽并将每个面较长的一边放在前面 2.判断是否存在三对面分别相等 3.判断是否存在三组四棱相等 #include <stdio.h> #include <stdlib.h> #define maxn 100int cmp(const void* e1, const void* e2) {return (int)(*(d…

Maya python清除命名空间

问题描述&#xff1a; Maya命名空间可能存在嵌套。 如上&#xff0c;直接删除 :female_actor02会出现异常。 因此需要先删除子命名空间&#xff0c;再删除父命名空间。 解决方法&#xff1a; def remove_namespace_node(namespace_name, ns_parent":"):""…

RabbitMQ入门指南(八):MQ可靠性

专栏导航 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、MQ数据持久化 1.交换机持久化 2.队列持久化 3.消息持久化 4.生产者确认机制 二、LazyQueue 1.LazyQueue模式介绍 2.管理控制台配置Lazy模式 3.代码配置Lazy模式 4.更新已有队列为lazy模式 总…

【计算机四级(网络工程师)笔记】操作系统运行机制

目录 一、中央处理器&#xff08;CPU&#xff09; 1.1CPU的状态 1.2指令分类 二、寄存器 2.1寄存器分类 2.2程序状态字&#xff08;PSW&#xff09; 三、系统调用 3.1系统调用与一般过程调用的区别 3.2系统调用的分类 四、中断与异常 4.1中断 4.2异常 &#x1f308;嗨&#xff…

RPC 实战与原理

文章目录 什么是 RPC&#xff1f;RPC 有什么作用&#xff1f;RPC 步骤为什么需要序列化&#xff1f;零拷贝什么是零拷贝&#xff1f;为什么需要零拷贝&#xff1f;如何实现零拷贝&#xff1f;Netty 的零拷贝有何不同&#xff1f; 动态代理实现HTTP/2 特性为什么需要服务发现&am…

DDD领域驱动设计系列-原理篇-战术设计

概述 上篇战略设计产出了领域及问题域领域模型&#xff1b;详见&#xff1a;DDD领域驱动设计系列-原理篇-战略设计-CSDN博客 战术设计篇聚焦如何落地&#xff0c;包含实际解决方案模型落地&#xff0c;架构分层&#xff08;Clean&#xff0c;CQRS&#xff09;&#xff0c;Rep…

04-C++ 类和对象-02

类和对象-02 1. this 指针 1.1 概念&#xff1a; 谁调用this所在的函数&#xff0c;this就存储谁的地址&#xff0c;即指向谁 。 1.2 特点&#xff1a; 在当前类的非静态成员函数中调用本类非静态成员时&#xff0c;默认有this关键字静态成员函数&#xff0c;没有this指针…

Neovim+ctag浏览、编辑源代码

Neovimctag浏览、编辑源代码 一 配置安装vim及 ctags vim应该可以不用装&#xff0c;直接装neovim&#xff0c;这里我是先装了vim再装的neovim Ctags必须装&#xff0c;后面用neovim telescope索引函数时才有效 vim复制系统粘贴板&#xff1a;vim输入模式下&#xff0c;按shi…

低功耗16位MCU:R7F100GLL3CFA、R7F100GLN2DLA、R7F100GLN3CFA、R7F100GLN2DFA是新一代RL78微控制器

产品介绍&#xff1a; RL78/G23低功耗MCU可在41μA/MHz CPU运行频率下工作&#xff0c;功耗低&#xff0c;停止4KB SRAM保持时为210nA。该MCU设有snooze模式排序器&#xff0c;可显著降低间歇工作时的功耗。RL78/G23组具有1.6V至5.5V宽工作电压范围&#xff0c;频率高达32MHz。…

bean生命周期源码(三)

书接上文 文章目录 一、Bean的销毁逻辑1. 简介2. Bean销毁逻辑的注册3. Bean的销毁过程 一、Bean的销毁逻辑 1. 简介 前面我们已经分析完了Spring创建Bean的整个过程的源码&#xff0c;在创建bean的核心方法中doCreateBean这一个核心方法中&#xff0c;在方法的最后面有这么…

SpringCloudAlibaba Seata在Openfeign跨节点环境出现全局事务Xid失效原因底层探究

原创/朱季谦 曾经在SpringCloudAlibaba的Seata分布式事务搭建过程中&#xff0c;跨节点通过openfeign调用不同服务时&#xff0c;发现全局事务XID在当前节点也就是TM处&#xff0c;是正常能通过RootContext.getXID()获取到分布式全局事务XID的&#xff0c;但在下游节点就出现获…

ros2+gazebo+urdf:ros2机器人使用gazebo的urdf文件中的<gazebo>部分官网资料

原文链接SDFormat extensions to URDF (the gazebo tag) — Documentation 注意了ros2的gazebo部分已经跟ros1的gazebo部分不一样了&#xff1a; Toggle navigation SpecificationAPIDocumentationDownload Back Edit Version: 1.6 Table of C…

我在代码随想录|写代码Day-Day之总结篇

我是用笔手写的我觉得这样可以对个人记忆会更好,而且理解更深解释也更清楚 下面是手写笔记 总结部分----- 第一章 二分 二分模版 图片可能反了下不过没有关系 图形打印模版题 第二章 链表 链表基本操作和疑问 链表代码操作和解析----5大操作 删除部分 对结点的操作 反了反了…