Jenkins使用笔记
Jenkins是一款开源的CI/CD工具。用于自动化各种任务,包括构建、测试、部署。其主要功能通过插件拓展来实现。
Blue Ocean 是官方推荐的一款皮肤蓝色版皮肤。
安装Jenkins环境
需安装JDK8.0、docker、blueocean、gitlab。此处默认docker已安装
1、安装JDK
下载解压包,到本地,然后上传到远端解压。后,配置java运行环境。
https://blog.csdn.net/pdsu161530247/article/details/81582980
2、安装Jenkins
# 拉镜像
docker pull jenkinsci/blueocean # 官网推荐用这个镜像
# 查看镜像
docker images
# 建镜像实例
docker run ^
-u root ^ # 以root权限运行。如果jenkins用到某些宿主机程序又没有权限,可以通过添加权限分组解决
--rm ^ #退出删除
-d ^ #后台运行模式
--name jenkins
-p 49154:8080 ^
-p 50000:50000 ^
-v jenkins-data:/var/jenkins_home ^ # 目录映射,将容器卷映射到外部环境,方便查看
-v /var/run/docker.sock:/var/run/docker.sock ^ # 将容器内的套接字映射到宿主机上,否则jenkins运行docker会报错。原因是jenkins容器内没运行docker守护进程,要使用宿主上的进程
jenkinsci/blueocean
# 查容器
docker ps -a
# 进入容器命令行
docker exec -it jenkins /bin/bash
# 查初始化密码
cat /var/jenkins_home/secrets/initialAdminPassword
注意,首次登录后要创建管理员用户。admin/123
docker run -u root --name jenkins --rm -d -p 49154:8080 -p 50000:50000 -v /var/jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkinsci/blueocean
3、安装Gitlab
# 下载社区版
docker pull gitlab/gitlab-ce
# 安装社区版 gitlab
docker run --detach \
--hostname gitlab-server \
--publish 443:443 --publish 80:80 --publish 22:22 \
--name gitlab \
--restart always \
--volume /srv/gitlab/config:/etc/gitlab \
--volume /srv/gitlab/logs:/var/log/gitlab \
--volume /srv/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest
# 修改配置
vi /srv/gitlab/config/gitlab.rb
# 修改本机访问地址
external_url 'http://192.168.xx.xx/'
# 重启
docker restart gitlab
4、初始化Gitlab项目
1、gitlab创建空白项目
2、本地创建vue工程
3、本地工程内打开git bash命令行,设置gitlab空白项目为远端
git remote add origin <gitlab addr>
4、git fetch origin # 同步远端
5、git pull origin
6、git add . # 提交代码
7、git commit -m 'msg..'
8、git push origin master # 合并代码
打包前端工程并部署镜像
首个例子采用blueocean
自由风格方式在jenkins
交互界面创建脚本,达到自动编译、制作镜像、部署镜像能力。
要实现这个目标,需要:
Jenkins
拉取到gitlab
上的代码- 在
Jenkins
的工作空间安装node_modlues
依赖、将工程打包成dist
- 制作Docker镜像
- 运行镜像
1、初始化工程
在vue工程根目录下创建Dockerfile文件
,docker build
指令根据该文件去制作镜像。此处以nginx
为基础镜像,将前端包拷贝到/usr/share/nginx/html
下,这样可以利用nginx
的默认配置达到部署目的。
FROM nginx
COPY dist/ /usr/share/nginx/html
截图中jenkins
文件是声明式流水线文件script
内预制相应要执行的脚本;nginx.config
设置nginx配置项,方便替换nginx镜像内的默认配置文件。本例采用脚本式流水线只需添加Dockerfile即可。
git add Dockerfile # 将镜像文件提交到gitlab
git commit -m ''
git push origin
2、配置Jenkins环境
安装gitlab插件、安装nodeJs插件。如果不装Nodejs插件,则在流水线上无法选择node环境。
# 登录Jenkins
# 1.安装插件
Dashboard>系统管理>插件管理>可选插件。搜索并安装
# 2.配置全局环境
Dashboard>系统管理>全局工具配置。 找到NodeJS,安装NodeJS 14.17.5(我本地的版本)
3、创建流水线
# 1、创建流水线
Dashboard>新建任务>构建一个自由风格的软件项目
# 2、设置源码地址,并添加凭证
1)源码管理选择git,Repository URL输入工程地址
2)Credentials 的右下角选择高级,配置上gitlab的用户名、密码。再选择该凭证
3)选择构建*/master
# 3、构建环境
1)选择Provide Node & npm bin/ folder to PATH # 如果没配NodeJS环境,此处会没有选项
2)选择配置的Node版本
# 4、构建
1)安装打包
echo $PATH
node -v
npm -v
npm install
npm run build
2)制作镜像,启动镜像
docker stop myApp || true \
&& docker rm myApp || true \
&& docker build -t myApp . \
&& docker run -d -p 8989:80 --name myApp myApp
工程的容器会运行在宿主机上。
Jenkins启停操作
可以直接通过URL方式进行启停操作。
- restart 重启
- reload 重载
- exit 停止
http://192.168.xx.xx:49154/restart
http://192.168.xx.xx:49154/reload
http://192.168.xx.xx:49154/exit
Jenkins升级
删除原来的Jenkins容器,jenkinsci/blueocean
,使用新镜像jenkins/jenkins
用相同的命令参数创建容器,里面相关配置跟原来的内容一样。因为创建容器时把券映射到了相同的地方。
附录
问题1:gitalab启动容器后一直处在"starting"状态,登录报502。
解决办法:重启、重装、或者直接将其装在容量达标的物理机上。
我的是重启多次,在某一刻可用了。报502是因为gitlab中/opt/gitlab/var/unicorn/unicorn.pid
迟迟没有启动。过了几个小时再去看,状态变"healthy"了。
问题2:jenkins使用docker命令,报守护进程未启动。
原因:jenkins是容器模式运行,无法使用宿主的Docker进程,安装Docker插件后,Jenkins容器内docker守护进程没有启动。
解决办法:网上给出1、在jenkins的镜像基础上再加一层Docker镜像。2、套接字文件上添加tcp映射一个端口到宿主机上。可再容器内用docker -H tcp://ip:prot command
方式访问出去。3、启动jenkins容器时将套接字映射到宿主机上,容器内可直接使用宿主机的docker进程。
我使用方法3,-v /var/run/docker.sock:/var/run/docker.sock
将存储卷映射出去。此外可能还要添加docker角色运行Jenkins,否则可能会没权限。我是再启动时添加-u root
。
问题3:报指定代理"docker"无效WorkflowScript: 4: Invalid agent type "docker" specified.
解决办法:安装Docker、DockerPiple插件
问题4:执行shell脚本报Permission denied
没有权限
sh 'chmod 777 ./cicd/*.sh'