1. 简介
略...
2. 安装 Jenkins
(1) RPM 安装
# a. 如果手头没有 RPM 包,就在清华源挑一个
wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.249.3-1.1.noarch.rpm
yum install jenkins-2.249.3-1.1.noarch.rpm
# b. 如果已有有合适的 RPM 包(特指手头还有与版本相对应的一堆插件时嘿嘿)
rpm -ivh jenkins-2.99-1.1.noarch.rpm
(2) rpm -ql jenkins
看装了哪些
/etc/init.d/jenkins
/etc/logrotate.d/jenkins
/etc/sysconfig/jenkins # 配置文件,我在这里面把端口改成10240
/usr/lib/jenkins
/usr/lib/jenkins/jenkins.war
/usr/sbin/rcjenkins
/var/cache/jenkins
/var/lib/jenkins
/var/log/jenkins
(3) http://虚机IP:10240 访问 Jenkins
admin/admin
(4)cd /var/lib/jenkins/plugins
→ 把常用插件的压缩包拉过去 → tar -xzvf plugins.tar.gz
→ mv 解压目录/* .
→ systemctl restart jenkins
(5)系统管理 → 管理插件 → 已安装
3. 集成 GitLab
3.1 example
(1)创建一个任务,在配置详情中的【构建】中输入一个简单 Shell 命令(如 pwd
)以查看构建效果;
(2)GitLab 上新建一个项目
(3)在码云上找一个开源监控项目,用 HTTPS 方式下载后解压
(4)因为是在 win 下的码云上的项目,所以我拿普通用户(root 用户的操作在虚机中)进行了 Existing folder 中的这串操作,遇到了两个问题(我可能和 Git 相克看来)
① push 的时候输入密码问题,看到这种就知道我咋输都不会对的。改成 HTTP 方式,这时再 push 会弹框提示输入账号密码,这时候把你的 GitLab 账号密码输入即可。
② 怎么都 push 不上去(没做任何分支保护)!最后让 root 用户随便 push 个文件上去(开光行为?),我才 push 上去的。
(5)在 freestyle-job 的「源码管理」中关联 monitor 项目
(6)保存配置,点击“立即构建”,然后查看控制台输出:
(7)vi /server/scripts/deploy.sh 写一个发布脚本
#!/bin/bash
CODE_DIR=/var/lib/jenkins/workspace/freestyle-job/
TIMESTAMP=`date +%F-%H-%M-%S`
NGINX_LOCATION=/usr/local/nginx
# 打包
cd $CODE_DIR && tar -zcf /tmp/web-${TIMESTAMP}.tar.gz ./*
# 拷贝
cp /tmp/web-${TIMESTAMP}.tar.gz $NGINX_LOCATION
# 解压
cd $NGINX_LOCATION && mkdir web-${TIMESTAMP}
tar -xf web-${TIMESTAMP}.tar.gz -C web-${TIMESTAMP} && rm -rf web-${TIMESTAMP}.tar.gz
# 软链接: %NGINX_HOME% / html ~> web-${TIMESTAMP}
cd $NGINX_LOCATION && rm -rf html && rm -rf html && ln -s web-${TIMESTAMP} html
安装 Jenkins 过程中,默认创建了一个 jenkins:jenkins 用户,【构建】的执行者就是这个用户(配置文件有提到)。所以,记得给脚本文件增加 other 的可执行权限,还要再查看下 other 是否对 Nginx 目录可写。
(8)配置 freestyle-job 的构建脚本,然后点击“立即构建”
【btw】如果上一步没给执行脚本或者操作目录相应的权限,点击“立即构建”你将会看到:
(9)最终,访问 192.168.206.130:8888(Nginx 监听端口)
3.2 WebHooks
GitLab → Jenkins
(1)Jenkins
(2)GitLab
(3)Test-触发构建
3.3 构建结果通知
Jenkins → GitLab
(1)GitLab
(2)Jenkins
(3)Test
① 希望哪个项目的构建结构返回 GitLab,就配置对应的任务,这里就配置 freestyle-job 的「构建后操作」了:
② 保存之后点击“立即构建”,然后查看 GitLab:
③ 点击绿色小勾,查看详细内容:
4. 搭建 Maven 私服
4.1 下载/安装
[Maven] https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.3.9/binaries/
tar -zxvf apache-maven-3.3.9-bin.tar.gz
mv apache-maven-3.3.9 /usr/local/
ln -s apache-maven-3.3.9/ maven
[nexus] http://www.sonatype.com/download-oss-sonatype 同理,然后对这俩都整个软链接方便操作。
nexus 目录结构:
vim /usr/local/nexus/etc/nexus-default.properties
知道了默认端口是 8081:
4.2 访问 Nexus
(1)访问 http://192.168.206.130:8081,可以看到如下界面(so Cool~):
(2)右上角 Sign In,用户名 admin 密码 admin123;登录成功后,进行如下操作:
(3)修改 maven/conf/settings.xml:
<!-- 找到 <servers> 标签,添加 Nexus 默认认证信息 -->
<server>
<id>nexus-6x7-releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>nexus-6x7-snapshot</id>
<username>admin</username>
<password>admin123</password>
</server>
<!-- 找到 <mirrors> 标签,添加镜像 -->
<mirror>
<id>myMirror</id>
<name>6x7 maven</name>
<url>http://192.168.206.130:8081/repository/maven-public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<!-- 找到 <profiles> 标签,添加仓库信息 -->
<profile>
<id>nexus-6x7</id>
<repositories>
<repository>
<id>central</id>
<url>http://192.168.206.130:8081/repository/maven-public/</url>
<releases><enabled>true</enabled><releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
<repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://192.168.206.130:8081/repository/maven-public/</url>
<releases><enabled>true</enabled><releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
<!-- 文件末尾,激活仓库 -->
<activeProfiles>
<activeProfile>nexus-6x7</activeProfile>
</activeProfiles>
4.3 关联 Jenkins
可以先去码云找个 Maven 项目放到 GitLab 上,然后在 Jenkins 上创建一个任务(如下),再然后 ... 就没然后了,我不想测了我要去洗澡了。
5. Pipeline
5.1 概述
Jenkins 2.0 的精髓是“Pipeline as Code”,是帮助 Jenkins 实现 CI 到 CD 转变的重要角色。什么是 Pipeline,简单来说,就是一套运行于 Jenkins 上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂发布流程。Pipeline 的实现方式是一套 Groovy DSL,任何发布流程都可以表述为一段 Groovy 脚本,并且 Jenkins 支持从代码库直接读取脚本,从而实现了“Pipeline as Code”的理念。
Pipeline:是一个用户定义的 CD 流水线模式。Pipeline 代码定义了通常包含构建、测试和发布步骤的完整的构建过程。
- Node 是一个机器,它是 Jenkins 环境的一部分,并且能够执行 Pipeline。同时,node 代码块也是脚本式 Pipeline 语法的关键特性。
- Stage 块定义了在整个 Pipeline 中执行的概念上不同的任务子集(例如“构建”、“测试”和“部署”阶段),许多插件使用它来可视化或呈现 Jenkins 管道状态/进度。
- Step 是一项任务。从根本上讲,一个步骤告诉 Jenkins 在特定时间点(或过程中的“步骤”)要做什么。例如,使用
sh step: sh 'make'
可以执行 make 这个 Shell 命令。
5.2 example
(1)创建一个 Pipeline,通过「Definition=Pipeline script」直接在 Jenkins 中写好 Pipeline 流程:
(2)点击“立即构建”,点击那三个“带有 ms 值的绿块”,可以查看 Logs:
(3)还可以把 JenkinsFile 写在项目中,然后在 Jenkins 中配置 JenkinsFile 的位置来完成。
- 先在 GitLab 中创建 JenkinsFile;
- 配置 「Definition=Pipeline script from SCM」,填写相关配置;
- 点击“立即构建”
(4)再看个有点实际意义的 Pipeline: