作者:SRE运维博客
博客地址:https://www.cnsre.cn
文章地址:https://www.cnsre.cn/posts/210419172129/
相关话题:https://www.cnsre.cn/tags/docker/
在如今的互联网时代,随着软件开发复杂度的不断提高,软件开发和发布管理也越来越重要。目前已经形成一套标准的流程,最重要的组成部分就是持续集成(Continuous Integration,CI)及持续部署、交付(CD)。在此,我们来以一个案例初步了解 CI 流程。那么什么是 CI 呢?简单来讲,CI 就是将传统的代码合并、构建、部署、测试都集成在一起,不断地执行这个过程,并对结果进行反馈。
CI 流程设计图
工作流程
- 开发人员提交代码到Git版本仓库;
- Jenkins人工/定时触发项目构建;
- Jenkins拉取代码、代码编码、打包镜像、推送到镜像仓库;
- Jenkins在Docker主机创建容器并发布
服务器规划
IP地址 | 角色 |
---|---|
10.0.0.111 | Jenkins,Docker,JDK,Maven |
10.0.0.100 | Harbor(Docker,docker-compose),Git |
部署Git代码版本仓库
10.0.0.100 操作
|
|
10.0.0.111 操作
|
|
部Harbor镜像仓库
10.0.0.100 操作
参考:harbor私有仓库安装
- Jenkins主机安装Docker并配置可信任
10.0.0.111 操作
|
|
Jenkins环境部署
|
|
启动后,浏览器访问http://10.0.0.111:8080/,按提示输入密码,登录即可
Jenkins安装必要插件
由于jenkins是离线安装,所有在此需要配置一下插件下载地址:系统管理
–>插件管理
–>Advanced
修改内容
|
|
将https修改为http 再点Submit
Submit后点击Available,Check now此时我们可以看到很多可获得插件
安装git和pipeline插件。
Jenkins流水线部署
pipeline 是一套运行于jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排与可视化。
创建一个pipeline类型的Job:
选择流水线类型
到这里我们就开始配置Pipeline script,点击Pipeline语法,来自动生成我们需要的配置。
如下图,我们Git方式,配置Git仓库地址,再添加认证相关。
这里我们使用的是秘钥认证方式,需要将jenkins上生成的公钥发送到git服务器上,然后将jenkins上的生成的私钥内容粘贴到下图Key中,这样jenkins就可以免交互的拉取git仓库中的代码了。
|
|
配置完成后,我们就可以生成Pipeline脚本了。点击下方Generate Pipeline Script,然后复制方框内的内容。
编写我们所需要的Pipeline脚本如下,将其粘贴到script的拉取代码模块中,并修改分支master为${branch},其他模块内容自行编写。
node {
def mvnHome
stage('Preparation') { // for display purposes
//拉取代码
checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '7c00a680-53fd-42db-a12a-21b803dd6c40', url: 'git@10.0.0.100:/home/tools/git/wenlong.git']]])
}
//编译代码
stage('Build') {
sh '''
export JAVA_HOME=/home/tools/jdk1.8.0_221
mvn clean package -Dmaven.test.skip=true
'''
}
// 项目打包到镜像并推送到镜像仓库
stage('Build and Push Image') {
sh '''
REPOSITORY=10.0.0.100/library/wenlong:${branch}
cat > Dockerfile << EOF
FROM 10.0.0.100/library/tomcat:v1
LABEL maintainer wenlong
RUN rm -rf /usr/local/tomcat/webapps/*
ADD target/*.war /usr/local/tomcat/webapps/ROOT.war
EOF
docker build -t $REPOSITORY .
docker login 10.0.0.100 -u admin -p Harbor12345
docker push $REPOSITORY
'''
}
// 部署到Docker主机
stage('Deploy to Docker') {
sh '''
REPOSITORY=10.0.0.100/library/wenlong:${branch}
docker rm -f tomcat-java-demo |true
docker pull $REPOSITORY
docker container run -d --name wenlong -p 88:8080 $REPOSITORY
'''
}
}
在Pipeline脚本里面我们指定了一个branch参数,所以我们需要传递一个参数变量,这里我们选择参数化构建,默认值为master分支。
然后保存配置。
发布测试
回到主界面,我们开始构建任务:
查看构建成功后的图形构建过程:
通过浏览器来访问java项目:http://10.0.0.111:88/
至此部署完成
作者:SRE运维博客
博客地址:https://www.cnsre.cn
文章地址:https://www.cnsre.cn/posts/210419172129/
相关话题:https://www.cnsre.cn/tags/docker/