Jenkins 安装、部署Git代码、流水线、远程构建触发

175 阅读5分钟

云原生 从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/

登录:

img.png

这里需要查看密码,密码在 /var/jenkins_home/secrets/initialAdminPassword,查看密码有两种方式

  1. 使用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
  1. 看日志
docker ps
docker logs admiring_shtern

2. 自定义 Jenkins

img_1.png img_2.png

退出后重新登录:

img_3.png

到此安装结束。

3. Jenkins流水线 部署Git代码

  1. 创建一个git项目,并推送到远程仓库,我这里使用的是Gitee。

小技巧:这里可以使用gitee插件,直接推送到gitee仓库。我的代码仓库地址:https://gitee.com/liu_lin_fang/java-devops-demo.git

代码结构如下: image.png

  1. 新建任务
img_4.png
  1. 新建流水线【名字是自己起的,可以与项目名保持一致】
img_5.png
  1. 配置流水线。这里,可以在可视化界面去配置,也可以使用配置文件。我们先使用配置文件的方式去配置它。
img_6.png

这里选择流水线SCM。注意,这里的仓库是公共的,如果是私有的,还需要添加密钥。保存。

img_7.png
  1. 启用项目,回到主界面,打开Blue Ocean。任务还未运行,点击运行。
img_8.png

运行报错,点击可以查看报错原因。

img_9.png

报错原因如下:

img_10.png

问题为:找不到jenkins文件。

  1. 编写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 "部署..."
                }
            }
        }
    }
  1. 重新运行,可以正常部署,且正常打印相关信息。

img_11.png

需要注意的点:

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步骤生成器与环境变量

以下流水线实战参照官方文档

  1. 进入上回的项目,打开流水线语法

    img_12.png
  2. 片段生成器,这里可以生成的流水线脚本,是只适配当前项目的脚本,写在 steps{}中

img_13.png
  1. 声明式指令自动生成,可以生成一些指令
img_14.png

比如生成一些环境信息

img_15.png

复制生成的指令,添加到项目中,提交重新运行,输出正确的结果。

image.png

这里,凡是使用变量的时候,都使用双引号,

image.png

5. Jenkins 远程构建触发

  1. 首先要在配置中开启 触发远程构建,并设置令牌,我这里设置的令牌为liulinfang image.png

  2. 新建一个用户,之后用新用户重新登陆,然后生成token

    image.png
image.png
  1. 打开gitee,在gitee中输入URL

image.png 这里的URL拼写规则为:

http://

liulinfang【上面新建的用户名】

:

112de05b3fb46213ae78f6212f656ac2e8 【上面用户的token】

/job/java-devops-demo/build?token=liulinfang 【设置远程构建时下面提示的地址,加上身份验证令牌】

合起来之后的结果为:http://liulinfang:112de05b3fb46213ae78f6212f656ac2e8@192.168.219.100:8080/job/java-devops-demo/build?token=liulinfang

注意:这里需要使用公网ip地址,我这里的私网ip是无法访达的。


tag: 我来不及认真地年轻,待明白过来时,只能选择认真地老去。