本篇讲述linux(centos)搭建jenkins并实现自动拉取仓库中的项目以及自动完成项目的发布操作。
在linux环境下安装jenkins的官网地址
安装jenkins的依赖java
参考我之前的篇目,注意jenkins要求java版本为11或17
安装jenkins
//通过wget写入jenkins仓储地址
wget -O /etc/yum.repos.d/jenkins.repo \
https://pkg.jenkins.io/redhat-stable/jenkins.repo
//导入jenkins.io.key
rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
//yum update
yum upgrade
//安装java依赖这步为可选,如果你之前没安装过
yum install java-11-openjdk
//yum安装jenkins
yum install jenkins
//重载守护进程
systemctl daemon-reload
启动jenkins
//设置开机启动
systemctl enable jenkins
//启动jenkins (默认是8080端口 如果端口被占用需要修改端口)
systemctl start jenkins
//查看jenkins状态
systemctl status jenkins
如果你未按照jenkins官方的安装步骤,之前已经安装了java,启动可能出现问题。
解决方案:
//配置jenkins里的jdk路径
vi /etc/init.d/jenkins
//查看java位置
which java
修改jenkins的端口
//修改jenkins.service 找到Environment="JENKINS_PORT=8080"项修改为你需要的端口号
vi /usr/lib/systemd/system/jenkins.service
//重载守护进程
systemctl daemon-reload
//再启动nginx
如果修改为你自己的端口之后 注意开启防火墙
直接通过war包方式启动jenkins
//该方式启动jenkins 如果ctrl+c结束之后 程序自动结束
java -jar /usr/share/java/jenkins.war --httpPort=8787 //--httpPort可指定启动端口
通过cat命令查看jenkins密码
cat /var/lib/jenkins/secrets/initialAdminPassword
到此页面选择安装推荐的插件即可
通过jenkins自动化拉取仓库单层netcore项目仅包含api一层发布到docker中
这是我的一个netcore项目 里面已经包含Dockerfile,注意Dockerfile为开始项目时自动生成无需修改即可
这里首先要确保宿主机或者docker里面安装了net相应版本的运行时环境,具体如何安装这里暂不叙述,以后补充
新建Item
点击jenkins控制面板里面的第一项新建Item
输入一个任务名称 选择freestyle project(自由项目)
进入配置界面
进入源码管理,设置一个源码拉取的地址,也就是你项目所在地址
添加git仓库访问的用户名密码
jenkins配置gitee仓储url 出现403 Crumb异常 需要勾选全局配置里面的跨域访问
勾选上跨站请求伪造保护
执行docker脚本
下面是Build Steps执行的shell内容还可以根据自己的要求进行shell脚本优化,这里只是一个小小的demo
#!/bin/bash
# 获取短版本号
GITHASH=`git rev-parse --short HEAD`
#拉取运行时(如果宿主机已经安装了运行时这里可以不拉取) 来自Dockerfile的第一行 FROM
echo --------------pull net runtime...----------
docker pull mcr.microsoft.com/dotnet/aspnet:7.0
echo ---------------Building Docker Image...--------
#构建镜像 到
docker build -t odsdemo:$GITHASH .
#把构建的镜像 归于最近的镜像
docker tag odsdemo:$GITHASH odsdemo:latest
echo ---------------Launching Container...----------
#强制删除容器 注意这里是docker rm不是docker rmi(这是删除镜像)
docker rm -f odsdemo1
#根据最近的镜像构建启动容器
docker run -d -p 5001:80 --name odsdemo1 odsdemo:latest
到这一步就可以应用开始构建项目了,到这里会出现异常ERROR: permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get “http://%2Fvar%2Frun%2Fdocker.sock/_ping”: dial unix /var/run/docker.sock: connect: permission denied。
解决方案:
1)解决不能操作这个/var/run/docker.sock的问题
//查看该文件
ls -al /var/run/docker.sock//结果srw-rw----. 1 root docker 0 Feb 14 00:49 /var/run/docker.sock 只有root可以操作
//赋予777权限
sudo chmod 777 /var/run/docker.sock
再次尝试构建项目,发现成功了。
//查看运行的容器
docker ps
访问buildSteps配置的5001端口看看,发现访问不了,注意防火墙添加端口。
//防火墙开启端口
firewall-cmd --zone=public --add-port=5001/tcp --permanent
//重载防火墙
firewall-cmd --reload
访问成功
2)解决命令没有权限问题
docker默认安装是以root用户安装的,所以执行只能以root用户执行。如果使用普通账户,比如在search镜像时就会出现此类错误。
docker 守护进程启动的时候,会默认赋予名字为docker的用户组读写Unix socket的权限,因此只要创建docker用户组,
并将当前用户加入到docker用户组中,那么当前用户就有权限访问Unix socket了,进而也就可以执行docker相关命令。
将jenkins所用的用户添加到docker用户组中,操作需要使用root权限。
//查看当前docker用户组
cat /etc/group | grep docker
//将当前用户添加到docker组
usermod -a -G docker jenkins //docker后面跟jenkins的用户名 我这里由于是创建了自己的用户需要用自己的用户名在后面 例如wy
//更新用户组
newgrp docker
设置构建超时时间(可选)
文件从jenkins上拉取之后的存储空间位置所在
这就是Dockerfile执行时,【.】这个点所处的目录就是项目工作空间Dockerfile所在目录,然后进行拷贝 构建镜像 等操作。
根据版本提交自动通知jenkins构建项目
webhook
由于需要一个能被gitee访问的服务器,之前我采用的本地服务器,如果需要根据git提交之后,自动通知jenkins构建项目这里不现实,那么我们可以采用定时构建等方式来模拟。具体方法这里暂时不介绍,后面再说。一般是需要把jenkins这边生成的webhook设置到对应项目的webhook里面也就是实现一个项目提交后推送到jenkins的一个回调地址