第13章 CI/CD 与 Jenkins
13.1 平台登录页面
13.1.1 GitLab-8098-root
13.1.2 Jenkins-8080-zhangsan
13.1.3 SonarQube-9000-admin
13.1.4 harbor-80-admin
13.2 CI/CD 与 DevOps
13.2.1 CI/CD 简介
CI => Continuous Integration,持续集成。即将持续不断更新的代码经构建、测试后也持续不断的集成到项目主干分支。
CD => 包含两层含义:Continuous Delivery,持续交付,和 Continuous Deployment,持续部署。
持续交付:是持续集成的后续步骤,持续频繁地将软件的新版本交付到类生产环境预发,即交付给测试、产品部门进行集成测试、API 测试等验收,确保交付的产物可直接部署
持续部署:是持续交付的后续步骤,将持续交付的产物部署到生产环境
13.2.2 DevOps简介
百度百科中是这样介绍 DevOps 的:
DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。
它是一种重视“软件开发人员(Dev)”和“IT 运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。
DevOps 是一种思想,是一种管理模式,是一种执行规范与标准。
13.2.3 CI/CD 与 DevOps 关系
CI/CD 是目标,DevOps 为 CI/CD 目标的实现提供了前提与保障
13.3 系统架构图
最终要搭建出如下图所示架构的系统
13.4 Idea中 Git配置
13.4.1 Git简介
百度百科中是这样介绍 Git 的:
Git(读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。也是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件
13.4.2 Git的工作流程
13.4.3 Git的下载与安装
从 Git 的官网下载 Git。其官网为:https://git-scm.com 。根据安装向导“下一步”式安装即可。
13.4.4 Idea中配置Git
13.5 GitLab 安装与配置
13.5.1 简介
GitLab 是一个源码托管开源工具,其使用 Git 作为代码管理工具,并在此基础上搭建起来的 Web 服务。GitLab 由乌克兰程序员使用 Ruby 语言开发,后来一部分使用 Go 语言重写。生产中通常使用 GitLab 搭建私有源码托管平台。
13.5.2 GitLab的安装
主机要求
这里要使用 docker 方式来安装 GitLab,所以需要一台安装有 docker 及 docker-compose的主机,且该主机内存至少 4G。
拉取镜像
这里使用由 gitlab 官网发布的社区版镜像 gitlab/gitlab-ce:latest。该镜像最好是先拉取到本地后再使用,因为该镜像比较大。
docker pull gitlab/gitlab-ce:latest
此次测试下载不下来,所以使用同事提供的docker包进行测试安装,使用 load 进行安装,load安装的是镜像,import导入的是容器
docker load -i ./docker-gitlab-ce-13.12.2-ce.0.tar
定义compose.yml
由于启动 GitLab 容器时需要设置的内容较多,为了方便,这里使用 docker compose 方式启动。在任意目录 mkdir 一个子目录,例如在/usr/local 下新建一个 glab 目录。在该目录中新建 compose.yml 文件。文件内容如下:
version: "3" services: gitlab: container_name: gitlab image: gitlab/gitlab-ce:13.12.2-ce.0 restart: always ports: - 8098:8098 - 8443:443 - 2222:22/tcp volumes: - /etc/localtime:/etc/localtime - /data/gitlab/data:/var/opt/gitlab - /data/gitlab/config:/etc/gitlab - /data/gitlab/logs:/var/log/gitlab environment: GITLAB_OMNIBUS_CONFIG: | external_url 'http://192.168.138.134:8098' gitlab_rails['gitlab_shell_ssh_port'] = 2222
启动gitLab
docker-compose up -d
在等待过程中,可以看到如下的大量日志
docker-compose logs -f
13.5.3 GitLab的密码配置
浏览器访问
在浏览器中直接键入 http://192.168.138.134:8098 即可打开登录页面,首先需要进行密码重置,输入root用户密码即可,然后初始化用户密码,初始化之后便可以使用root用户进行登录操作
后期密码如果想修改,也可以按照下图操作步骤进行修改
13.6 SonarQube 安装与配置
13.6.1 简介
SonarQube 是一个开源的代码扫描与分析平台,用来持续扫描、分析和评测项目源代码的质量与安全。 通过 SonarQube 可以检测项目中代码量、安全隐患、编写规范隐患、重复度、复杂度、代码增量、测试覆盖率等多个维度,并通过 SonarQube web UI 展示出来。
SonarQube 支持 30+种编程语言代码的扫描与分析,并能够方便的与代码 IDE、CI/CD 平台完美集成。SonarQube 的官网地址:
https://www.sonarsource.com/
13.6.2 主机要求
这里要使用docker方式来安装,所以需要一台安装有docker及docker-compose的主机。
13.6.3 安装与配置
下载两个镜像
由于 SonarQube 需要 Postgres 数据库的支持,所以安装 SonarQube 之前需要先安装Postgres 数据库。所以需要下载 Postgres 与 SonarQube 两个镜像。
docker pull sonarqube:9.9-community docker pull postgres:latest
定义compose文件
由于需要启动两个容器,所以这里使用 docker-compose 方式。在/usr/local 下 mkdir 一个 sonar 目录,在其中定义 compose.yml 文件
services: postgres: image: postgres container_name: postgres restart: always ports: - 5432:5432 environment: POSTGRES_USER: sonar POSTGRES_PASSWORD: sonar sonarqube: image: sonarqube:9.9-community container_name: sonarqb restart: always depends_on: - postgres ports: - 9000:9000 environment: SONAR_JDBC_URL: jdbc:postgresql://192.168.138.134:5432/sonar SONAR_JDBC_USERNAME: sonar SONAR_JDBC_PASSWORD: sonar
修改虚拟内存大小
在/etc/sysctl.conf 文件中指定 vm.max_map_count 虚拟内存大小
# vm.max_map_count=262144 vim /etc/sysctl.conf # 修改保存后再运行 sysctl –p 命令使 Linux 内核加载文件中的配置。 sysctl -p
启动SonarQube
通过 docker-compose up –d 命令启动容器,并 docker ps 查看是否启动成功
登录SonarQube
在浏览器键入 SonarQube 服务器的 IP 与端口号 9000,即可打开登录页面。默认用户名与密码都是 admin。
Log in 后即可跳转到更新密码页面。这里更新密码为
101022li
安装汉化插件
在 Maketplace 中键入关键字 Chinese 后即可找到要安装的汉化插件,点击 I understand the risk(我了解风险)后即可看到 Install 按钮,点击安装
安装成功后,在页面上部就可看到 Restart Server 的提示,让重启 SonarQube,此过程可能会报错,因为下载文件可能下载不下来,此时需要自己先手动下载插件,然后再将插件复制到sonarqube的插件目录当中,重启即可生效
查看docker日志信息,发现是插件无法下载
# 通过日志查看下载文件为 https://github.com/xuhuisheng/sonar-l10n-zh/releases/download/sonar-l10n-zh-plugin-9.9/sonar-l10n-zh-plugin-9.9.jar docker-compose logs --tail 100 sonarqb
使用浏览器下载 https://github.com/xuhuisheng/sonar-l10n-zh/releases/download/sonar-l10n-zh-plugin-9.9/sonar-l10n-zh-plugin-9.9.jar,地址栏输入即可
上传到服务器当中,然后使用命令复制到sonarqbue指定目录,然后重启服务
docker cp sonar-l10n-zh-plugin-9.9.jar sonarqb:/opt/sonarqube/extensions/plugins/ docker restart sonarqb
再次进入,已经成功安装中文插件
13.7 harbor安装与配置
13.7.1 Harbor 安装系统要求
Harbor 要安装的主机需要满足硬件与软件上的要求
硬件要求
硬件资源 最小要求 推荐要求 CPU 2CPU 4CPU 内存 4G 8G 硬盘 40G 160G 软件要求
软件资源 版本要求 作用 Docker CE 引擎 17.06.0 或更高版本 Harbor 是以容器形式在运行,需要Docker 引擎 Docker Compose 1.18.0 或更高版本 Harbor是10个容器在运行,通过DockerCompose 编排 OpenSSL 最新版 生成数字证书,以支持HTTPS
13.7.2 安装Harbor
在官网复制Latest最新版的离线安装包的下载链接地址,在Linux系统中通过wget命令 下载,将其下载到某目录中。
下载安装包
wget https://github.com/goharbor/harbor/releases/download/v2.6.2/harbor-offline-installer-v2.6.2.tgz
解压安装包
将下载好的包解压到某目录中。解压后其就是一个独立的目录 harbor
mkdir -p /opt/apps tar -zxvf harbor-offline-installer-v2.6.2.tgz -C /opt/apps/
修改harbor.yml
复制一份 harbor 解压包中的 harbor.yml.tmpl,并重命名为 harbor.yml
运行prepare
运行 harbor 解压目录中的 prepare 命令。该命令会先拉取 prepare 镜像,然后再生成很多的其后期要用到的配置文件
运行install.sh
运行 harbor 解压目录中的 install.sh 命令,其会自动完成五步的安装过程,并在最终启动很多的容器。这些容器本质上就是通过 docker-compose 进行编排管理的
sh install.sh
新建仓库
在浏览器地址栏中输入 http://192.168.138.134:80 即可看到登录页面,在其中输入用户名admin,密码为自定义密码
101022
,即可登录。登录后点击“新建项目”,新建一个镜像仓库
13.8目标服务器安装与配置
13.8.1 docker引擎
由于目标服务器需要从镜像中心 Harbor 中 docker pull 镜像,然后使用 docker run 来运行容器,所以目标服务器中需要安装 Docker 引擎。
13.8.2 docker-compose
由于目标服务器需要通过 docker-compose 运行 compose.yml 文件来启动容器,所以目标服务器中需要安装 docker-compose
13.8.3 接收目录
Jenkins 通过 SSH 将命令发送到目标服务器,以使目标服务器可以从 Harbor 拉取镜像、运行容器等。所以在目标服务器中需要具有一个用户接收 Jenkins 发送数据的目录。本例将该接收目录创建在/usr/local/jenkins 中
13.9 Jenkins安装与配置
13.9.1 Jenkins简介
百度百科
以下是百度百科中关于 Jenkins 的词条:Jenkins 是一个开源软件项目,是基于 Java 开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成。
主机要求
这里要使用docker方式来安装,所以需要一台安装有docker及docker-compose的主机
13.9.2 安装JDK
由于 Jenkins 通过调用 Maven 来实现对项目的构建,所以需要在 Jenkins 主机中安装Maven。由于 maven 的运行需要 JDK 的环境,所以需要首安装 JDK。
对于 JDK 的安装非常简单,只需要从官网下载相应版本的 JDK 到 Linux 系统后,直接解压即可。无需配置。这里下载的是 jdk-8u291-linux-x64.tar.gz,将其解压到了/opt/apps 目录下,并重命名为了 jdk
mkdir -p /usr/local/java mv jdk-8u291-linux-x64.tar.gz /usr/local/java tar -zxvf jdk-8u291-linux-x64.tar.gz # 设置环境变量 vim /etc/profile JAVA_HOME=/usr/local/java/jdk1.8.0_291 JRE_HOME=/usr/local/java/jdk1.8.0_291/jre CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/lib PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH export JAVA_HOME JRE_HOME CLASSPATH PATH # 配置生效验证 source /etc/profile java -version
13.9.3 安装maven
下载解压maven
首先需要从官网下载最新版本的linux maven,这里下载的是apache-maven-3.9.0-bin.tar.gz版本
将其解压到/opt/apps 目录下,并重命名为 maven
设置环境变量
# 设置环境变量 vim /etc/profile MAVEN_HOME=/usr/local/maven PATH=$MAVEN_HOME/bin:$PATH export MAVEN_HOME PATH # 环境变量生效验证 source /etc/profile mvn -version
配置maven镜像仓库
maven解压后需要修改解压目录中conf/settings.xml文件中的两处配置。这里配置maven的镜像源为 aliyun。
<mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> </mirror>
配置maven编译器版本
设置maven文件目录,maven 默认的编译器版本为 JDK1.4,需要指定为 JDK1.8。配置了该<profile>后,在文件最后的<activeProfiles>中再激活一下即可
<localRepository>/usr/local/devenv/repo</localRepository> <profile> <id>jdk-8</id> <activation> <activeByDefault>true</activeByDefault> <jdk>1.8</jdk> </activation> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.compilerVersion>8</maven.compiler.compilerVersion> </properties> </profile> <activeProfiles> <activeProfile>jdk-8</activeProfile> </activeProfiles>
13.9.4 安装启动Jenkins
下载镜像
这里要使用 docker 方式来安装 Jenkins,需要先下载 Jenkins 的镜像,后续安装插件提示版本安装失败,升级为latest版本即可正常安装,其余步骤不变
docker pull jenkins/jenkins:2.387.1-lts
使用 docker run 命令启动 Jenkins
docker run --name jenkins \ -p 8080:8080 \ -p 50000:50000 \ -v /var/jenkins_home:/var/jenkins_home \ -d jenkins/jenkins
使用docker ps发现服务没有起来,查看日志,发现目录没有写权限
docker ps docker logs -f --tail 100 jenkins
原因是,jenkins 需向数据卷挂载点的文件/var/jenkins_home/copy_reference_file.log 中写入日志时,由于写入操作的用户不是 root 用户,而非 root 用户对数据卷没有写操作权限,所以此时需要修改数据卷操作权限,为非 root 用户添加写操作权限。
chmod -R 777 /var/jenkins_home/
也可以使用Docker-compose编排,测试环境暂时直接启动
mkdir -pv /data/jenkins/jenkins_home mkdir -pv /data/docker-compose/jenkins cat > /data/docker-compose/jenkins/docker-compose.yml << EOF version: "3" services: jenkins: container_name: jenkins image: jenkins/jenkins:2.387.1-lts restart: always user: root ports: - 8080:8080 - 50000:50000 volumes: - /data/jenkins/jenkins_home:/var/jenkins_home - /etc/localtime:/etc/localtime - /var/run/docker.sock:/var/run/docker.sock - /usr/bin/docker:/usr/bin/docker - /usr/local/maven:/usr/local/apache-maven3 - /usr/local/java/jdk1.8.0_291:/usr/local/java/jdk1.8.0_291 EOF # 启动服务 docker-compose up -d
重启jenkins
重启 jenkins 容器,发现服务已经成功启动
docker restart jenkins
修改插件下载源
由于 jenkins 在后期运行时需要下载很多的插件,而这些插件默认都是从国外的 Jenkins官方服务器上下载的,下载速度很慢,且下载失败的比例很高。所以,一般会先将这些插件的下载源更新为国内的服务器。
该更新文件是数据卷目录中的 hudson.model.UpdateCenter.xml
# 将该默认的<url>更换为清华大学的下载源地址。 https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/current/update-center.json cd /var/jenkins_home/updates sed -i 's#https://updates.jenkins.io/download#https://mirrors.tuna.tsinghua.edu.cn/jenkins#g' default.json && sed -i 's#http://www.google.com#https://www.baidu.com#g' default.json
启动服务
# 通过docker logs 查看初始密码 dfa42970b4a548adb7cf07d988b3c14f docker logs jenkins
插件下载
访问jenkins主页 http://192.168.138.134:8080/login?from=%2F,输入日志获取密码
选择默认安装即可
13.9.5 配置jenkins
安装插件
点击 Manage Jenkins 中的 Manage Plugins 页面,在 Available plugins 选项卡页面的搜索栏中分别键入 Git Parameter 与 Publish Over SSH,选中它们后,Install without restart。
jenkins常用插件
插件源地址 https://updates.jenkins.io/update-center.json https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json ## 基础插件 //中文插件 Chinese (Simplified) // pipeline阶段视图 Pipeline Stage View //LDAP集中用户管理 LDAP Plugin //工作区清理 Workspace Cleanup //角色权限管理 Role-based Authorization Authorize Project //凭证管理 Credentials Binding //配置文件管理 Config File Provider //右键发送 Email Extension //通过SSH方式管理节点 SSH Build Agents SSH Agent ## 任务相关插件 //扩展参数插件 Extended Choice Active Choice Parameter Dynamic Extended Choice ParameterVersion //流水线插件管理 Pipeline //git插件 Git Plugin GitLab //Git Parameter插件(构建时可选分支和tag) Git Parameter //获取harbor镜像标签 Image Tag Parameter //Maven插件 Maven Integration Pipeline Maven Integration //SonarQube插件 SonarQube Scanner //K8S相关插件 Kubernetes Kubernetes Continuous Deploy //部署推送插件 Deploy WebLogic Deploy to container # vim conf/tomcat-users.xml <role rolename="manager-gui"/> <user username="jenkins" password="jenkins" roles="manager-gui"/> # vim webapps/manager/META-INF/context.xml <!-- <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> --> //远程部署 Publish Over SSH
移动JDK与Maven
首先要将 Jenkins 主机中的 JDK 与 Maven 解压目录移动到数据卷/var/Jenkins_home 中
cp -r maven/ /var/jenkins_home/ cp -r jdk1.8.0_291/ /var/jenkins_home/
配置JDK与Maven
在 Manage Jenkins 的 Global Tool Configuration 页面中配置 Maven 与 JDK。
将自动安装checkbox点掉,填入jdk路径,此路径既自己拷贝jdk路径
这里填写的也是容器中挂载点目录中的路径。最后再应用并保存。
13.10 Jenkins集成SonarQube
13.10.1 Jenkins中安装SonarScanner
SonarScanner简介
SonarScanner 是一种代码扫描工具,专门用来扫描和分析项目代码质量。扫描和分析完成之后,会将结果写入到 SonarQube 服务器的数据库中,并在 SonarQube 平台显示这些数据。
下载
在 SonarQube 官网的帮助文档中可以下载 SonarScanner。这里下载一个 Linux 系统下使用的版本。
安装unzip
由于下载的 SonarScannner 是 zip 压缩类型的,所以需要在 Linux 系统中安装 unzip 命令,以解压该压缩包。
yum install -y unzip
解压/移动
由于后期要在 Jenkins 中集成 SonarScanner,需要 SonarScanner 存在于 Jenkins 服务器中的数据卷目录中。所以将解压后的目录移动到数据卷jenkins_home下并更名为sonar-scanner
unzip sonar-scanner-cli-4.8.0.2856-linux.zip mv sonar-scanner-4.8.0.2856-linux /var/jenkins_home/sonar-scanner
修改配置文件
在 sonar-scanner 目录的 conf 目录下有其配置文件 sonar-scanner.properties。修改该配置文件
#Configure here general information about the environment, such as SonarQube server connection details for example #No information about specific project should appear here #----- Default SonarQube server sonar.host.url=http://192.168.138.134:9000 #----- Default source code encoding sonar.sourceEncoding=UTF-8 sonar.sources=./ sonar.java.binaries=./target
13.10.2 Jenkins配置SonarQube
安装插件
在 Jenkins 页面的系统管理 插件管理 Available plugins 中搜索 sonarqube scanner,安装该插件。该插件用于连接 SonarScanner
安装完毕后,点选“安装完成后重启 Jenkins”,进行重启。
添加Sonarqube
打开 Jenkins 的 Manage Jenkins 》Configure System 页面,找到 SonarQube servers,添加 SonarQube 服务器
13.11 Jenkins集成目标服务器
这里要配置连接到目标服务器的连接方式。打开 Manage Jenkins 中的 Configure System页面将页面拉到最下面,可以看到 Publish over SSH。这里可以设置非对称加密的身份验证方式,也可设置对称加密的身份验证方式。这里采用对称加密身份验证方式。点击新增按钮。
13.12 自由风格的 CI 操作(中间架构)
13.12.1 中间架构图
13.12.2 创建web 项目
创建一个web项目,主要内容就以之前的docker-hello项目为主
创建一个 web 项目,就使用最简单的 spring boot 工程,例如工程名为 hellojks。仅需导入 spring web 依赖即可
13.12.3 Idea提交项目到远程仓库
在GitLab中创建远程仓库, 首先在 GitLab 中创建一个远程仓库,用于管理前面 Idea 中创建的工程
点击Create project后就可进入下个页面,可以看到当前仓库的信息及相关的操作命令。客户端通过这些命令可完成对该仓库的操作
新增系统用户
用户创建成功,如下图所示,点击"Edit",为用户设置密码
初始化本地仓库
将当前的项目目录 docker-hello初始化为本地仓库
提交代码到本地库
在项目上右击,选择 Git =》 Commit Directory
提交到远程库
首先要从远程仓库中获取仓库地址。选择复制 Clone with HTTP 的地址,获取复制地址为 http://192.168.138.134:8098/root/docker-hello.git
Push 后会弹出访问 GitLab 的登录窗口,输入用户名 lixuchun,密码为自定义的 lixuchun123456
推送成功后,在 idea 右下角即可看到成功提示
此时刷新 GitLab 页面,即可看到推送来的项目
注意:如果提交文件的时候发现很多不需要提交的文件都存在在提交目录中,添加
.ignore
文件到应用根目录中即可# Created by .ignore support plugin (hsz.mobi) ### Example user template template ### Example user template # IntelliJ project files .idea *.iml out gen ### Maven template target/ pom.xml.tag pom.xml.releaseBackup pom.xml.versionsBackup pom.xml.next release.properties dependency-reduced-pom.xml buildNumber.properties .mvn/timing.properties # https://github.com/takari/maven-wrapper#usage-without-binary-jar .mvn/wrapper/maven-wrapper.jar ##代码生成器屏蔽 *.vm *.log
13.12.4 从GitLab拉取代码
新建任务
Jenkins集成GitLab
在点击确定后即可立即配置 Jenkins 中 GitLab 服务器的信息
在其中填写用户名与密码后“添加”即可返回之前的页面,此时在 Credentials 下拉框中即可找到新添加的用户信息,选择即可。
立即构建
任务创建成功后即可看到如下页面。在该页面中点击“立即构建”,Jenkins 即可开始从GitLab 上拉取项目。此时右下角就会发生变化
点击右下角的日期时间,选择控制台输出,可看到这个拉取过程的日志。
从以上日志的 git rev-parse --resolve-git-dir /var/jenkins_home/workspace/docker_hello_jenkins/.git 命令可以看出,Jenkins将其容器内的 /var/jenkins_home/workspace/my_hellojks 目录作为项目的本地仓库。也就是将数据卷目录。
进入 jenkins 数据卷可以看到该项目已经存在了。
13.12.5 将项目打为 jar包
在 Jenkins 能够通过配置,调用本地的 maven 的 mvn 命令,将拉取来的项目打为 Jar 包。
Jenkins配置mvn命令
点击配置后,打开配置页面。然后点击 Build Steps,跳转到以下位置。
选择调用顶层 Maven 目标,即可使用前面配置的 Maven 来完成打包任务
在 Maven 版本下拉框中选择前面配置好的 maven,目标中写入需要 maven 去执行的maven 命令,应用保存后,自动跳转回任务首页
重新构建
在配置好 maven 的构建命令后,再次执行“立即构建”
构建成功后进入 jenkins 数据卷目录/var/jenkins_home/workspace/docker_hello_jenkins中可以看到新增了 target 目录。打开 target 目录,可以看到打出的 jar 包。
13.12.6 代码质量检查工具
todo: 暂时未配置
13.12.7 将 jar 包推送到目标服务器
配置SSH
Jenkins 通过 SSH 方式连接上目标服务器,并将 jar 包推送到目标服务器。
点击配置后,打开配置页面。将页面拉到最下面,找到“增加构建后操作步骤”
exec command 修改为其他命令,后续使用镜像启动服务
重新构建
查看目标服务器的目标目录/var/jenkins_home,可以看到 jar 包已经推送了过来,并且启动了容器了
13.12.8 构建镜像启动容器
通过在 Jenkins 中配置在目标服务器中将要执行的相关命令,使得 Jenkins 将 jar 包推送到目标服务器后,立即自动执行配置的命令,将 jar 包构建为一个镜像,并启动其相应的容器,使项目启动运行
定义Dockerfile
若要构建镜像,就需要定义其 Dockerfile。现在 Idea 的工程中新建一个 Directory,例如docker,然后在其中新建一个 file
FROM openjdk:8u102 MAINTAINER lxc lxc@git.com.cn LABEL name="lxc" auth="lxc" email="lxc@git.com.cn" # 将本地的docker-hello包导入到容器的固定目录下,会自动创建目录 COPY docker-hello.jar /var/jenkins_home/docker/docker-hello.jar # 变更工作目录 WORKDIR /var/jenkins_home/docker # 启动服务 ENTRYPOINT ["java", "-jar", "docker-hello.jar"]
定义compose.yml
在 idea 的新建目录中再新建一个 compose.yml,用于构建镜像和启动容器
version: '3.5' services: docker-hello: build: ./ image: docker-hello container_name: docker-hello ports: - 8088:8088
推送到GitLab
再配置构建后操作
cd /var/jenkins_home/docker mv /var/jenkins_home/target/docker-hello-1.0-SNAPSHOT.jar ./docker-hello.jar docker-compose down docker-compose up -d --build docker image prune -f
Jenkins 中在返回的任务首页中,再次执行立即构建。构建成功后,查看目标服务器中的/var/Jenkins_home/docker 目录,发现 docker 目录及其下的两个 docker 文件已经存在了,且 jar 包 也复制了进来,服务也启动了起来
在浏览器中访问目标服务器中的应用,已经可以访问了 http://192.168.138.129:8088/some/test