linux搭建jenkins

151 阅读5分钟

介绍

Jenkins是一个独立的开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。前身是Hudson是一个可扩展的持续集成引擎。可用于自动化各种任务,如构建,测试和部署软件。Jenkins可以通过本机系统包Docker安装,甚至可以通过安装Java Runtime Environment的任何机器独立运行。

主要用于:

  1. 持续、自动地构建/测试软件项目,如CruiseControl与DamageControl。

  2. 监控一些定时执行的任务。

Jenkins特点

  • 开源免费;

  • 跨平台,支持所有的平台;

  • master/slave支持分布式的build;

  • web形式的可视化的管理页面;

  • 安装配置超级简单;

  • tips及时快速的帮助;

  • 已有的200多个插件

参考文档

www.jenkins.io/zh/doc/pipe… wiki.eryajf.net/pages/3298.…

安装与部署

docker安装jenkins

1.拉取镜像

docker pull jenkins/jenkins

2.创建jenkins本地挂载目录

mkdir /home/jenkins

3.运行容器

docker run -itd --name jenkins -e  TZ=Asia/Shanghai  -u root    --restart=always -p 8989:8080 -p 50000:50000 -v /home/jenkins:/var/jenkins_home  -v /var/run/docker.sock:/var/run/docker.sock -v  /usr/bin/docker:/usr/bin/docker   --env JAVA_OPTS="-Xms256m -Xmx512m -XX:MaxNewSize=256m"   jenkins/jenkins:latest

命令介绍:
--name jenkins_docker 给容器取的名称
-e  TZ=Asia/Shanghai 设置时区
-u root 设置用户
-p 8989:8080 将Jenkins容器默认8080端口映射到 宿主机8989端口
-u root 使用root用户权限
-v /home/jenkins:/var/jenkins_home 映射Jenkins数据目录,防数据丢失
-v /var/run/docker.sock:/var/run/docker.sock 让容器能使用docker的命令
-v  /usr/bin/docker:/usr/bin/docker 挂载宿主机docker到容器中(docker目录根据你的安装目录进行修改)
-d 后台运行
-- env JAVA_OPTS 设置内存空间

注意:是把docker命令行映射到容器中 可通过which docker命令查看docker命令行路径

如果报以下报错

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?

需要修改下目录权限, 因为当映射本地数据卷时,/home/jenkins目录的拥有者为root用户,而容器中jenkins user的uid为1000

sudo chown -R 1000:1000 /home/jenkins

4.访问jenkins

浏览器输入地址:http://ip:8989

image.png

密码获取方式

第一种:

查看宿主机已经挂载过来的目录

cat  /home/jenkins_home/secrets/initialAdminPassword

第二种: 查看容器日志

docker logs 容器id

clipboard.png

点击继续

5.安装插件

更改插件地址

vim  /home/jenkins_home/hudson.model.UpdateCenter.xml

http://updates.jenkins-io/update-center.json
改成
http://mirror.xmission.com/jenkins/updates/update-center.json

修改完成会自动映射到容器中

选择安装推荐插件 微信图片_20220408144914.png

clipboard.png

6.创建用户

image.png

image.png

image.png

7.新建item

image.png

8.创建流水线

image.png

9.创建参数化构建过程

弄完上面git就算是配置好了,但是地址跟分支都写死了,每次使用的时候到配置里面去修改也不太方便,Jenkins提供参数化构建过程可以解决这个问题。

勾选参数化构建过程,选择选项参数

image.png

image.png

10.通过git仓库分支构建参数化过程

git url 一般不会变,但是分支时不时会新建、删除,每次这样添加是不是很麻烦。Jenkins提供了git parameter插件可以解决这个问题 在插件管理中安装插件git parameter,安装成功后回到添加参数会多一个Git参数

image.png

搜索git parameter进行安装

image.png

选择添加Git参数 image.png

选择参数类型为分支

image.png

进入工程,选择Build with Parameters 可以看到仓库分支已经显示

image.png

11.配置读取仓库自带的jenkinsfile文件

最新jenkins默认已经安装git插件,如果没有则在插件管理中心搜过git自行安装

点击添加jenkins凭据

image.png 输入gitlab账号和密码

image.png

在Credentials选择已添加的gitlab凭据

注意:repository url输入的是gitlab项目地址,端口号为docker映射的宿主机端口

image.png 指定分支请填写 :参数化构建过程中Git参数的名称,用于获取你选的哪个分支

脚本路径填写你项目中的Jenkisfile所在的路径,这里我默认为根目录

12.在项目根目录下编写jenkinsfile文件

image.png

上传文件到gitlab仓库中

13.开始构建

image.png

选择指定分支,开始构建

image.png

如果出现以上错误,取消轻量级检出的勾选

image.png

14.配置全局环境变量

点击系统管理进入系统配置

image.png

勾选环境变量,可自由添加任意键值对 image.png

注意:变量中的HARBOR_URL不要写http前缀,后期打镜像标签会用到

docker build  -t  http://124.221.106.75:8077/bbcl_fms/bbcl-fms-financial-api:v2  -f  ./app/financial-api/Dockerfile .

报错:
docker build -t http://124.221.106.75:8077/bbcl_fms/bbcl-fms-financial-api:v2 -f ./app/financial-api/Dockerfile .
invalid argument "http://124.221.106.75:8077/bbcl_fms/bbcl-fms-financial-api:v2" for "-t, --tag" flag: invalid reference format


在jenkinsfile文件中读取

image.png

也可读取jenkinsfile内置的一些环境变量,如下所示

BUILD_ID 当前构建的 ID,与 Jenkins 版本 1.597+ 中创建的构建号 BUILD_NUMBER 是完全相同的。

BUILD_NUMBER 当前构建号,比如 “18”。

BUILD_TAG 字符串 jenkins–$ {JOB_NAME}-${BUILD_NUMBER}。可以放到源代码、jar 等文件中便于识别。

BUILD_URL 可以定位此次构建结果的 URL(比如 http://buildserver/jenkins/job/MyJobName/17/ )

EXECUTOR_NUMBER 用于识别执行当前构建的执行者的唯一编号(在同一台机器的所有执行者中)。这个就是你在“构建执行状态”中看到的编号,只不过编号从 0 开始,而不是 1JAVA_HOME 如果你的任务配置了使用特定的一个 JDK,那么这个变量就被设置为此 JDKJAVA_HOME。当设置了此变量时,PATH 也将包括 JAVA_HOME 的 bin 子目录。

JENKINS_URL Jenkins 服务器的完整 URL,比如 https://example.com:port/jenkins/ (注意:只有在“系统设置”中设置了 Jenkins URL 才可用)。

JOB_NAME 本次构建的项目名称,如 “foo” 或 “foo/bar”。

NODE_NAME 运行本次构建的节点名称。对于 master 节点则为 “master”。

WORKSPACE workspace 的绝对路径