Jenkins部署Docker与Jenkins流水线
接上篇
六、Jenkins自动化部署到Docker容器
1. 外挂文件的方式在docker容器中启动
-
# 拉取 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包已经被启动了
2. 将构建运行放入docker容器中(不构建镜像)
-
修改Jenkins构建前设置
-
修改部署后操作
-
重新构建,已经成功构建在容器中
3. 将构建运行放入docker镜像中(采用dockerfile)
-
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集群/并发构建
集群化构建可以有效提升构建效率,尤其是团队项目比较多或者子项目比较多的时候,可以并发在多台机器上执行构建。
1. 创建多主机,拥有构建环境
同上
2. 配置Jenkins节点
3. 配置Jenkins节点
将节点连接成功后,同步在节点主机上复制好Jenkins的一些jar包,这些都是不需要手动去操作的,同时还会自动启动一些jar文件。
4.配置并发构建/通过标签匹配构建
八、流水线 pipeline
流水线既能作为任务的本身,也能作为JenkinsFile
使用流水线可以让我们的任务从ui手动操作,转换为代码化,像docker的dockerfile一样,从shell命令到配置文件,更适合大型项目,可以让团队其他开发者同时参与进来,同时也可以编辑开发JenkinsWebUI不能完成的更复杂的构建逻辑,作为开发者可读性也更好。
1. 创建一个简单的pipeline工厂
-
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 可以从指定阶段再来一次
2. 基本语法
pipeline 定义一个流水线脚本
agent 指示 Jenkins 为整个流水线分配一个执行器(在 Jenkins 环境中的任何可用代理/节点上)和工作区。
stages 全部的工作都在这里执行
stage 每个工作开始
steps jenkinsfile 声明式脚本往这里面写
echo 写一个简单的字符串到控制台输出。
3. 安装Blue Ocean插件
-
3.1 安装插件
-
3.2 打开插件,它为我们提供了一套更简单明了的ui界面
-
3.3 功能更加强大
4. 使用pipeline自动打包docker镜像
1. 从git上拉取代码
-
1.1 通过流水线语法生成代码
-
加入语法中
2. 添加maven构建
-
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. jar包发布到服务器上
-
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中成功被启动
5. 使用JenkinsFile创建多分支job
主要是为了解决在git上针对不同的分支做不同的构建
1. 在BlueOcen中创建流水线
-
创建流水线
2. 设置Jenkinsfile文件的位置
3. 自动Scan成功
4. 多分支运行
-
这样,Jenkins就为我们按照分支内不同的JenkinsFile去构建了不同的流水线
6. 声明式流水线
-
好处
- 更像是在Jenkins Web UI中操作
- 可读性比较高
- 可以使用Blue Ocean UI自动生成
- 支持语法检查
-
坏处
- 代码逻辑能力比脚本弱,不能完成特别复杂的任务
7. 脚本式流水线
- 好处
- 更少的代码和弱规范要求
- 更灵活的自定义代码操作
- 不受约束,可以构建特别复杂的工作流和流水线
- 坏处
- 读写对编程要求比较高
- 比声明式流水线代码更加复杂
九、Jenkins项目构建选择特定的分支
-
安装Git Parameter
-
在项目的设置中添加设置
-
此时我们就可以通过选择具体分支来部署了
至此,我们已经可以通过Jenkins来实现一些中小型系统的CI/DI了,希望大家都去试试吧。
如果对你有帮助的话,记得点个赞再走哦!🤠文章来源:https://www.toymoban.com/news/detail-815783.html
文章来源地址https://www.toymoban.com/news/detail-815783.html
到了这里,关于Jenkins部署Docker与Jenkins流水线的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!