1.基础知识
- 从git拉取的代码默认放在Jenkins的workspace,如果通过
docker run jenkinsci/blueocean
,那么Jenkins的工作目录是/var/jenkins_home/workspace
- 直接安装的,则是在
/var/lib/jenkins/workspace
1.1 学习文档
官网doc
博客blog.mafeifan.com/
2. 安装Jenkins
建议使用的Docker映像是[`jenkinsci/blueocean` image](https://link.juejin.cn?target=https%3A%2F%2Fhub.docker.com%2Fr%2Fjenkinsci%2Fblueocean%2F "https://hub.docker.com/r/jenkinsci/blueocean/")(来自 the [Docker Hub repository](https://link.juejin.cn?target=https%3A%2F%2Fhub.docker.com%2F "https://hub.docker.com/"))。 该镜像包含当前的[长期支持 (LTS) 的Jenkins版本](https://link.juejin.cn?target=https%3A%2F%2Fwww.jenkins.io%2Fdownload "https://www.jenkins.io/download") (可以投入使用) ,捆绑了所有Blue Ocean插件和功能。这意味着你不需要单独安装Blue Ocean插件。
注意 Blue Ocea可以理解成Jenkins UI页面的皮肤插件\
2.1 通过docker安装Jenkins
Jenkins直接安装在Linux上,需要提前安装java的jdk,因为Jenkins依赖它。而利用docker安装Jenkins,可以直接使用官方dodcker镜像,不需要安装依赖,简单方便
2.1.1 通过docker run image
直接安装Jenkins
bash
复制代码
docker run \
-u root \ # 必须给予Jenkins足够权限,否则部署在远程服务器上会报错'无法连接Jenkins'
--rm \ #(可选)容器关闭时自动删除自己,即 `docker stop 容器id` ,这个docker 容器会被删除
-d \ # 在后台运行容器
-p 8080:8080 \ # 映射`jenkinsci/blueocean` 容器端口8080到主机上的端口8080
-p 50000:50000 \ #1
-v jenkins-data:/var/jenkins_home \ #2
-v /var/run/docker.sock:/var/run/docker.sock \ #3
--name jenkins-service \ # 给容器起别名
--restart always \ # 容器总是自动重启,避免Jenkins重启后容器停止而不启动
jenkinsci/blueocean
# 无注释版本,请粘贴这个(没有加--rm)
docker run \
-u root \
-d \
-p 8080:8080 \
-p 50000:50000 \
-v jenkins-data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
--name jenkins-service \
--restart always \
jenkinsci/blueocean
参数功能 | #1 -p(可选)将 jenkinsci/blueocean 容器的端口50000 映射到主机上的端口50000。详细的看官方文档 | #2 -v(可选,但强烈建议)映射在容器中的/var/jenkins_home 目录到具有名字 jenkins-data 的volume。 如果这个卷不存在,那么这个 docker run 命令会自动为你创建卷。 如果您希望每次重新启动Jenkins(通过此 docker run ... 命令)时保持Jenkins状态,则此选项是必需的 。 如果你没有指定这个选项,那么在每次重新启动后,Jenkins将有效地重置为新的实例。 注意: 所述的 jenkins-data 卷也可以 docker volume create 命令创建: docker volume create jenkins-data 代替映射 /var/jenkins_home 目录转换为Docker卷,还 可以将此目录映射到计算机本地文件系统上的目录。 例如,指定该选项 -v $HOME/jenkins:/var/jenkins_home 会将容器的 /var/jenkins_home 目录映射 到 本地计算机上目录中的 jenkins 子目录, 该$HOME目录通常是 /Users/<your-username>/jenkins 或/home/<your-username>/jenkins 。 | #3 -v(可选 /var/run/docker.sock 表示Docker守护程序通过其监听的基于Unix的套接字。 该映射允许 jenkinsci/blueocean 容器与Docker守护进程通信, 如果 jenkinsci/blueocean 容器需要实例化其他Docker容器,则该守护进程是必需的。 如果运行声明式管道,其语法包含agent 部分用 docker - 例如, agent { docker { ... } } 此选项是必需的。 在Pipeline Syntax 页面上阅读更多关于这个的信息 |
---|
2.1.2 通过 docker-compose
安装Jenkins
2.1.3 直接安装Jenkins
2.2 ****配置Jenkins
浏览器输入
ip + 端口
,进入Jenkins
通过ip addr可查看Linux的ip地址,如果没有看见,说明网卡没有启动,具体自行百度
2.2.1 输入初始密码
- 通过查看日志
docker logs -n=25 容器id
直接看到密码
- 或者进入容器命令行
docker exec -it 容器名 bash
,输入cat /var/jenkins_home/secrets/initialAdminPassword
2.2.2 点击 选择插件来安装
2.2.3 选择无,因为服务器在国外,安装插件太慢。所以后面通过更改镜像的方式重新安装
2.2.4 配置Jenkins插件中心为国内镜像
bash
复制代码
# 1. 修改 plugin manager 中update site 的url为清华镜像源https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
# 2. 修改服务器配置
docker exec -it 容器id /bin/bash
cd /var/jenkins_home/updates
sed -i 's#https://updates.jenkins.io/download#https://mirrors.tuna.tsinghua.edu.cn/jenkins#g' default.json
sed -i 's#http://www.google.com#https://www.baidu.com#g' default.json
# 3. 重启Jenkins服务
docker restart docker容器
如果不是通过docker安装Jenkins而是直接安装,那么需要
cd /var/lib/jenkins/updates
,最后通过systemctl restart jenkins
重启Jenkins
2.2.5 安装插件
进入plugin manager
安装如下插件
- Localization: Chinese (Simplified)(JenkinsUI页面的汉化包)
- DingTalk(流水线工作的时候钉钉消息通知,具体配置请百度)
- Git Parameter Plug-In
- 安装 Publish Over SSH 作用: 将构建后的编译产出发布到服务器且允许Jenkins所在机器通过SSH服务登录到远程机执行脚本
- 安装Generic Webhook Trigger Plugin作用:通用 Webhook 触发器构建
- NodeJs 用于构建前端代码(npm build)
- Pipeline: Stage View在非blue ocean界面,可以清晰的看见构建过程
注意 安装完插件后需要重启Jenkins
2.3 普通方式安装Jenkins
3. Jenkins构建自由风格任务
3.1参数化构建
拉取git仓库代码(这里拉取码云)
credentials是可以选择输入账号密码,也可以选择输入ssh密钥(自行百度)
3.1.1 选择参数化构建,即使用tag,方便代码回滚
3.2 常用构建触发器
- 轮询scm
(SCM,全称Software Configuration Management,中文翻译为软件配置管理,git是scm工具,就是实现scm的一种方法)
Jenkins会定时扫描整个项目源码,系统开销较大,不推荐使用
- githook 算是对前者的改进,最为推荐
- 其他工程构建后触发 顾名思义,就是前一个项目构建完成后开始构建任务
4. Jenkins 构建流水线任务
流水线脚本(Jenkinsfile)
一般放在ui界面、项目源码里面或是单独放在一个git仓库里(推荐选择后面两种,方便版本控制,因为Jenkinsfile也会有多个版本,而且也可以防止Jenkins崩溃等极端状况发生)
参考文档1 # Jenkins教程(三)添加凭据与流水线拉取Git代码
4.1 踩坑记录
惨痛教训
一定给任务设置超时监测
给任务设置超时监测,会避免流水线出bug卡死服务器
groovy
复制代码
timeout(time: 3, unit: 'MINUTES') {
sh './health-check.sh'
}
清理工作区
使用yarn构建前端项目
npm装包有时会出现依赖拉不下来,从而导致由于网络问题导致的构建失败,而yarn会在第一次构建的时候就生成缓存,后面构建的时候,会先看缓存区有没有package.json里用到的依赖包,如果有的话就不会下载,没有才会下载,提高了效率。
bash
复制代码
node -v
npm install -g yarn -registry=https://registry.npm.taobao.org
yarn -v
yarn install --pure-lockfile
#--pure-lockfile 这个参数是在服务器install不生成yarn.lock,防止服务器和本地代码冲突
yarn run build
5. Jenkins环境变量
参考文章 www.artacode.com/post/ci-cd/…
5.1 自定义环境变量和内置环境变量
5.2 pipeline中的使用(声明式语法)
使用变量一定要使用双引号,带变量的字符串只能用双引号,不能用单引号
groovy
复制代码
pipeline {
agent any
environment {
git_url = 'https://gitee.com/xxxxxx'
git_auth = 'e767d8bb-daf5-4d85-91c9-e34545215c44'
}
stages {
stage('拉取代码') {
steps {
echo "${git_url}"
echo "${git_auth}"
}
}
}
}
6. Jenkins常用插件的使用
6.1 publish over ssh 的使用
注意 不能使用
docker -it 容器名 command
, 只能使用docker -i 容器名 command
,因为是通过publish over ssh插件执行的命令,而不是在终端上。否则会报错ERROR: Exception when publishing, exception message [Exec exit status not zero. Status [1]]
,并且不会有其他详细错误提示。
bash
复制代码
# 执行sh脚本文件,在终端中输入完全没问题,但使用publish over ssh 执行就会退出,导致构建失败
docker compose up -d
docker exec -i web bash start.sh
6.2 用户权限管理
需要安装 插件Role-based Authorization Strategy
6.3 Jenkins机器人配置
主要是配置好Jenkins机器人的id,因为在Jenkinsfile中填的是id
6.4 清理工作区插件(Workspace Cleanup)
用法是cleanWs()
题外话
在此疾速成长的科技元年,编程就像是许多人通往无限可能世界的门票。而在编程语言的明星阵容中,Python就像是那位独领风 骚的超级巨星, 以其简洁易懂的语法和强大的功能,脱颖而出,成为全球最炙手可热的编程语言之一。
Python 的迅速崛起对整个行业来说都是极其有利的 ,但“人红是非多
”,导致它平添了许许多多的批评,不过依旧挡不住它火爆的发展势头。
如果你对Python感兴趣,想要学习pyhton,这里给大家分享一份Python全套学习资料,都是我自己学习时整理的,希望可以帮到你,一起加油!
学习资源推荐
除了上述分享,如果你也喜欢编程,想通过学习Python获取更高薪资,这里给大家分享一份Python学习资料。
这里给大家展示一下我进的兼职群和最近接单的截图
😝朋友们如果有需要的话,可以V扫描下方二维码联系领取,也可以内推兼职群哦~
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
### 1.Python学习路线
2.Python基础学习
01.开发工具
02.学习笔记
03.学习视频
3.Python小白必备手册
4.数据分析全套资源
5.Python面试集锦
01.面试资料
02.简历模板
因篇幅有限,仅展示部分资料,添加上方即可获取👆
------ 🙇♂️ 本文转自网络,如有侵权,请联系删除 🙇♂️ ------