云原生 从docker、Jenkins、Kubernetes从入门到精通系列
1. Jenkins安装
以下资料总结来源于:Jenkins中文官方文档
公司有专门的 部署服务器,这里测试先在docker上安装jenkins。点我查看文档
下载镜像并在容器中运行:
docker run \
\-u root \
\-d \
\-p 8080:8080 \
\-p 50000:50000 \
\-v jenkins-data:/var/jenkins\_home \
\-v /etc/localtime:/etc/localtime:ro \
\-v /var/run/docker.sock:/var/run/docker.sock \
\--restart=always \
jenkinsci/blueocean
# 自己构建镜像 RUN的时候就把时区设置好
# 如果是别人的镜像,docker hub,UTC; 容器运行时 , -v /etc/localtime:/etc/localtime:ro
# 为什么要用 `jenkinsci/blueocean`这个,是因为jenkinsci/jenkins 是没有 blueocean插件的,需要自己装
# /var/run/docker.sock 表示Docker守护程序通过其监听的基于Unix的套接字。 该映射允许
# jenkinsci/blueocean 容器与Docker守护进程通信, 如果 jenkinsci/blueocean 容器需要实例化
# 其他Docker容器,则该守护进程是必需的。 如果运行声明式管道,其语法包含agent部分用 docker;例如:
# agent { docker { ... } } 此选项是必需的。
安装之后,可以根据需要去备份jenkins
#备份jenkins
tar -cvf jenkins_data.tar /var/lib/docker/volumes/jenkins-data/_data/
#恢复jenkins
tar -xvf jenkins_data.tar /var/lib/docker/volumes/jenkins-data/_data/
登录:
这里需要查看密码,密码在 /var/jenkins_home/secrets/initialAdminPassword,查看密码有两种方式
- 使用docker进入文件文本查看
# 使用名docker volume inspect jenkins-data可以查看卷信息
# 然后可以查看到 Mountpoint 的目录 /var/lib/docker/volumes/jenkins-data/_data
docker volume inspect jenkins-data
cd /var/lib/docker/volumes/jenkins-data/_data
cd secrets/
cat initialAdminPassword
# 获取到密码
# d50c4af81102476689d605197fbcf639
- 看日志
docker ps
docker logs admiring_shtern
2. 自定义 Jenkins
退出后重新登录:
到此安装结束。
3. Jenkins流水线 部署Git代码
- 创建一个git项目,并推送到远程仓库,我这里使用的是Gitee。
小技巧:这里可以使用gitee插件,直接推送到gitee仓库。我的代码仓库地址:
https://gitee.com/liu_lin_fang/java-devops-demo.git
代码结构如下:
- 新建任务
- 新建流水线【名字是自己起的,可以与项目名保持一致】
- 配置流水线。这里,可以在可视化界面去配置,也可以使用配置文件。我们先使用配置文件的方式去配置它。
这里选择流水线SCM。注意,这里的仓库是公共的,如果是私有的,还需要添加密钥。保存。
- 启用项目,回到主界面,打开Blue Ocean。任务还未运行,点击运行。
运行报错,点击可以查看报错原因。
报错原因如下:
问题为:找不到jenkins文件。
- 编写Jenkinfile,注意,这里是放在根目录下
//文件包含了整个流水线怎么工作的细节。
//写流水线的脚本
pipeline{
// 全部的CICD流程都需要在这里定义
// https://www.jenkins.io/zh/doc/book/pipeline/ 这里是流水线的文档
// 任何一个代理可用就可以执行
agent any
// 定义一些环境信息 一些变量
// 定义流水线加工流程
stages{
// 流水线的所有阶段
// 1.编译
// 1.编译, 单引号常亮,"$abc",加$就是变量
stage('编译'){
steps{
// 要做的所有事情
echo "编译..."
}
}
// 2.测试
stage('测试'){
steps{
// 要做的所有事情
echo "测试..."
}
}
// 3.打包
stage('打包'){
steps{
// 要做的所有事情
echo "打包..."
}
}
// 4.部署
stage('部署'){
steps{
// 要做的所有事情
echo "部署..."
}
}
}
}
- 重新运行,可以正常部署,且正常打印相关信息。
需要注意的点:
0、jenkins的家目录 /var/jenkins_home 已经被我们docker外部挂载了 /var/lib/docker/volumes/jenkins-data/_data。
1、WORKSPACE(工作空间)=/var/jenkins_home/workspace/java-devops-demo 每一个流水线项目,占用一个文件夹位置
2、BUILD_NUMBER=5;当前第几次构建
3、WORKSPACE_TMP(临时目录)=/var/jenkins_home/workspace/java-devops-demo@tmp
4. Jenkins步骤生成器与环境变量
以下流水线实战参照官方文档
-
进入上回的项目,打开流水线语法
-
片段生成器,这里可以生成的流水线脚本,是只适配当前项目的脚本,写在 steps{}中
- 声明式指令自动生成,可以生成一些指令
比如生成一些环境信息
复制生成的指令,添加到项目中,提交重新运行,输出正确的结果。
这里,凡是使用变量的时候,都使用双引号,
5. Jenkins 远程构建触发
-
首先要在配置中开启 触发远程构建,并设置令牌,我这里设置的令牌为
liulinfang -
新建一个用户,之后用新用户重新登陆,然后生成token
- 打开gitee,在gitee中输入URL
这里的URL拼写规则为:
http://
liulinfang【上面新建的用户名】
:
112de05b3fb46213ae78f6212f656ac2e8 【上面用户的token】
/job/java-devops-demo/build?token=liulinfang 【设置远程构建时下面提示的地址,加上身份验证令牌】
注意:这里需要使用公网ip地址,我这里的私网ip是无法访达的。
tag: 我来不及认真地年轻,待明白过来时,只能选择认真地老去。