持续集成系统Jenkins部署[物理机|docker]/目录结构

root
233
文章
0
评论
2021年9月4日17:33:41 评论 5471字阅读18分14秒

持续集成系统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/

rpm 安装
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系统用户目录

 

继续阅读
weinxin
我的微信
这是我的微信扫一扫
  • 文本由 发表于 2021年9月4日17:33:41
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
jenkins-邮件通知|gitlab配置邮箱 Jenkins

jenkins-邮件通知|gitlab配置邮箱

jenkins-邮件通知|gitlab配置邮箱 gitlab-配置邮箱地址 默认情况可能每个Gitlab用户没有配置邮箱的, 需要Gitlab用户要配置好邮箱。 点击头像进入 edit profile...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: