- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具。本文使用Jenkins自动构建git仓库中的微服务项目,包括Jenkins的安装,插件的安装;系统环境的配置;docker镜像构建的远程SSH命令;部署到指定的机器等.
Jenkins的官方安装文档地址:
https://www.jenkins.io/doc/book/installing/linux/#red-hat-centos 。
下面以CentOS为例演示安装过程:
使用下面命令,Jenkins添加仓库 。
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
如果已经导入过key, rpm --import 可能会报错,忽略,继续下面命令:
yum install fontconfig java-11-openjdk
yum install jenkins
使用下面命令编辑服务 。
vim /usr/lib/systemd/system/jenkins.service
修改用户为root 。
User=root
Group=root
修改启动端口 。
Environment="JENKINS_PORT=16060"
修改完成后使用下面命令应用:
systemctl daemon-reload
使用以下命令启用Jenkins服务在启动时启动:
sudo systemctl enable jenkins
使用以下命令启动Jenkins服务:
sudo systemctl start jenkins
使用命令检查Jenkins服务的状态:
sudo systemctl status jenkins
如果你启动报错:
Job for jenkins.service failed because a timeout was exceeded. See "systemctl status jenkins.service" and "journalctl -xe" for details.
可使用下面方式:
方式一:
d /etc/init.d
# 启动
./jenkins start
# 停止
./jenkins stop
# 状态
./jenkins status
方式二:
修改配置文件中的用户名为root 。
# 老版本
vim /etc/sysconfig/jenkins
JENKINS_USER="root"
# 新版本
vim /usr/lib/systemd/system/jenkins.service
修改为:
User=root
Group=root
更多解决方案见:
https://zhuanlan.zhihu.com/p/609882788 。
当您首次访问新的Jenkins实例时,系统会要求您使用自动生成的密码来解锁它.
浏览器访问: http://ip:16060 (自己配置的端口),等到解锁Jenkins页面出现 。
从Jenkins控制台日志输出中,复制自动生成的字母数字密码(在2组星号之间).
cat /var/lib/jenkins/secrets/initialAdminPassword
解锁Jenkins之后,可以选择安装Jenkins的插件,根据需要选择 。
之后,创建管理员用户.
我这里直接跳过了上述步骤,如果你和我一样,请使用下面账户登陆 。
账户:admin 。
密码: cat /var/lib/jenkins/secrets/initialAdminPassword 。
更改密码 。
进入控制面板后,坐上角点击账户名进入 Configure ,找到 Password ,修改之后 Save 即可.
在面板页面点击 Manage Jenkins ,在 System Configuration 下点击 Plugins 。
在插件页面,左侧选择 Available plugins 。
为了方便自动部署仓库中的微服务项目,请安装如下插件:
Localization: Chinese (Simplified) :中文汉化插件 。
Docker :Docker集成插件(可不安装应该) 。
GitLab Plugin :GitLab集成插件 。
Publish Over SSH :远程发布插件 。
SSH2 Easy :远程脚本执行插件 。
安装后需要重启Jenkins 。
在CentOS中还需要安装如下:
本次安装的JDK版本为 11.0.20 和自己项目的JDK版本保持一致最合适 。
JDK下载地址: https://www.oracle.com/cn/java/technologies/downloads/#java11 。
下载之后解压到服务器的 /usr/java/ 目录下,重命名为 jdk-11.0.20 。
tar -zxvf jdk-11.0.20_linux-x64_bin.tar.gz
添加配置信息 。
vim /etc/profile
添加如下内容:
JAVA_HOME=/usr/java/jdk-11.0.20
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
export JAVA_HOME PATH CLASSPATH
保存之后,使用下面命令应用:
source /etc/profile
使用下面命令验证安装 。
java -version
Maven下载地址: https://maven.apache.org/download.cgi 。
下载到 /usr/local/maven/ ,目录下并解压:
tar -zxvf apache-maven-x.x.x-bin.tar.gz
添加阿里云镜像地址 。
vim /usr/local/maven/apache-maven-3.9.3/conf/settings.xml
找到 mirrors ,添加镜像地址 。
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
添加配置信息 。
vim /etc/profile
修改为如下内容:
JAVA_HOME=/usr/java/jdk-11.0.20
MAVEN_HOME=/usr/local/maven/apache-maven-3.9.3
PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
export JAVA_HOME PATH CLASSPATH MAVEN_HOME
保存之后,使用下面命令应用:
source /etc/profile
使用下面命令验证安装 。
mvn -v
Docker官方安装文档: https://docs.docker.com/engine/install/centos/ 。
安装yum工具 。
yum install -y yum-utils
更新本地镜像源 。
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
yum makecache fast
安装Docker 。
yum install -y docker-ce
启动docker 。
sudo systemctl start docker
使用下面命令验证安装 。
docker -v
配置Docker镜像加速 。
阿里云镜像加速配置文档:
https://help.aliyun.com/zh/acr/user-guide/accelerate-the-pulls-of-docker-official-images 。
使用下面命令安装即可 。
yum install -y git
配置Jenkins的Tool,在面板页面点击 Manage Jenkins 。
在 System Configuration 下点击 System ,找到 Server Group Center 新增一个 Group 。
新增一个 Server 。
在 System Configuration 下点击 Tools ,找到 JDK ,勾掉 Install automatically ,选择系统安装的JDK 。
勾掉 Install automatically ,选择系统安装的Git 。
勾掉 Install automatically ,选择系统安装的Maven 。
勾掉 Install automatically ,选择系统安装的Docker 。
配置完成后点击 Save 保存即可! 。
推送微服务到仓库中,使用Gitee新建仓库,并将微服务父工程及其子模块全部推送到Gitee仓库 。
在有 src 目录但是没有启动类的子模块的pom文件中加入一下内容:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>none</mainClass>
<classifier>execute</classifier>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
在需要构建镜像的服务子模块的pom中加入如下内容,注意修改jar文件名,和服务名保持一致 。
<properties>
<docker.image>docker_storage</docker.image>
</properties>
<build>
<!-- 打包的jar包文件名 -->
<finalName>leadnews-article</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.3.6</version>
<configuration>
<repository>${docker.image}/${project.artifactId}</repository>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
</plugins>
</build>
在需要构建镜像的服务子模块的根目录(和 src 以及 target 同级)创建Dockerfile文件 。
FROM openjdk:11
VOLUME /tmp
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENV JAVA_OPTS="\
-server \
-Xms256m \
-Xmx512m \
-XX:MetaspaceSize=256m \
-XX:MaxMetaspaceSize=512m"
# 空参数,方便创建内容时传参
ENV PARAMS=""
ENTRYPOINT ["sh", "-c", "java -jar ${JAVA_OPTS} /app.jar ${PARAMS}"]
JAR_FILE
是构建参数,在pom文件中有定义 修改yaml配置信息(可不修改) 。
spring:
profiles:
active: prod
修改完成后,重新推送到仓库中!! 。
如果使用了Nacos作为配置中心,还需要进行如下修改 。
将配置名改为 leadnews-user-dev.yml 和 leadnews-user-prod.yml 各一份 。
leadnews-user-dev.yml
:为开发配置 leadnews-user-prod.yml
:为生产配置 leadnews-user
:为微服务的 spring.application.name
在微服务分模块开发中,这步是必不可少的。为了保证所有模块的依赖正确性,需要提前将所有模块安装到Maven仓库中.
创建Jenkins任务,在首页右侧点击新建任务,选择 构建一个自由风格的软件项目 ,点击确定; 。
在 配置 页面的源码管理部分,添加一个Git仓库, Credentials 为Git仓库的用户名和密码 。
在 Build Steps 中新增一个构建步骤,选择 调用顶层 Maven 目标 。
版本选择自己配置的Maven,目标中填入install命令 。
clean install -Dmaven.test.skip=true
完成后点击 保存 即可,在新页面点击右侧 立即构建 。
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for lead-news 0.0.1-SNAPSHOT:
[INFO]
[INFO] lead-news .......................................... SUCCESS [ 1.347 s]
[INFO] leadnews-model ..................................... SUCCESS [ 5.066 s]
[INFO] leadnews-utils ..................................... SUCCESS [ 0.576 s]
[INFO] leadnews-common .................................... SUCCESS [ 2.494 s]
[INFO] leadnews-feign-api ................................. SUCCESS [ 0.982 s]
[INFO] leadnews-gateway ................................... SUCCESS [ 0.318 s]
[INFO] leadnews-app-gateway ............................... SUCCESS [ 0.641 s]
[INFO] leadnews-wemedia-gateway ........................... SUCCESS [ 0.665 s]
[INFO] leadnews-service ................................... SUCCESS [ 0.141 s]
[INFO] leadnews-user ...................................... SUCCESS [ 1.374 s]
[INFO] leadnews-basic ..................................... SUCCESS [ 0.016 s]
[INFO] leadnews-file-starter .............................. SUCCESS [ 0.787 s]
[INFO] leadnews-article ................................... SUCCESS [ 2.475 s]
[INFO] leadnews-wemedia ................................... SUCCESS [ 2.404 s]
[INFO] leadnews-schedule .................................. SUCCESS [ 1.330 s]
[INFO] leadnews-search .................................... SUCCESS [ 2.417 s]
[INFO] leadnews-behavior .................................. SUCCESS [ 1.913 s]
[INFO] leadnews-test ...................................... SUCCESS [ 0.057 s]
[INFO] es-init ............................................ SUCCESS [ 0.619 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 26.854 s
[INFO] Finished at: 2023-08-15T13:50:30+08:00
[INFO] ------------------------------------------------------------------------
Finished: SUCCESS
这一步是将提供服务的微服务模块构建为Docker镜像,确保该模块的pom文件配置了构建命令,且根目录下有Dockerfile文件;否则参考 修改项目配置 。
1、同样创建一个 自由风格 的Jenkins任务,Git仓库配置同上 。
2、在 Build Steps 中添加 调用顶层 Maven 目标 ,目标中填入如下命令:
clean install -Dmaven.test.skip=true dockerfile:build -f leadnews-service/leadnews-user/pom.xml
3、在 Build Steps 中添加 执行 shell ,目标中填入如下命令:
if [ -n "$(docker ps -a -f name=$JOB_NAME --format '{{.ID}}')" ]; then
# 删除之前的容器
docker rm -f $(docker ps -a -f name=$JOB_NAME --format '{{.ID}}')
fi
# 清理镜像
docker image prune -f
# 启动docker服务
docker run -d --net=host -e PARAMS="--spring.profiles.active=prod" --name $JOB_NAME docker_storage/$JOB_NAME
#JOB_NAME
为Jenkins任务的名称, 需要和构建的jar包文件名以及Docker镜像名保持一致 构建日志:
[INFO] Building jar: /var/lib/jenkins/workspace/leadnews-user/leadnews-service/leadnews-user/target/leadnews-user-docker-info.jar
[INFO] Successfully built docker_storage/leadnews-user:latest
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 18.869 s
[INFO] Finished at: 2023-08-16T13:16:25+08:00
[INFO] ------------------------------------------------------------------------
[leadnews-user] $ /bin/sh -xe /tmp/jenkins7230786785147070619.sh
++ docker ps -a -f name=leadnews-user --format '{{.ID}}'
+ '[' -n de7f106527bc ']'
++ docker ps -a -f name=leadnews-user --format '{{.ID}}'
+ docker rm -f de7f106527bc
de7f106527bc
+ docker image prune -f
+ docker run -d --net=host -e PARAMS=--spring.profiles.active=prod --name leadnews-user docker_storage/leadnews-user
ee78a237a4d8647b5e305f2d0a12b437ddc887d69d63e04dd6d238d67b6f705c
Finished: SUCCESS
来到系统中,查看构建的镜像 。
[root@VM-28-13-centos maven]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker_storage/leadnews-user latest 61d0675c5e36 2 minutes ago 759 MB
查看运行的容器 。
[root@VM-28-13-centos maven]# docker ps
CONTAINER ID IMAGE CREATED STATUS PORTS NAMES
ee78a237a4d8 docker_storage/leadnews-user 3 minutes ago Up 3 minutes leadnews-user
如果需要将构建的镜像在其他机器上启动,需要配置一个镜像仓库,将构建的镜像推送到镜像仓库,然后其他机器从镜像仓库中拉取镜像并启动容器 。
下载最新Registry镜像 。
docker pull registry
启动Registry镜像服务 。
docker run -d -p 5000:5000 --name registry -v /usr/local/docker/registry:/var/lib/registry registry
访问地址:
http://ip:5000/v2/_catalog
对于使用 systemd 的系统,请在 /etc/docker/daemon.json 中写入如下内容 。
{
"insecure-registries": [
"ip:5000"
]
}
重启Dokcer 。
systemctl restart docker
构建参数 。
名称: docker_registry # 仓库名
默认值: 124.221.23.47:5000 # 镜像仓库地址
shell脚本 。
image_tag=$docker_registry/docker_storage/$JOB_NAME
echo '================docker镜像清理================'
if [ -n "$(docker ps -a -f name=$JOB_NAME --format '{{.ID}}')" ]; then
# 删除之前的容器
docker rm -f $(docker ps -a -f name=$JOB_NAME --format '{{.ID}}')
fi
# 清理镜像
docker image prune -f
# 创建TAG
docker tag docker_storage/$JOB_NAME $image_tag
echo '================docker镜像推送================'
# 推送镜像
docker push $image_tag
# 删除Tag
docker rmi $image_tag
echo '================docker镜像清理================'
新增构建步骤,选择 远程执行命令 。
echo '================拉取最新镜像================'
docker pull $docker_registry/docker_storage/$JOB_NAME
echo '================删除清理容器镜像================'
if [ -n "$(docker ps -a -f name=$JOB_NAME --format '{{.ID}}')" ]; then
# 删除之前的容器
docker rm -f $(docker ps -a -f name=$JOB_NAME --format '{{.ID}}')
fi
# 清理镜像
docker image prune -f
echo '================启动容器================'
docker run -d --net=host -e PARAMS="--spring.profiles.active=prod" --name $JOB_NAME $docker_registry/docker_storage/$JOB_NAME
最后此篇关于使用Jenkins部署Git仓库微服务项目的文章就讲到这里了,如果你想了解更多关于使用Jenkins部署Git仓库微服务项目的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在使用 NetBeans 开发 Java 中的 WebService,并使用 gradle 作为依赖管理。 我找到了this article关于使用 gradle 开发 Web 项目。它使用 Gr
我正在将旧项目从 ant 迁移到 gradle(以使用其依赖项管理和构建功能),并且在生成 时遇到问题>eclipse 项目。今天的大问题是因为该项目有一些子项目被拆分成 war 和 jar 包部署到
我已经为这个错误苦苦挣扎了很长时间。如果有帮助的话,我会提供一些问题的快照。请指导我该怎么办????在我看来,它看起来一团糟。 *** glibc detected *** /home/shivam/
我在 Ubuntu 12.10 上运行 NetBeans 7.3。我正在学习 Java Web 开发类(class),因此我有一个名为 jsage8 的项目,其中包含我为该类(class)所做的工作。
我想知道 Codeplex、GitHub 等中是否有任何突出的项目是 C# 和 ASP.NET,甚至只是 C# API 与功能测试 (NUnit) 和模拟(RhinoMocks、NMock 等)。 重
我创建了一个 Maven 项目,包装类型为“jar”,名为“Y”我已经完成了“Maven 安装”,并且可以在我的本地存储库中找到它.. 然后,我创建了另一个项目,包装类型为“war”,称为“X”。在这
我一直在关注the instructions用于将 facebook SDK 集成到我的应用程序中。除了“helloFacebookSample”之外,我已经成功地编译并运行了所有给定的示例应用程序。
我想知道,为什么我们(Java 社区)需要 Apache Harmony 项目,而已经有了 OpenJDK 项目。两者不是都是在开源许可下发布的吗? 最佳答案 事实恰恰相反。 Harmony 的成立是
我正在尝试使用 Jsoup HTML Parser 从网站获取缩略图 URL我需要提取所有以 60x60.jpg(或 png)结尾的 URL(所有缩略图 URL 都以此 URL 结尾) 问题是我让它在
我无法构建 gradle 项目,即使我编辑 gradle 属性,我也会收到以下错误: Error:(22, 1) A problem occurred evaluating root project
我有这个代码: var NToDel:NSArray = [] var addInNToDelArray = "Test1 \ Test2" 如何在 NToDel:NSArray 中添加 addInN
如何在单击显示更多(按钮)后将主题列表限制为 5 个(项目)。 还有 3(项目),依此类推到列表末尾,然后它会显示显示更少(按钮)。 例如:在 Udemy 过滤器选项中,当您点击查看更多按钮时,它仅显
如何将现有的 Flutter 项目导入为 gradle 项目? “导入项目”向导要求 Gradle 主路径。 我有 gradle,安装在我的系统中。但是这里需要设置什么(哪条路径)。 这是我正在尝试的
我有一个关于 Bitbucket 的项目。只有源被提交。为了将项目检索到新机器上,我在 IntelliJ 中使用了 Version Control > Checkout from Ve
所以,我想更改我公司的一个项目,以使用一些与 IDE 无关的设置。我在使用 Tomcat 设置 Java 应用程序方面有非常少的经验(我几乎不记得它是如何工作的)。 因此,为了帮助制作独立于 IDE
我有 2 个独立的项目,一个在 Cocos2dx v3.6 中,一个在 Swift 中。我想从 Swift 项目开始游戏。我该怎么做? 我已经将整个 cocos2dx 项目复制到我的 Swift 项目
Cordova 绝对是新手。这些是我完成的步骤: checkout 现有项目 运行cordova build ios 以上生成此构建错误: (node:10242) UnhandledPromiseR
我正在使用 JQuery 隐藏/显示 li。我的要求是,当我点击任何 li 时,它应该显示但隐藏所有其他 li 项目。当我将鼠标悬停在文本上时 'show all list item but don
我想将我所有的java 项目(223 个项目)迁移到gradle 项目。我正在使用由 SpringSource STS 团队开发的 Gradle Eclipse 插件。 目前,我所有的 java 项目
我下载this Eclipse Luna ,对于 Java EE 开发人员,如描述中所见,它支持 Web 应用程序。我找不到 file -> new -> other -> web projects
我是一名优秀的程序员,十分优秀!