持续集成系统Jenkins部署[物理机|docker]/目录结构
Jenkins简介与应用场景
对于持续集成工具现在也有很多种选择,但是目前应用最多的基本上还是Jenkins。
- Jenkins是使用java语言开发的自动化发布工具。
- Jenkins是跨平台的可以在Windows、Linux、MacOS部署运行。
- Jenkins是应用最广的开源免费的持续集成服务器,企业中普遍使用Jenkins来作为项目集成发布工具
- 官方插件使Jenkins更为强大。
目前发展超过15年,属于比较成熟的CI/CD工具,能够实现代码自动化集成并发布。目前普遍使用Jenkins完成持续集成CI/持续部署CD等相关技术实践。
任何你想自动化实现的运维任务,都可以通过Jenkins执行;
- 持续集成实践
- 集成svn/git客户端实现源代码下载检出
- 集成maven/ant/gradle/npm等构建工具实现源码编译打包单元测试
- 集成sonarqube对源代码进行质量检查(坏味道、复杂度、新增bug等)
- 持续部署实践
- 集成SaltStack/Ansible实现自动化部署发布
- 自动化测试实践
- 集成Jmeter/Soar/Kubernetes/.....
Jenkins安装部署
关于Jenkins的安装:
- 可以使用rpm/war/docker安装;
- 提前安装好JDK8+环境。
Jenkins采用分布式架构,分为server节点和agent节点。
- server节点也是可以运行构建任务的,但我们一般使其主要来做任务的调度。(毕竟server节点挂了就都...)
- agent节点专门用于任务的执行。随着现在容器的流行,可以将server、agent节点在容器或者基于Kubernetes中部署。
关于agent节点借助容器可以实现动态的资源分配等等好处。agent节点可以分为静态节点和动态节点。
- 静态节点是固定的一台vm虚机或者容器。
- 动态节点是随着任务的构建来自动创建agent节点。
物理机Jenkins安装部署
1.安装JDK环境
如果使用rpm的方式安装的Jenkins需要提前安装好JDK,Jenkins Slave运行也需要使用JDK。
或者参考文章:Linux 安装Jdk环境
//版本可能不一样,操作都是一样的,包换了 tar -xf OpenJDK8U-jdk_x64_linux_hotspot_8u302b08.tar.gz -C /usr/local cd /usr/loca/jdk8u282-b08 pwd vim /etc/profile export JAVA_HOME=/usr/local/jdk8u282-b08 export PATH=$JAVA_HOME/bin:$PATH source /etc/profile java -version openjdk version "1.8.0_282" OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_282-b08) OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.282-b08, mixed mode)
2.安装Jenkins Master
centos下载地址:https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/
wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.277.1-1.1.noarch.rpm rpm -ivh jenkins-2.277.1-1.1.noarch.rpm ## 配置文件/etc/sysconfig/jenkins ## service start [root@zeyang-nuc-service jenkins]# netstat -anlpt | grep 8080 tcp6 0 0 :::8080 :::* LISTEN 16016/java [root@zeyang-nuc-service jenkins]# service jenkins status systemctl stop firewalld ## 访问 http://192.168.1.200:8080/
访问http://192.168.1.200:8080/
, 打开首页之后按照提示信息, 获取/var/lib/jenkins/secrets/initialAdminPassword
中的管理员密码。
[root@jeekins hwf]# cat /var/lib/jenkins/secrets/initialAdminPassword 90048c569a4d4bdf8d10cb6617dd5ffd
docker,Jenkins安装部署
1.jenkins镜像下载,选择lts版本稳定版本
下载地址:
https://registry.hub.docker.com/r/jenkins/jenkins/tags?page=1&ordering=last_updated&name=lts
[root@localhost ~]# docker pull jenkins/jenkins:2.289.3-lts-centos
docker pull jenkins/jenkins:2.289.3-lts-centos7 mkdir -p /data/jenkins chmod +x /data/jenkins ## 指定时区 #System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Shanghai') docker run -itd --name jenkins \ --cpus="1.5" \ -m 2G \ -p 8080:8080 \ -p 50000:50000 \ -e JAVA_OPTS="-Dorg.apache.commons.jelly.tags.fmt.timeZone='Asia/Shanghai'" \ --privileged=true \ --net sonarqube-tier \ --restart always \ -v /data/jenkins:/var/jenkins_home jenkins/jenkins:2.289.3-lts-centos7
[root@jeekins jenkins]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8327b0fbc17a jenkins/jenkins:2.289.3-lts-centos "/sbin/tini -- /usr/…" 9 seconds ago Exited (1) 8 seconds ago jenkins [root@jeekins jenkins]# docker logs -f jenkins touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?
chmod 777 -R jenkins/ [root@jeekins data]# chmod 777 - R jenkins
[root@jeekins ~]# cat /data/jenkins/secrets/initialAdminPassword 0df84071464d4d99bf89fb1c190f14f7
修改插件下载地址
sed -i 's#"https://updates.jenkins.io/update-center.json"#"https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json"#g' /data/jenkins/hudson.model.UpdateCenter.xml
有三个插件一定要装
- Localization:Chinese
- Locale
- Timestamper【options插件】
- Pipeline Utility Steps 【格式化json插件】
- Generic Webhook Trigger 【jenkins触发器】
- rebuild 【类似于回放】
- Role-Based Strategy 【权限管理】
- Blue Ocean 【Pipeline的 复杂可视化】
- Email Extension 【邮件通知插件】
- sonarqube scanner 【sonarqube 插件】
- Extended Choice Parameter【扩展选项插件】
- Active Choices 【扩展Extended Choice Parameter功能】
- Nexus Artifact Uploader 【nexus插件了解】
- HTTP Request 【jenkins调用gitlab API插件
- Workspace Cleanup【删除任务存储目录插件】
粘贴上个步骤2的复制内容。(https://updates.jenkins-zh.cn/update-center.json)
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
点击立即获取。
安装Jenkins Slave
系统设置 > 节点管理 > 新建节点
新建节点:通用节点
configure Clouds:云节点/动态节点
- 填写节点信息
- 执行器数量: 一个任务占用一个执行器,并行运行 任务的数量
- 工作目录:随便给
- 标签:表示同一个组,比如构建了5个节点使用相同的 标签,那么作业构建的时候都会干活
下载agent.jar
- 使用第二条,秘钥存储在文件里更加安全,前提要下载agent.jar
- 任何slave节点上都要装jdk
## 创建agent目录 [root@jeekins jenkins]# mkdir jenkinsagent [root@jeekins jenkins]# cd jenkinsagent wget http://192.168.1.200:8080/jnlpJars/agent.jar ## 编写启动脚本 [root@jeekins jenkinsagent]# cat start.sh #!/bin/bash echo 72dc9aceab3fcb3f8b1cc337e7ff602788b94aaa5bfed114ace9a6952b83fc4f > secret-file nohup java -jar agent.jar -jnlpUrl http://192.168.1.110:8080/computer/build-01/jenkins-agent.jnlp -secret @secret-file -workDir "/data/123" >>/dev/null & ## 启动agent [root@jeekins jenkinsagent]# ps -ef | grep agent root 12685 1 10 12:12 pts/0 00:00:04 java -jar agent.jar -jnlpUrl http://192.168.1.110:8080/computer/build-01/jenkins-agent.jnlp -secret @secret-file -workDir /data/123 root 12756 12545 0 12:13 pts/0 00:00:00 grep --color=auto agent
自定义agent的通信端口,Configure Global Security。
dashboard-->全局安全配置
Jenkins的数据目录
Jenkins采用文件存储, 其配置相关信息都保存到了XML文件中。
[root@jeekins jenkins]# ll -d */ drwxr-xr-x 2 root root 58 9月 5 12:12 jenkinsagent/ drwxr-xr-x 2 1000 1000 6 9月 4 18:06 jobs/ drwxr-xr-x 4 1000 1000 33 9月 5 11:38 logs/ drwxr-xr-x 3 1000 1000 22 9月 5 11:38 nodes/ drwxr-xr-x 12 1000 1000 4096 9月 4 23:18 plugins/ drwx------ 4 1000 1000 4096 9月 5 11:38 secrets/ drwxr-xr-x 2 1000 1000 100 9月 5 00:44 updates/ drwxr-xr-x 2 1000 1000 24 9月 4 18:06 userContent/ drwxr-xr-x 3 1000 1000 56 9月 4 18:06 users/ drwxr-xr-x 11 1000 1000 4096 9月 4 18:20 war/
- caches: 系统缓存数据
- jobs: Jenkins项目作业
- nodes: Jenkins slave节点信息
- secrets: 秘钥信息
- userContent: 类似于web站点目录,可以上传一些文件
- workspace: 默认的工作目录
- fingerprints: 指纹验证信息
- logs : 日志信息
- plugins: 插件相关配置
- updates: 插件更新目录
- users: jenkins系统用户目录

评论