赞
踩
接上篇
# 拉取 JDK 11 的Docker镜像
docker pull openjdk:11
# 移动 宿主机上的jar包
mv /jenkins/build_jar/first1/jenkins_demo-1.0-SNAPSHOT.jar /docker/jenkins_jar/
# 启动镜像 需要做端口映射与容器卷映射
docker run -d -p 8081:8081 --privileged=true --name demo_out -v /docker/jenkins_jar/first:/jar_packet openjdk:11 java -jar /jar_packet/jenkins_demo-1.0-SNAPSHOT.jar
-d 后台运行
-p 将宿主机和容器的8081端口进行映射
privileged=true 容器内拥有管理员权限
-v 将宿主机jar包与容器内jar包进行关联映射
java -jar /jar_packet/jenkins_demo-1.0-SNAPSHOT.jar 启动jar包
# 查看容器是否启动
docker ps
#访问我们之前的网站可以看到 jar包已经被启动了
修改Jenkins构建前设置
修改部署后操作
重新构建,已经成功构建在容器中
1.编写dockerfile,放入项目中,注意不能和依赖的包同级
写好可以尝试使用 docker build it demo .
来尝试构建一下
FROM openjdk:11
EXPOSE 8081
WORKDIR /docker/jenkins_jar
ADD first /jar_packet/first
ENTRYPOINT ["java","-jar","/jar_packet/jenkins_demo-1.0-SNAPSHOT.jar"]
2.修改构建设置
修改Jenkins构建前设置
修改构建后设置
重新构建,查看docker镜像是否被生成,jar包是否被启动
集群化构建可以有效提升构建效率,尤其是团队项目比较多或者子项目比较多的时候,可以并发在多台机器上执行构建。
同上
将节点连接成功后,同步在节点主机上复制好Jenkins的一些jar包,这些都是不需要手动去操作的,同时还会自动启动一些jar文件。
流水线既能作为任务的本身,也能作为JenkinsFile
使用流水线可以让我们的任务从ui手动操作,转换为代码化,像docker的dockerfile一样,从shell命令到配置文件,更适合大型项目,可以让团队其他开发者同时参与进来,同时也可以编辑开发JenkinsWebUI不能完成的更复杂的构建逻辑,作为开发者可读性也更好。
1.1 创建一个pipeline工程
1.2 配置pipeline工程
1.3 编写构建脚本
pipeline { //定义一个流水线脚本
agent any //设置一个执行器,如上面配的节点
stages { //所有工作的开始
stage('拉取git代码') { //一项工作的开始,括号里的是该工作的名称
steps { //声明式脚本往这里面写
echo '拉取完成' //控制台打印
}
}
stage('构建代码') { //一项工作的开始,括号里的是该工作的名称
steps { //声明式脚本往这里面写
echo '构建完成' //控制台打印
}
}
}
}
1.4 运行工程
1.5 查看输出日志
1.7 可以从指定阶段再来一次
pipeline 定义一个流水线脚本
agent 指示 Jenkins 为整个流水线分配一个执行器(在 Jenkins 环境中的任何可用代理/节点上)和工作区。
stages 全部的工作都在这里执行
stage 每个工作开始
steps jenkinsfile 声明式脚本往这里面写
echo 写一个简单的字符串到控制台输出。
3.1 安装插件
3.2 打开插件,它为我们提供了一套更简单明了的ui界面
3.3 功能更加强大
1.1 通过流水线语法生成代码
加入语法中
2.1 引入maven
添加
tools{ maven "maven-3.8.6" } 后面的名称是你在global tool中配置的maven的name
2.2 使用命令打包
sh "mvn clean package" //sh表示执行一行命令
sh """
mvn clean package
"""
//这种是表示多行命令
因为我们的pom文件不在工作目录下,我们需要cd到子文件夹中
cd jenkins_demo/
//所以构建命令为
sh """
cd jenkins_demo/
mvn clean package
"""
2.3 启动后,可以看到包已经被构建在文件中
3.1 构建语法
3.2 将构建的语法放入到脚本中
pipeline { //定义一个流水线脚本
agent any //设置一个执行器,如上面配的节点
tools{
maven "maven3"
}
stages { //所有工作的开始
stage('拉取git代码') { //一项工作的开始,括号里的是该工作的名称
steps { //声明式脚本往这里面写
git credentialsId: 'efca258b-ab2a-48d7-bc23-17e2a69945ba', url: 'https://gitee.com/lv-hao/jenkins_demo.git'
echo '拉取完成' //控制台打印
}
}
stage('构建代码') { //一项工作的开始,括号里的是该工作的名称
steps { //声明式脚本往这里面写
sh """
cd jenkins_demo
mvn clean package
"""
echo '构建完成' //控制台打印
}
}
stage('清理旧代码') { //一项工作的开始,括号里的是该工作的名称
steps { //声明式脚本往这里面写
sshPublisher(publishers: [sshPublisherDesc(configName: 'LinuxServer', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''rm -rf /docker/jenkins_jar/firstPipeline/*
rm -f /docker/jenkins_jar/dockerfile
docker stop demo
docker rm -f demo
docker rmi -f demo''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
echo '清理旧代码完成' //控制台打印
}
}
stage('部署运行') { //一项工作的开始,括号里的是该工作的名称
steps { //声明式脚本往这里面写
sshPublisher(publishers: [sshPublisherDesc(configName: 'LinuxServer', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''mkdir -p /docker/jenkins_jar/firistPipeline
mv /jenkins/build_jar/firistPipeline/* /docker/jenkins_jar/firistPipeline/''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/firistPipeline', remoteDirectorySDF: false, removePrefix: 'jenkins_demo/target', sourceFiles: '**/jenkins_demo/target/*.jar'), sshTransfer(cleanRemote: false, excludes: '', execCommand: '''mv /jenkins/build_jar/dockerfile /docker/jenkins_jar/dockerfile
cd /docker/jenkins_jar
docker build -t demo .
docker run -d -p 8081:8081 --name demo demo''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/', remoteDirectorySDF: false, removePrefix: 'jenkins_demo/docker', sourceFiles: 'jenkins_demo/docker/dockerfile')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
echo '部署运行完成' //控制台打印
}
}
}
}
3.3 保存运行后,可以看到我们的项目在docker中成功被启动
主要是为了解决在git上针对不同的分支做不同的构建
创建流水线
这样,Jenkins就为我们按照分支内不同的JenkinsFile去构建了不同的流水线
好处
坏处
安装Git Parameter
在项目的设置中添加设置
此时我们就可以通过选择具体分支来部署了
至此,我们已经可以通过Jenkins来实现一些中小型系统的CI/DI了,希望大家都去试试吧。
如果对你有帮助的话,记得点个赞再走哦!
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/262290
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。