Jenkins

IT
IT
IT
405
文章
1
评论
2021年4月24日14:54:21 评论 951 4612字阅读15分22秒

传统应用发布模式

一般一个开发团队中都会存在多个角色:开发、测试、运维。当时我们的应用发布模式可以能是这样的:

  • 开发同学进行项目代码开发,本地运行测试成功后将代码上传到版本控制系统
  • 开发同学通知运维同学项目可以发布了,然后运维同学下载代码进行打包和构建,生成应用制品
  • 运维同学使用部署脚本将生成的制品部署到测试环境,并提示测试同学可以进行产品的测试。
  • 测试同学开始进行手动、自动化测试,测试完成后提醒运维同学可以进行预生产环境部署
  • 运维同学开始进行预生产环境部署,然后测试同学进行测试,测试完成后,开始部署生产环境

手动操作很多、出现的问题很多。上面看似很流畅的过程,其实每次构建或发布都可能会出现问题。未对每次提交验证、构建环境不一致:开发人员本地测试成功后提交代码,运维同学下载代码进行编译却出现了错误。

Jenkins简介与应用场景

对于持续集成工具现在也有很多,目前应用最多的是Jenkins。Jenkins前身是Hudson,使用java语言开发的自动化发布工具。Jenkins是跨平台的可以在Win、Linux、MacOS部署。Jenkins是应用最广的开源免费的持续集成服务器,企业中普遍使用Jenkins来作为项目集成发布工具。Jenkins官方提供的插件使Jenkins更为强大。目前发展超过15年,比较成熟的CI工具(也可以CD)能够实现自动化集成发布。目前普遍使用Jenkins完成持续集成CI/持续部署CD等相关技术实践。 可以把Jenkins想象成一个脚本执行器,我们可以通过编写代码的方式灵活的控制Jenkins作业的运行与控制。

 应用场景

  • 持续集成实践
    • 集成svn/git客户端实现源代码下载检出
    • 集成maven/ant/gradle/npm等构建工具实现源码编译打包单元测试
    • 集成sonarqube对源代码进行质量检查(坏味道、复杂度、新增bug等)
  • 持续部署实践
    • 集成SaltStack/Ansible实现自动化部署发布
  • 自动化测试实践
    • 集成Jmeter/Soar/Kubernetes/.....

功能特点

  • 开源免费
  • 多平台支持(windows/linux/macos)
  • 主从分布式架构
  • 提供web可视化配置管理页面
  • 安装配置简单
  • 插件资源丰富

官网

  • http://jenkins.io

Jenkins

Jenkins安装部署

关于Jenkins的安装可以使用rpm或者war包安装,需要提前安装好JDK8+环境。 Jenkins采用分布式架构,分为server节点和agent节点。server节点也是可以运行构建任务的,但我们一般使其主要来做任务的调度。(毕竟server节点挂了就都...)agent节点专门用于任务的执行。随着现在容器的盛行,我们可以将server节点和agent节点在容器或者基于Kubernetes中部署。关于agent节点借助容器可以实现动态的资源分配等等好处。agent节点可以分为静态节点和动态节点。静态节点是固定的一台vm虚机或者容器。动态节点是随着任务的构建来自动创建agent节点。

安装JDK环境

  • 如果使用rpm的方式安装的Jenkins需要提前安装好JDK,Jenkins Slave运行也需要使用JDK。
[root@k8s ~]# yum -y install java-1.8.0-openjdk*
[root@k8s ~]# vim /etc/profile
export JAVA_HOME=/usr/lib/jvm/jre-1.8.0-openjdk
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
[root@k8s ~]# source /etc/profile
[root@k8s ~]# java -version
openjdk version "1.8.0_292"
OpenJDK Runtime Environment (build 1.8.0_292-b10)
OpenJDK 64-Bit Server VM (build 25.292-b10, mixed mode)

安装Jenkins Master

  • rpm包安装地址:https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable
  • 下载rpm包
[root@k8s ~]# wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.277.1-1.1.noarch.rpm
[root@k8s ~]# rpm -ivh jenkins-2.277.1-1.1.noarch.rpm
  • 修改启动用户
[lucky@k8s ~]$  vim /etc/sysconfig/jenkins
JENKINS_USER="root"
  • 启动服务
[lucky@k8s ~]$ sudo systemctl start jenkins
  • 访问
http://ip:8080/
  • 配置Jenkins

Jenkins

[root@k8s ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
1bf296b4331c432e8deeb8abf9ac024d
  • 跳过默认的插件安装,仅选择中文社区插件。

Jenkins

  • 创建账号

Jenkins Jenkins Jenkins

安装Jenkins Slave

  • 系统设置 > 节点管理 > 新建节点

Jenkins Jenkins Jenkins

  • 配置从节点端口【建议设置成固定端口50000】

Jenkins Jenkins

  • 下载agent.jar

Jenkins

  • 创建agent目录
[root@k8s ~]# mkdir -p /data/cicd/jenkins
[root@k8s ~]# cd /data/cicd/jenkins
[root@k8s jenkins]# wget http://192.168.90.25:8080/jnlpJars/agent.jar
[root@k8s jenkins]# vim start.sh
#!/bin/bash
echo a00da002bfd68b0a9e08db9042869d734cca911e02f1d4b50b1f57854f3acc60 > secret-file
nohup java -jar agent.jar -jnlpUrl http://192.168.90.25:8080/computer/build/jenkins-agent.jnlp -secret @secret-file -workDir "/data/cicd/jenkins" >/dev/null &
[root@k8s jenkins]# sh -x start.sh
[root@k8s jenkins]# ps aux | grep agent
root 35797 83.2 2.0 6238540 210004 pts/0 Sl 17:09 0:09 java -jar agent.jar -jnlpUrl http://192.168.90.25:8080/computer/build/jenkins-agent.jnlp -secret @secret-file -workDir /data/cicd/jenkins
root 36074 0.0 0.0 112824 976 pts/0 S+ 17:09 0:00 grep --color=auto agent

Jenkins

Jenkins的数据目录

  • Jenkins采用文件存储, 其配置相关信息都保存到了XML文件中。
[root@k8s ~]# cd /var/lib/jenkins/
[root@k8s jenkins]# ls
config.xml jenkins.model.JenkinsLocationConfiguration.xml jobs queue.xml.bak userContent
hudson.model.UpdateCenter.xml jenkins.security.apitoken.ApiTokenPropertyConfiguration.xml logs secret.key users
identity.key.enc jenkins.security.QueueItemAuthenticatorConfiguration.xml nodeMonitors.xml secret.key.not-so-secret
jenkins.install.InstallUtil.lastExecVersion jenkins.security.UpdateSiteWarningsConfiguration.xml nodes secrets
jenkins.install.UpgradeWizard.state jenkins.telemetry.Correlator.xml plugins updates
  • caches: 系统缓存数据
  • jobs: Jenkins项目作业
  • nodes: Jenkins slave节点信息
  • secrets: 秘钥信息
  • userContent: 类似于web站点目录,可以上传一些文件
  • workspace: 默认的工作目录
  • fingerprints: 指纹验证信息
  • logs : 日志信息
  • plugins: 插件相关配置
  • updates: 插件更新目录
  • users: jenkins系统用户目录

Jenkins用户管理

  • Jenkins默认使用的是带的数据库管理用户,支持同步LDAP、Github等认证集成。

Jenkins

  • 系统设置 > 管理用户

Jenkins

  • 创建几个测试用户

Jenkins

Jenkins系统权限管理

  • 安装插件Role-Based Strategy

Jenkins

  • 授权策略选择Role-Based Strategy

Jenkins

  • 安全配置

Jenkins

管理权限

  • 系统设置->Manage and Assign Roles->Manage Roles

Jenkins

  • Global roles:添加用户和用户组,分配某个用户属于哪个用户组。
  • Item roles:添加某个工程或某一组工程的用户或用户组
  • Node roles:添加某个节点或某一组节点的用户或用户组
  • 给a用户授权全局权限

Jenkins

  • 给a用户分配demo项目的权限

Jenkins

  • 分配角色权限

Jenkins

Jenkins

  • 使用a账号验证(只能看到demo项目)

Jenkins

  • 只有demo项目的发版权限,无其他任何权限

Jenkins

Jenkins系统凭据管理

  • 安装插件 Credentials

Jenkins

  • 在这里配置认证信息即可

Jenkins

  • Username with password类型存储Harbor或者其他系统的用户名和密码。
  • GitLab API token类型存储Gitlab的用户API token。
  • Secret text类型可以用来存储OpenShift等系统中的token。
  • Certificate类型可以用户存储证书,例如k8s的用户证书。

BlueOCean UI基本使用

Blue Ocean减少了混乱而且进一步明确了团队中每个成员 Blue Ocean 的主要特性包括:

  • 持续交付(CD)Pipeline的 复杂可视化 ,可以让您快速直观地理解管道状态。
  • Pipeline 编辑器 - 引导用户通过直观的、可视化的过程来创建Pipeline,从而使Pipeline的创建变得平易近人。
  • 个性化 以适应团队中每个成员不同角色的需求。
  • 在需要干预和/或出现问题时 精确定位 。Blue Ocean 展示 Pipeline中需要关注的地方, 简化异常处理,提高生产力
  • 本地集成分支和合并请求, 在与GitHub 和 Bitbucket中的其他人协作编码时实现最大程度的开发人员生产力。

官方文档:https://jenkins.io/zh/doc/book/blueocean/getting-started/

Jenkins

继续阅读
历史上的今天
4月
24
  • 我的QQ
  • QQ扫一扫
  • weinxin
  • 我的头条
  • 头条扫一扫
  • weinxin
IT
  • 本文由 发表于 2021年4月24日14:54:21
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
版本控制系统与构建工具实践 DevOps

版本控制系统与构建工具实践

GitLab RPM13.7安装部署文档 Gitlab更新很快部署方式没产生很大的变化,本文档是基于13.7版本,如果更高版本也可以兼容。 使用RPM包部署 # wget https://mirror...
DevOps DevOps

DevOps

什么是DevOps? devops是一种思维方式,同时也是一种工作方式。成功的DevOps文化是将人、过程和工具的相互融合。DevOps并不是简单的理解为自动化工具。 DevOps的历史 软件开发方法...

您必须才能发表评论!