# 1. yum 包更新到最新。 sudo yum update # 2. 安装需要的软件包,yum-util提供yun-config-manager功能,另外两个是devicemapper驱动依赖的。 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # 3. 设置yum源为阿里云。 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 4. 安装docker。 sudo yum install docker-ce # 5. 安装完成后查看docker版本。 docker -v设置ustc的镜像(此处也可用阿里云免费镜像加速)
:ustc是老牌的linux镜像服务提供者了,还在遥远的ubuntu 5.04版本的时候就在用。ustc的docker镜像加速速度很快。ustc docker mirror的优势之一就是不需要注册,是真正的公共服务。
编辑该文件(没有该文件则新建):
1 | vim /etc/docker/daemon.json |
在该文件中输入如下内容:
1 2 3 | { "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"] } |
或阿里云的镜像加速(二选一)
1 2 3 | { "registry-mirrors": ["https://9cpn8tt6.mirror.aliyuncs.com"] } |
启动docker systemctl start docker 停止docker systemctl stop docker 重启docker systemctl restart docker 查看docker状态 systemctl status docker 开机启动docker systemctl enable dockerJenkins安装
docker pull jenkins/jenkins:lts创建目录
由于防止jenkins中重要文件因为容器损毁或删除导致文件丢失,因此创建文件对外挂载。
1 | mkdir -p /apps/Devops/jenkins |
并且需要对目录开放docker进程 *** 作的完全读写的权限
1 | chmod 777 /apps/Devops/jenkins |
1 | docker run -itd -p 9980:8080 -p 50000:50000 --restart always -v /apps/Devops/jenkins:/var/jenkins_home --name jenkins jenkins/jenkins:lts |
-p 端口映射:Jenkins是Java程序,默认端口是8080
打开Jenkins管理页面访问地址:http://192.168.137.119:9980/
如果出现下面现象,一般是阿里云的安全组没有打开和centos的防火墙
首先查看防火墙状态firewall-cmd --state
开启防火墙
1、启动firewall
systemctl start firewalld.service
2、设置开机自启
systemctl enable firewalld.service
3、重启防火墙
systemctl restart firewalld.service
在此以打开9980端口为例
开端口命令:firewall-cmd --zone=public --add-port=9980/tcp --permanent
重启防火墙:systemctl restart firewalld.service
打开阿里云安全组
打开阿里云官网,进入控制台
点击进入我的云服务器
点击我的阿里云服务器
点击到安全组,点击服务器名
开放阿里云安全组端口9980(入方向和出方向都配置好)其中要想外网访问你的端口号必须配置成0.0.0.0/0(阿里云我也是新学的,说的不好,请多指教)
再次访问地址:http://192.168.137.119:9980/
出现如上页面,代表jenkins启动成功。
查看日志获取初始密码执行以下命令:
1 | docker logs -f jenkins |
复制下图中红框内的初始密码。
当然,你也可以不通过日志查看,你可以进入黄色框中描述的文件查看初始密码也是一样的,二选一。
jenkins日志
将密码复制、粘贴到如下框框中,进入jenkins,需要等待数十秒(可能更久)!
jenkins密码输入
安装推荐的插件如下图所示,左侧显示安装建议的插件。右侧选择自定义安装插件。
先按照建议插件进行安装,点击左侧即可。
如果全部都能正确安装,更好。出现安装失败的插件,等待所有结束,下方会有Retry可以进行重试。
最后重试后,依旧没有安装成功的,可以先continue,完成初始化的步骤。随后参考这篇文章解决。
安装完成后会自动出现如下界面:
将信息输入对应输入框内,点击保存并完成,之后的步骤默认点击保存并完成即可。
成功安装Jenkins出现下图代表成功安装Jenkins:
安装成功之后重启一下jenkins容器:
1 | docker restart jenkins |
所需插件:Maven Integration
、Pipeline Maven Integration
、Gitlab
、Generic Webhook Trigger、SSH
、Publish Over SSH
、Docker
点击 Manage Jenkins(系统管理) ——> Manage Plugins(插件管理)
如图开始安装插件:
安装完成后,即可在插件管理下的已安装选项卡下看到刚刚已经安装的插件。
安装Gitlab插件
点击可选插件 ——> 过滤Gitlab插件 ——> 勾选Gitlab和Generic Webhook Triggerk ——> 点击直接安装
安装SSH插件和Publish Over SSH插件
安装Publish Over SSH插件的原因:因为本方式是使用docker启动jenkins服务,所以在jenkins后续执行构建任务时候,需要在build成功后,将服务的jar包(以spring boot)服务为例,需要将jar包拷贝到Dockerfile所在服务器的指定目录,进行微服务的启动;所以,此处需要配置SSH服务器的连接,意思就是在jenkins的任务结束后,去执行指定的服务器上的shell命令,做spring boot或cloud服务的镜像的构建,容器的运行,等一系列的事情。
点击可选插件 ——> 过滤SSH插件 ——> 勾选SSH和Publish Over SSH ——> 点击直接安装
安装Docker插件
点击可选插件 ——> 过滤Docker插件 ——> 勾选Docker ——> 点击直接安装
插件全部安装完成后,可以重启一下Jenkins。
添加凭据点击 Manage Jenkins(系统管理) ——> Manage Credentials(凭据管理)
点击添加凭据 ——> 输入宿主机服务器的用户名和密码等信息并保存
添加两个凭证方便后面我们登录gitlab
配置SSH remote hosts这个配置是干什么的呢?配置SSH连接Dockerfile所在服务器的相关信息,并添加凭证,最后测试连接并保存,以备后面使用!!!
点击 Manage Jenkins(系统管理) ——> 系统配置
找到配置 ——> 下拉选择SSH remote hosts
如下图,输入对应的信息,并校验是否连接成功!成功后,点击应用 ——> 点击保存
全局工具配置由于我们要实现的是SpringBoot项目的自动化部署 *** 作,所以需要安装JDK、Git、Maven、Docker。
安装JDK
可以安装多个,根据项目JDK版本需求。
输入自定义JDK名称 ——> 勾选自动安装 ——> 输入Oracle账户、密码 ——> 选择JDK版本 ——> 勾选同意协议
安装Git
输入自定义Git名称 ——> 勾选自动安装
安装Git
安装Maven
输入自定义名称 ——> 勾选自动安装 ——> 选择版本
安装Maven
安装Docker
输入自定义名称 ——> 勾选自动安装
安装Docker
最后,点击应用 ——> 点击保存即可。
新建Jenkins任务 点击新建任务,输入名称注意:本名称一般和项目名称一致,因为本名称会在jenkins工作空间下生成目录,类似于IDEA或Eclipse的工作空间的概念。所以,一般情况下,保证本名称=项目名称=docker镜像名称=docker容器名称 这样能尽可能的减轻jenkins配置的shell命令的复杂性!(空间命名要小写:因为镜像名不允许存在大写字母)
选择构建一个Maven项目(因为是Spring Boot的服务)
源码管理输入描述信息,源码管理选择Git,从gitlab复制克隆地址粘贴到Repository URL中,没有报错就表示OK的,(注意,这里我是克隆HTTP方式的地址,如果你是克隆SSH方式的地址,你需要添加Credentials,配置一下就可以了)
构建触发器接下来将会生成供gitlab配置webhook使用的URL和Token,请记录下来,后面会使用。
触发构建URL
点击高级,拉下来找到Generate并点击,生成一串Secret Token。
添加webhook前往gitlab,进入要构建的项目,在setting中选择Webhooks,输入URL和Secret Token 这两在上面图中已经给你标注了,去掉Enable SSL verification的勾选。
构建环境勾选Add timestamps to the Console Output,等下可以看到控制台打印的信息,这个根据自己的需求勾选。
Pre Steps(构建之前的步骤)配置前一步需要做的事情是:清理本项目在jenkins的workspace中的历史文件夹。
你可以不用知道WORKSPACE具体的地址在哪里,因为下方有链接可以查看到当前jenkins中有哪些可用的变量供你使用。
默认WORKSPACE地址:/var/jenkins_home/workspace
(如果你jenkins是docker启动的,并且挂载了目录在宿主机,那你在宿主机也是可以看到的,即 /apps/Devops/jenkins/workspace
)
本处选择的是执行shell,则表示本处配置的shell命令,是默认在jenkins容器中执行的,而不是在宿主机上。
下拉选择执行 shell:
在执行shell的命令中输入以下命令,设置全局变量:
SERVER_NAME_1=my-steam-game echo "=========================>>>>>>>工作空间WORKSPACE的地址:$WORKSPACE " cd $WORKSPACE echo "=========================>>>>>>>进入工作空间WORKSPACE,清除工作空间中原项目的工作空间$SERVER_NAME_1 " rm -rf $SERVER_NAME_1 echo "=========================>>>>>>>清除工作空间中原项目的工作空间$SERVER_NAME_1 ......成功success"
注意:本处的SERVER_NAME_1=my-steam-game是配置项目的名称
Build(构建)我们是SpringBoot项目,所以用到maven,这里设置一下全局 *** 作Goals and options
clean package -U -Dmaven.test.skip=true
Post Steps(执行任务)只在jenkins构建成功后,才执行这一步。
因为最后的构建成功的maven项目的jar包是以docker启动服务为目的,所以最后的docker *** 作,一定是在jenkins容器以外的服务器上运行的,可能是本机宿主机,也可能是远程的服务器,这个根据自己的情况去配置。
本处选择,在远程的SSH执行shell脚本。
选中只有构建成功才执行这些命令,然后选择Execute shell script on remote host using ssh。
Command 输入脚本 :
#=====================================================================================
#=================================定义初始化变量======================================
#=====================================================================================
# *** 作/项目路径(Dockerfile存放的路劲)
BASE_PATH=/apps/my-steam-game
# jenkins构建好的源jar路径
SOURCE_PATH=/apps/Devops/jenkins/workspace
#【docker 镜像】【docker容器】【Dockerfile同目录下的jar名字[用它build生成image的jar]】【jenkins的workspace下的项目名称】
#这里都以这个命名[微服务的话,每个服务都以ms-swapping这种格式命名]
#注意统一名称!!!!!
SERVER_NAME=my-steam-game
#容器id [grep -w 全量匹配容器名] [awk 获取信息行的第一列,即容器ID] [无论容器启动与否,都获取到]
CID=$(docker ps -a | grep -w "$SERVER_NAME" | awk '{print $1}')
#镜像id [grep -w 全量匹配镜像名] [awk 获取信息行的第三列,即镜像ID]
IID=$(docker images | grep -w "$SERVER_NAME" | awk '{print $3}')
#源jar完整地址 [jenkins构建成功后,会在自己的workspace/项目/target 下生成maven构建成功的jar包,获取jar包名的完整路径]
#例如:/apps/Devops/jenkins/workspace/my-steam-game/target/wtemplete-generator-1.0-SNAPSHOT.jar
SOURCE_JAR_PATH=$(find "$SOURCE_PATH/$SERVER_NAME/wtemplete-server/target/" -name "*wtemplete-server*.jar" )
DATE=`date +%Y%m%d%H%M%S`
#=====================================================================================
#============================对原本已存在的jar进行备份================================
#=====================================================================================
# 备份
function backup(){
if [ -f "$BASE_PATH/$SERVER_NAME.jar" ]; then
echo "=========================>>>>>>>$SERVER_NAME.jar 备份..."
mv $BASE_PATH/$SERVER_NAME.jar $BASE_PATH/backup/$SERVER_NAME-$DATE.jar
echo "=========================>>>>>>>备份老的 $SERVER_NAME.jar 完成"
else
echo "=========================>>>>>>>老的$BASE_PATH/$SERVER_NAME.jar不存在,跳过备份"
fi
}
#=====================================================================================
#=========================移动最新源jar包到Dockerfile所在目录=========================
#=====================================================================================
# 查找源jar文件名,进行重命名,最后将源文件移动到项目环境
function transfer(){
echo "=========================>>>>>>>源文件完整地址为 $SOURCE_JAR_PATH"
echo "=========================>>>>>>>重命名源文件"
if [ -d "$SOURCE_PATH/$SERVER_NAME/target" ]; then
echo 'exists'
else
mkdir -p "$SOURCE_PATH/$SERVER_NAME/target"
fi
mv $SOURCE_JAR_PATH $SOURCE_PATH/$SERVER_NAME/target/$SERVER_NAME.jar
echo "=========================>>>>>>>最新构建代码 $SOURCE_PATH/$SERVER_NAME/target/$SERVER_NAME.jar 迁移至 $BASE_PATH"
cp $SOURCE_PATH/$SERVER_NAME/target/$SERVER_NAME.jar $BASE_PATH
echo "=========================>>>>>>>迁移完成Success"
rm -fr $SOURCE_PATH/$SERVER_NAME/target/
echo "清理jar文件"
}
#=====================================================================================
#==================================构建最新镜像=======================================
#=====================================================================================
# 构建docker镜像
function build(){
#无论镜像存在与否,都停止原容器服务,并移除原容器服务
echo "=========================>>>>>>>停止$SERVER_NAME容器,CID=$CID"
docker stop $CID
echo "=========================>>>>>>>移除$SERVER_NAME容器,CID=$CID"
docker rm $CID
#无论如何,都去构建新的镜像
if [ -n "$IID" ]; then
echo "=========================>>>>>>>存在$SERVER_NAME镜像,IID=$IID"
echo "=========================>>>>>>>移除老的$SERVER_NAME镜像,IID=$IID"
docker rmi $IID
echo "=========================>>>>>>>构建新的$SERVER_NAME镜像,开始---->"
cd $BASE_PATH
docker build -t $SERVER_NAME:latest .
echo "=========================>>>>>>>构建新的$SERVER_NAME镜像,完成---->"
else
echo "=========================>>>>>>>不存在$SERVER_NAME镜像,构建新的镜像,开始--->"
cd $BASE_PATH
docker build -t $SERVER_NAME:latest .
echo "=========================>>>>>>>构建新的$SERVER_NAME镜像,结束--->"
fi
}
#=====================================================================================
#==============================运行docker容器,启动服务===============================
#=====================================================================================
# 运行docker容器
function run(){
backup
transfer
build
docker run --name $SERVER_NAME -d -p 50010:50010 $SERVER_NAME:latest
}
#入口
run
OK,到这里基本的任务已经新建成功,至于后续的两个步骤,根据自己的需求自行配置,没有难度的。
点击应用,保存。
测试测试push事件触发自动化构建和部署,点击test下拉选择push events,出现HTTP 200表示OK了。
测试webhook
回到Jenkins可以看到任务列表,查看构建信息等。
构建信息
待Jenkins构建成功之后,在服务器上执行命令:docker ps
,可以看到我们启动起来的 SpringBoot 容器:
docker启动的容器
在浏览器输入:http://服务器ip:端口/
即可访问刚自动部署的项目:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)