- 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的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
Hortonworks 数据平台 HDP 3.0 有 spark 2.3 和 Hive 3.1,默认情况下 spark 2.3 应用程序(pyspark/spark-sql 等)使用 spark 数据
是否最好让一个软件仓库包含多个文件夹,这些文件夹映射到工作区中的不同路径。或者一个仓库中的多个文件夹映射到多个工作区,或多个仓库映射到多个工作区。 有人对此事有任何实用建议吗? 我还注意到,当我在仓库
Git 是分布式源代码控制系统,对吧。如何在没有集中存储库的情况下连接两个开发人员。 我们的团队使用 Github,如果两个开发人员想在同一个分支上工作,似乎需要将该分支推送到远程,然后他们才能访问它
Maven – 仓库 什么是 Maven 仓库? 在Maven 的术语中,仓库是一个位置(place),例如目录,可以存储所有的工程 jar 文件、library jar 文件、插件或任何其他的工
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 3年前关闭。 Improve this questi
我开始将 git 与我的 .git 目录以及网络根目录中的其他所有内容一起使用。进一步阅读后,这似乎是一种不好的做法。我现在将我的应用程序和系统文件夹放在网络根目录之外。我的网络根目录中唯一剩下的就是
有没有可能没有历史的 Git 仓库?例如,我有一个我工作的本地 Git 存储库,我想将最新版本推送到生产服务器。生产服务器上不应存储任何历史记录。我该怎么做? 最佳答案 你可以看到命令 git arc
Laravel 中的 Repositories 有什么优势?它似乎是从应用程序的业务逻辑中抽象出模型层。虽然这似乎只是让整个请求生命周期变得更加复杂,但收效甚微。 有人可以阐明 Laravel 存储库
我有一个本地 git 服务器在我的 NAS 上运行,我正在我的笔记本电脑和工作站上进行开发,所有这些都在我的本地网络中。所以,如果我想在一个新的空 repo 中开始一个项目,我会关注 this ans
我们正在使用 SVN 来存储 maven 依赖项(组织限制不能像现在那样使用 nexus 或 artifactory maven 存储库)。 SVN 在使用 https 协议(protocol)的网络
我想允许某人查看我在我的私有(private)存储库中所做的工作。我该怎么做? 我看了https://help.github.com/articles/making-a-private-reposit
我试图阻止同事在 git 中再次推送已删除的标签(因为它被错误地推送了一次)。 我知道如何在本地执行此操作以及如何将其推送到远程以及如何指示我的同事以正确的方式从他们的本地存储库中删除已删除的标签。
我已经使用 url 克隆了一个 friend 的 git repo git 克隆 https://github.com/user/repo_name.git 然后我创建了我的分支,提交并尝试将我的代码
我目前正在我的代理机构安排比赛。我想对开发人员可以使用的模块进行一些管理。 是否可以托管 Play 模块和 Maven 库的镜像存储库并将 play 配置为仅使用这些存储库? 我已阅读此内容 docu
我正在尝试在我的 readme.md 中嵌入图像用于在 GitHub 上显示。我以前在公共(public)存储库中没有遇到任何问题,格式如下: ![header image](https://raw.
我想访问公司内部Artifactory实例上自定义开发的Gradle插件。对于公司内部发生的每一个Gradle构建,我都希望如此。我是否缺少任何东西,或者建议的方法是在每个项目的每个Gradle构建之
我想保留我在 docker hub 帐户中使用的图像,同时保持对拉取图像的引用。就像你在 github 上 fork 一个项目一样。 目前我已经尝试过jwilder/nginx-proxy图片。现在我
Perforce 中是否有命令可以获取客户端从软件仓库映射到特定文件夹的信息? 示例: 我有仓库位置//depot/myfolder/somefile.java 我想知道哪些客户端将此位置映射到哪个路
我被指派为一个项目开发一项功能。在几周的时间里,我将花几天时间研究该功能。我将克隆中央仓库。然后我将在本地工作 3 周。在此过程中,我会多次将我的进度提交到我的 repo 协议(protocol)中。
我发现自己越来越喜欢将Rstudio与R markdown文件(.rmd)一起使用,并且我非常喜欢“编织HTML +发布到Rpubs”的便利与同事共享我的工作。不幸的是,发布的文件必须是公开可见的,而
我是一名优秀的程序员,十分优秀!