优秀的企业网站设计,用php如何建设网站,手机网站做分享到微信,邢台市最新人事调整在 Linux 系统上安装 Jenkins 服务#xff0c;以及配置自动化构建项目 前置准备环境#xff1a;docker、docker-compose、jdk、maven 一、环境搭建
1. Jenkins 安装
#xff08;1#xff09;拉取镜像
# 安装镜像包#xff0c;默认安装最新版本
docker pull jenkins/jen…在 Linux 系统上安装 Jenkins 服务以及配置自动化构建项目 前置准备环境docker、docker-compose、jdk、maven 一、环境搭建
1. Jenkins 安装
1拉取镜像
# 安装镜像包默认安装最新版本
docker pull jenkins/jenkins
# 查看是否安装成功
docker images2启动并创建 Jenkins 容器 Jenkins工作空间目录每新建一个项目都会在该目录下创建对应文件夹拉取的代码等文件均在该路径下。 若是需要推送文件到目标服务器默认从该项目文件夹下加载。例如: 工作空间目录为/var/jenkins_home/workspace项目名称为demo 那么推送文件时所在路径为/var/jenkins_home/workspace/demo只需在脚本中维护后续路径即可 启动容器
docker run -u root -d \
-p 8080:8080 -p 50000:50000 \
-v /var/jenkins_home/workspace/:/var/jenkins_home/workspace \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
-v /usr/local/java:/usr/local/java \
-v /usr/local/maven/apache-maven-3.9.9:/usr/local/maven \
-e JAVA_OPTS-Dorg.apache.commons.jelly.tags.fmt.timeZoneAsia/Shanghai \
--restartunless-stopped \
--name jenkins-server jenkins/jenkins:2.426.2-lts启动命令解释
docker run -u root -d \
-p 80:8080 -p 81:50000 \ # 镜像8080端口映射到宿主机80端口
-v /var/jenkins_home/workspace/:/var/jenkins_home/workspace \ # 挂载 jenkins 工作空间目录
-v /var/run/docker.sock:/var/run/docker.sock \ # 挂载 docker
-v /usr/bin/docker:/usr/bin/docker \ # 挂载 docker
-v /usr/local/java:/usr/local/java \ # 挂载 jdk
-v /usr/local/maven/apache-maven-3.9.9:/usr/local/maven \ # 挂载 maven
-e JAVA_OPTS-Dorg.apache.commons.jelly.tags.fmt.timeZoneAsia/Shanghai \ # 同步时间
--restartunless-stopped \ # 重启策略
--name jenkins-server jenkins/jenkins:2.426.2-lts # jenkins-serve自定义容器名称 jenkins/jenkins:2.426.2-lts镜像名称及版本安装并创建用户
浏览器打开 http://127.0.0.1:8080输入超级管理密码进行登录
# 进入容器查看管理员密码
docker exec -it jenkins-server bash
cat /var/jenkins_home/secrets/initialAdminPassword选择安装推荐的插件安装完成后创建管理员用户 2. Harbor 镜像仓库安装
1下载在线安装包
mkdir -p /root/software/harbor
cd /home/software/harbor
wget https://all-share-public.oss-cn-shanghai.aliyuncs.com/install-harbor/harbor-online-installer-v2.10.1.tgz
tar -zxvf harbor-online-installer-v2.10.1.tgz
cd harbor2配置 harbor.yml 文件
cp harbor.yml.tmpl harbor.yml编辑 harbor.yml并在对应位置写入以下内容
hostname: 192.168.1.1 # 设置为指定部署机器IP
......
http:
port: 8081 # 从80修改为指定端口可选
https: # 注释掉 https 相关无证书必须注释掉
......
harbor_admin_password: Harbor12345 # admin用户指定密码 可选
......
data_volume: /root/software/harbor/data # 数据存储目录可选
......
log:
......
local:
......
location: /root/software/harbor/logs # 日志目录可选3编译安装
./prepare
./install.sh浏览器打开 http://192.168.1.1:8081admin/Harbor12345新建镜像仓库 4修改 docker 配置
配置 docker 镜像源添加 Harbor 镜像仓库地址需重启 docker 生效
vim /etc/docker/daemon.json{
......
insecure-registries:[192.168.1.1:8081]
.....
}重启 docker
systemctl daemon-reload
systemctl restart docker5设置开机自启动
vim /usr/lib/systemd/system/harbor.service[Unit]
DescriptionHarbor service with docker-compose
Requiresdocker.service
Afterdocker.service
[Service]
Restartalways
#Typeoneshot
RemainAfterExityes
StandardErrornull
StandardOutputnull
# Harbor实际安装路径
WorkingDirectory/home/software/harbor/harbor
# Remove old containers
ExecStartPre/usr/local/bin/docker-compose -f /home/software/harbor/harbor/dockercompose.yml down -v
# Compose up
ExecStart/usr/local/bin/docker-compose -f /home/software/harbor/harbor/dockercompose.yml up -d
# Compose down, remove containers
ExecStop/usr/local/bin/docker-compose -f /home/software/harbor/harbor/dockercompose.yml down -v
[Install]
WantedBymulti-user.target设置自启动
systemctl daemon-reload
systemctl enable harbor3. Sonarqube 代码检测工具安装
1下载在线安装包
mkdir -p /home/software/sonarqube
cd /home/software/sonarqube
wget https://all-share-public.oss-cn-shanghai.aliyuncs.com/install-sonarqube/sonarqube.tar
tar -zxvf sonarqube.tar
cd sonarqube若是需要修改端口、挂载文件路径编辑当前目录下 docker-compose.yml 文件即可
# 执行安装程序
./install.sh2创建 Token 令牌 浏览器打开 http://192.168.1.1:8021账号admin/admin 创建 Token 令牌生成的 Token 值要记录下来配置 Jenkins 流水线时需要使用
二、Jenkins配置
1. 插件安装 需要安装以下插件 Publish Over SSH用于Jenkins 发送文件到远程服务器 Maven IntegrationMaven 插件打包项目 GitLabGitlab 插件拉取代码 DingTalk钉钉插件用于推送项目构建状态等通知 系统管理 - 插件管理安装完成后重启 Jenkins 2. 配置 JDK 和 Maven
点击系统管理 - 全局工具配置 3. 配置 SSH 连接
点击系统管理 - 系统配置 - 找到SSH
4. 配置全局凭据
点击系统管理 - 凭据管理 - System/全局 - Add Credentials 根据合适的认证方式创建凭据示例为用户名密码 5. 配置钉钉通知 此配置为构建项目时钉钉推送通知若是不需要可忽略 1生成钉钉 webhook 地址和密钥
打开钉钉 选择要推送的群 - 群设置 - 机器人 - 添加机器人 - 自定义 - 添加 打开如下页面 2Jenkins中配置钉钉信息 三、Jenkins 构建项目
Jenkins中构建项目的类型有很多实际上每种类型的构建都可以完成一样的构建过程与结果只是在操作方式、灵活度等方面有所区别在实际开发中可以根据自己的需求和习惯来选择。从灵活度上来说流水线类型是最高的。常用的有以下三种
自由风格软件项目FreeStyle Project推荐流水线项目Pipeline Project推荐Maven项目Maven Project
1. 新建任务选择流水线 2. 配置构建参数
用于在构建项目时动态维护的参数例如 构建的代码分支、构建环境等
3. 构建流水线Pipeline【重点】
Jenkins Pipeline Doc tools 工具定义。可定义在脚本中使用的工具等需在 系统管理 - 全局配置管理 中维护此处填写对应的 maven 和 jdk 名称即可 environment变量定义。可将代码仓库地址项目部署路径等信息在该模块下定义方便维护 stagesPipeline 各阶段定义。是必须出现的指令包含一个或多个 stagePipeline 的大部分工作在此执行。可以在此处进行项目代码拉取、打包、推送仓库、部署等一系列操作 postpost 是在 Pipeline 或者 stages 执行结束后的操作不是必须出现的指令。例如发送项目构建成功、失败等通知 以下为示例 Pipeline 脚本可根据实际情况进行修改。
pipeline {agent anytools {// 需在 系统管理 - 全局配置管理 中维护此处填写对应的 maven 和 jdk 名称即可maven maven3.9.9jdk java17}environment {// 项目名称 projectName ruoyi-cloud-plus// projectCodeParentPath ./ruoyi-cloud-plus // 项目父模块代码路径// projectCodeSubPath ./ruoyi-cloud-plus/admin-server // 项目子模块代码路径(如果没有子模块则删除此变量下面引用此变量的地方均修改为 $projectCodeParentPath) // 项目部署服务器路径serverPath /home/project/ruoyi-cloud-plus // git仓库的url地址gitUrl http://192.168.1.1/gitlab/demo/ruoyi-cloud-plus.git// git仓库的认证凭据ID, 可前往 系统管理- 凭据管理 查看gitCredentialsId git-demo// sonarqube 的 url 地址sonarquebUrl http://192.168.1.1:8021// sonarqube 的 token 令牌 sonarquebToken sqa_05fxxxxxxxxxxxx227b1// harbor 镜像仓库的用户名harborUser admin// harbor镜像仓库的用户密码harborPasswrodHarbor12345// harbor仓库的url地址harborUrl 192.168.1.1:8081// harbor仓库项目名称harborRepo demo-library// 钉钉机器人IDdingTalk Jenkins-DingTalk}stages {stage(【拉取代码】) {steps{git branch: params.branchName, credentialsId: env.gitCredentialsId, url: env.gitUrl}}stage(【编译打包】) {steps {sh mvn clean package -Dmaven.test.skiptrue -P ${params.active}}}// stage(【sonarqueb代码质量检测】) { // steps {// sh // /var/jenkins_home/sonar-scanner/bin/sonar-scanner \\// -Dsonar.projectKey${env.projectName}-${params.branchName} \\ // -Dsonar.projectName${env.projectName}-${params.branchName} \\ // -Dsonar.sourceEncodingUTF-8 \\// -Dsonar.sources${env.projectCodeParentPath} \\// -Dsonar.java.binaries${env.projectCodeSubPath}/target/ \\// -Dsonar.host.url${env.sonarquebUrl} \\// -Dsonar.login${env.sonarquebToken}// // }// }stage(【构建镜像到Harbor仓库】) {steps {sh echo -------- 1. 构建镜像 ------------docker build -t ruoyi-nacos:${params.imageTag} -f ruoyi-nacos/Dockerfile .docker build -t ruoyi-auth:${params.imageTag} -f ruoyi-auth/Dockerfile .docker build -t ruoyi-gateway:${params.imageTag} -f ruoyi-gateway/Dockerfile .docker build -t ruoyi-system:${params.imageTag} -f ruoyi-modules/ruoyi-system/Dockerfile .echo -------- 2. 镜像打标签 ------------docker login -u ${harborUser} -p ${harborPasswrod} ${harborUrl}docker tag ruoyi-nacos:${params.imageTag} ${harborUrl}/${harborRepo}/ruoyi-nacos:${params.imageTag}docker tag ruoyi-auth:${params.imageTag} ${harborUrl}/${harborRepo}/ruoyi-auth:${params.imageTag}docker tag ruoyi-gateway:${params.imageTag} ${harborUrl}/${harborRepo}/ruoyi-gateway:${params.imageTag}docker tag ruoyi-system:${params.imageTag} ${harborUrl}/${harborRepo}/ruoyi-system:${params.imageTag}echo -------- 3. 推送镜像至Harbor ------------docker push ${harborUrl}/${harborRepo}/ruoyi-nacos:${params.imageTag}docker push ${harborUrl}/${harborRepo}/ruoyi-auth:${params.imageTag}docker push ${harborUrl}/${harborRepo}/ruoyi-gateway:${params.imageTag}docker push ${harborUrl}/${harborRepo}/ruoyi-system:${params.imageTag}echo -------- 4. 删除未被任何容器使用的镜像 ------------// docker image prune -f}}stage(【拉取镜像并运行】) { steps { sshPublisher(publishers: [sshPublisherDesc(configName: service-160, transfers: [sshTransfer(cleanRemote: false, excludes: , execCommand: #!/bin/bashcd ${env.serverPath} ./deploy.sh ${env.harborUrl} ${env.harborUser} ${env.harborPasswrod} ${env.harborRepo} ${params.imageTag}, execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: [, ], remoteDirectory: ${env.servePath}, remoteDirectorySDF: false, removePrefix: docker, sourceFiles: docker/docker-compose.yml)], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: true)])}}}// 若是不需要配置钉钉推送则不需要下面的配置 post { success { dingtalk ( robot: ${dingTalk}, type:MARKDOWN,title: ${projectName}项目构建成功, text: [ ### ${projectName}项目构建成功, ---,- 环境: ${params.active}, - 分支: ${params.branchName}, - 持续时间: ${currentBuild.durationString}, - 执行人${currentBuild.buildCauses.shortDescription} ]) }failure { dingtalk ( robot: ${dingTalk}, type:MARKDOWN, title: ${projectName}项目构建失败, text: [ ### ${projectName}项目构建失败, ---,- 环境: ${params.active}, - 分支: ${params.branchName}, - 持续时间: ${currentBuild.durationString}, - 执行人${currentBuild.buildCauses.shortDescription} ]) } unstable { dingtalk ( robot: ${dingTalk}, type:MARKDOWN, title: ${projectName}项目构建异常, text: [ ### ${projectName}项目构建异常, ---, - 环境: ${params.active}, - 分支: ${params.branchName}, - 持续时间: ${currentBuild.durationString}, - 执行人${currentBuild.buildCauses.shortDescription} ]) } }
}4. 部署项目服务器上预置脚本 该步骤可忽略需同时修改流水线脚本中【拉取镜像并运行】stage 对该脚本的引用 在需要部署应用的服务器中然后在 environment 中 serverPath 路径下编写 deploy.sh记得赋予执行权限
下面是提供的 deploy.sh 示例模版需根据自身项目修改
#!/bin/bash
# 接收启动时的传参
harborUrl$1
harborUser$2
harborPasswrod$3
harborRepo$4
imageTag$5# 拼接完整镜像地址变量在docker-compose文件中可引用
nacos_image$(echo nacos_image\$harborUrl/$harborRepo/ruoyi-nacos:$imageTag\)
auth_image$(echo auth_image\$harborUrl/$harborRepo/ruoyi-auth:$imageTag\)
gateway_image$(echo gateway_image\$harborUrl/$harborRepo/ruoyi-gateway:$imageTag\)
system_image$(echo system_image\$harborUrl/$harborRepo/ruoyi-system:$imageTag\)# 新建 docker-compose 环境变量文件, 并写入镜像地址
envFile.env
rm -f $envFileecho $nacos_image $envFile
echo $auth_image $envFile
echo $gateway_image $envFile
echo $system_image $envFile# 登录 Harbor 仓库
docker login -u ${harborUser} -p ${harborPasswrod} ${harborUrl}# 停止并删除服务
docker-compose down# 启动 nginx
docker-compose up -d nginx-web# 启动 nacos
docker-compose up -d nacos# 启动 ruoyi-gateway ruoyi-auth ruoyi-system
docker-compose up -d ruoyi-gateway ruoyi-auth ruoyi-system# 删除未被任何容器使用的镜像
docker image prune -f至此配置完成进行构建验证
四、Jenkins Pipeline语法
1. stages
Pipeline 阶段定义是必须出现的指令每个 Pipeline 包含一个或多个 stagePipeline 的大部分工作在此执行。可以在此处进行 项目代码拉取、打包、推送仓库、部署等一系列操作。其中 steps 块中可以包含script 块。
pipeline {agent anystages {stage(第一阶段) {steps {echo 第一阶段 拉取代码}}stage(第二阶段) {steps {echo 第二阶段 项目打包}}}
}2. post
post是在Pipeline或者 stage执行结束后的操作不是必须出现的指令可设置以下触发条件 always无论 Pipeline 或者 stage 运行完成的状态如何都会运行changed只有当前 Pipeline 或者 stage 运行的状态与先前运行状态不同时才能运行fixed只有当前一次构建失败或者不稳定而当前 Pipeline 或者 stage 运行成功时运行regression前一次运行成功而当前 Pipeline 或者 stage 运行状态为 failure, unstable 或者 aborted 时运行aborted只有当前 Pipeline 或者 stage 处于 “aborted” 状态时才能运行通常是手动终止。failure当前 Pipeline 或者 stage 处于 “failed” 状态时才运行success当前 Pipeline 或者 stage 具有 “success” 状态时才运行unstable当前 Pipeline 或者 stage 具有 “unstable” 状态才运行unsuccessful当前 Pipeline 或者 stage 不是 “success” 状态时运行cleanup不管 Pipeline 或 stage 的状态如何在每一个 post 条件被执行之后运行。 pipeline {agent anystages {stages {stage(第一阶段) {steps {echo 第一阶段 拉取代码}}}post {success {echo 代码拉取成功!}failure {echo 代码拉取失败!}always {echo goodbye}}
}3. 流水线语法生成
在配置流水线页面点击流水线语法可打开语法生成器页面
1在此处可选择需要生成语法的类型
拉取代码 git:Git推送文件到远程服务器sshPublisher:Send build artifacts over SSH
2填写对应的参数信息此处以文件推送示例
推送文件路径配置可结合文章开头Jenkins工作空间目录描述进行配置其中docker/docker-compose.yml就位于/var/jenkins_home/workspace/demo路径下此处只需配置docker/docker-compose.yml即可 填写完成后点击下方的 “生成流水线脚本” 进行生成最后复制生成的脚本到 steps 中即可