devops核心概念。
2,jenkins应用广泛,大多数互联网公司都采用jenkins配合gitlab,docker,k8s作为实现devops的核心工具。4,jenkins最主要的工作就是将gitlab上可以构建的工程代码拉取并且进行构建,在根据流程可以选择发布到测试环境或者生产环境。Devops强调的是高效组织团队之间如何通过自动化的工具协作和沟通来完成软件生命周期性管理,从而更快,更频繁地交付更稳定的文件。3,j
一:devops的官方概念:
DevOps(Development和Operations的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。
它是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。
devops解决了我们迭代开发时遇到的各种问题。
二:devops的管理流程和目标
Devops强调的是高效组织团队之间如何通过自动化的工具协作和沟通来完成软件生命周期性管理,从而更快,更频繁地交付更稳定的文件。
![在这里插入图片描述](https://img-blog.csdnimg.cn/f4121c91824940cebc4e3dfb92f890d6.png
三:devops的流程构建
流程构建管理仓库使用gitlab+maven+jenkins,准备3台虚拟机时间设置一致。
node1(jenkins) | 10.20.42.9 |
node2(gitlab) | 10.20.42.5 |
node3(部署服务器) | 10.20.42.3 |
node2:使用docker安装gitlab。
[root@node2 ~]# cd /usr/local/
[root@node2 local]# mkdir docker
[root@node2 local]# cd docker/
[root@node2 docker]# mkdir gitlab_docker
[root@node2 docker]# cd gitlab_docker/
[root@node2 gitlab_docker]# docker pull gitlab/gitlab-ce:latest
[root@node2 gitlab_docker]# cat docker-compose.yml 编辑一个yml文件来管理容器。
version: '3.3'
services:
web:
image: 'gitlab/gitlab-ce:latest'
restart: always 这表示只要docker启动,这个容器就启动。
hostname: '10.20.42.5' 服务端的地址。
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://10.20.42.5:8929' 监听的服务端地址。
gitlab_rails['gitlab_shell_ssh_port'] = 2224 这个是ssh端口,修改成为了2224
ports: 映射到宿主机的端口
- '8929:8929'
- '2224:22'
volumes: 持久化目录
- '$GITLAB_HOME/config:/etc/gitlab'
- '$GITLAB_HOME/logs:/var/log/gitlab'
- '$GITLAB_HOME/data:/var/opt/gitlab'
shm_size: '256m'
[root@node2 gitlab_docker]#
[root@node2 gitlab_docker]# docker-compose up -d
[root@node2 gitlab_docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
235d0bef0ab8 gitlab/gitlab-ce:latest "/assets/wrapper" 2 weeks ago Up 5 hours (healthy) 80/tcp, 443/tcp, 0.0.0.0:8929->8929/tcp, :::8929->8929/tcp, 0.0.0.0:2224->22/tcp, :::2224->22/tcp gitlabdocker_web_1
[root@node2 gitlab_docker]# ss -tnlp | grep docker
LISTEN 0 128 *:8929 *:* users:(("docker-proxy",pid=77217,fd=4))
LISTEN 0 128 *:2224 *:* users:(("docker-proxy",pid=77239,fd=4))
LISTEN 0 128 [::]:8929 [::]:* users:(("docker-proxy",pid=77224,fd=4))
LISTEN 0 128 [::]:2224 [::]:* users:(("docker-proxy",pid=77246,fd=4))
[root@node2 gitlab_docker]#
运行完成之后,直接通过浏览器访问即可。
账号:root
密码通过命令查看。
[root@node2 gitlab_docker]# docker exec -it gitlabdocker_web_1 bash
root@10:/# cat /etc/gitlab/initial_root_password 可以查看到密码。
node1 安装maven,jdk
1,安装docker社区版,设置开机自启动
# wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@node1 yum.repos.d]# yum install docker-ce -y
2,安装docker-compose
[root@node1 yum.repos.d]# yum install docker-compose -y
3,下载maven软件包,解压至/usr/local目录
https://maven.apache.org/download.cgi maven官方下载页面
https://dlcdn.apache.org/maven/maven-3/3.9.4/binaries/apache-maven-3.9.4-bin.tar.gz
# tar -xzf apache-maven-3.9.4-bin.tar.gz -C /usr/local/
4,下载jdk软件包,解压至/usr/local目录
https://login.oracle.com/mysso/signon.jsp oracal官网下载即可,需要登录。
# tar -xzf jdk-8u381-linux-x64.tar.gz -C /usr/local/
5,配置maven的仓库地址,直接网上搜索maven的阿里云仓库地址即可,并且设置一下jdk的编译插件使用1.8进行编译。
# vim maven/conf/settings.xml
设置镜像的私服地址。
<mirror>
<id>mirrorId</id>
<mirrorOf>repositoryId</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://my.repository.com/repo/path</url>
</mirror>
--> 注释下面是添加项
<mirror>
<id>AliRepo-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Mirror Name for the Alirepo.</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
<profile>
<id>env-dev</id>
<activation>
<property>
<name>target-env</name>
<value>dev</value>
</property>
</activation>
<properties>
<tomcatPath>/path/to/tomcat/instance</tomcatPath>
</properties>
</profile>
--> 注释下面是添加的内容。网上搜索maven的jdk编译插件即可。
设置jdk8的编译插件。
<profiles>
<profile>
<id>jdk8</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>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
</profiles>
默认开启这项。
<activeProfiles>
<activeProfile>alwaysActiveProfile</activeProfile>
<activeProfile>anotherAlwaysActiveProfile</activeProfile>
</activeProfiles>
-->
<activeProfiles>
<activeProfile>jdk8</activeProfile>
</activeProfiles>
配置好构建代码的构建工具后,准备jenkins
node1安装jenkins
jenkins介绍
1,jenkins是一个开源的持续集成,持续部署的基于Java开发的工具。
2,jenkins应用广泛,大多数互联网公司都采用jenkins配合gitlab,docker,k8s作为实现devops的核心工具。
3,jenkins最强大的就在于插件,jenkins官方提供大量的插件库,来实现CI/CD过程中的各种琐碎功能。
4,jenkins最主要的工作就是将gitlab上可以构建的工程代码拉取并且进行构建,在根据流程可以选择发布到测试环境或者生产环境。
CI过程即是通过jenkins将代码拉取,构建,制作镜像交给测试人员测试
持续集成:让软件代码可以持续集成到主干上(gitlab),并自动构建和测试
CD过程即是通过jenkins将打好的标签的发行版本拉取,构建,制作镜像交给运维人员部署。
持续交付:让经过持续集成的代码可以进行手动部署。
持续部署:让可以持续交付的代码随时随地的自动化部署。
Jenkins安装,基于docker进行安装
1,访问Jenkins官网,pull长期稳定版本
https://hub.docker.com/r/jenkins/jenkins/tags?page=1&name=2.401.3
docker pull jenkins/jenkins:2.401.3-lts
[root@node1 jenkins]# pwd
/usr/local/docker/jenkins
[root@node1 jenkins]# cat docker-compose.yml
version: '3'
services:
jenkins:
image: jenkins/jenkins:2.401.3-lts
container_name: jenkins
ports:
- "8080:8080"
- "50000:50000"
environment:
TZ: "Asia/Shanghai"
volumes:
- "./data/:/var/jenkins_home/" 映射的宿主机目录data,插件和构建工具应放在容器这个目录中。
[root@node1 jenkins]# docker-compose up -d 启动容器
注意:当我们启动时候通过 docker-compose logs -f Jenkins 查到Jenkins没有对宿主机映射目录 data没有权限写入。
即:
[root@node1 jenkins]# chmod 777 data/
[root@node1 jenkins]# docker-compose restart 修改权限后,再重启下Jenkins
2,启动成功后,通过访问8080端口访问Jenkins。需要输入密码
[root@node1 jenkins]# docker logs -f jenkins 通过查询日志,查询Jenkins密码。
3,注意重新启动Jenkins后,由于Jenkins需要下载大量内容,由于默认下载速度较慢,需要修改国内镜像站
[root@node1 data]# pwd
/usr/local/docker/jenkins/data
[root@node1 data]# vi hudson.model.UpdateCenter.xml
<?xml version='1.1' encoding='UTF-8'?>
<sites>
<site>
<id>default</id>
<url>https://updates.jenkins.io/update-center.json</url> 修改这项内容即可。替换为 http://mirror.esuni.jp/jenkins/updates/update-center.json
</site>
</sites>
访问Jenkins,解锁jenkins输入密码->选择插件来安装->等待插件进行安装->创建管理员账户->实力配置。
注意:如果网速比较慢,下载失败后也可以访问jenkins网站进行插件下载,如果还是下载慢就修改jenkins镜像源。
1,安装两个插件。
Git Parameter Plug-In:用于从gitlab仓库中拉取代码进行构建 publish Over
SSH:用于向远端服务器传送指令和文件。
2,将maven,jdk放到Jenkins数据卷data目录下,在Jenkins中指定映射到容器目录中jdk和maven
[root@node1 data]# mv /usr/local/jdk/ ./
[root@node1 data]# mv /usr/local/maven/ ./
[root@node1 data]# ll
total 64
-rw-r--r--. 1 yanss yanss 1663 Aug 11 14:54 config.xml
-rw-r--r--. 1 yanss yanss 200 Aug 11 14:54 copy_reference_file.log
-rw-r--r--. 1 yanss yanss 156 Aug 11 14:54 hudson.model.UpdateCenter.xml
-rw-r--r--. 1 yanss yanss 370 Aug 10 18:31 hudson.plugins.git.GitTool.xml
-rw-------. 1 yanss yanss 1680 Aug 10 18:31 identity.key.enc
drwxr-xr-x. 8 root root 4096 Aug 10 15:41 jdk
-rw-r--r--. 1 yanss yanss 7 Aug 11 14:54 jenkins.install.InstallUtil.lastExecVersion
-rw-r--r--. 1 yanss yanss 7 Aug 11 14:34 jenkins.install.UpgradeWizard.state
-rw-r--r--. 1 yanss yanss 180 Aug 11 14:34 jenkins.model.JenkinsLocationConfiguration.xml
-rw-r--r--. 1 yanss yanss 171 Aug 10 18:25 jenkins.telemetry.Correlator.xml
drwxr-xr-x. 2 yanss yanss 6 Aug 10 18:25 jobs
drwxr-xr-x. 6 root root 99 Aug 10 15:36 maven
-rw-r--r--. 1 yanss yanss 907 Aug 11 14:54 nodeMonitors.xml
drwxr-xr-x. 2 yanss yanss 6 Aug 10 18:25 nodes
drwxr-xr-x. 92 yanss yanss 8192 Aug 11 14:49 plugins
-rw-r--r--. 1 yanss yanss 129 Aug 11 14:51 queue.xml.bak
-rw-r--r--. 1 yanss yanss 64 Aug 10 18:25 secret.key
-rw-r--r--. 1 yanss yanss 0 Aug 10 18:25 secret.key.not-so-secret
drwx------. 2 yanss yanss 261 Aug 11 14:45 secrets
drwxr-xr-x. 2 yanss yanss 182 Aug 11 14:49 updates
drwxr-xr-x. 2 yanss yanss 24 Aug 10 18:25 userContent
drwxr-xr-x. 3 yanss yanss 56 Aug 11 14:34 users
drwxr-xr-x. 11 yanss yanss 264 Aug 10 18:25 war
3,进行全局配置,指定我们jdk所在容器中的位置。
4, 新建测试代码
5,将测试代码构建成可执行的jar包,通过dockfile构建出一个镜像运行在docker容器内
即:编写完成之后,在本地测试没有问题的话就可以推送到代码仓库了。
6,登录到gitlab仓库地址新建一个项目。
7,创建完仓库之后需要将我们的代码推送到gitlab上
即:push之后复制gitlab仓库地址就可以推送出去了。
8,准备操作jenkins像gitlab上拉取测试代码进行构建并部署到node3机器上。
1,新建一个任务定义名称为mytest。
2,配置任务
3,源码管理设定gitlab仓库地址
4,定义构建时操作我们需要去调用顶层maven去帮我们构建jar包
5,定义构建之后的操作。
![在这里插入图片描述](https://img-blog.csdnimg.cn/5277a6c793c2473f83983dffe10b2942.png、
6,保存应用后立即构建查看node3主机的test目录中。
[root@node3 docker]# ls
docker-compose.yml Dockerfile mytest.jar Yyr-0.0.1-SNAPSHOT.jar
[root@node3 docker]# cd ..
[root@node3 test]# ls
docker target
[root@node3 test]# pwd
/usr/local/test
[root@node3 test]# cd docker/
[root@node3 docker]# ls
docker-compose.yml Dockerfile mytest.jar Yyr-0.0.1-SNAPSHOT.jar
[root@node3 docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
24d29214b666 mytest:v1.0 "/bin/sh -c 'java -j…" 28 hours ago Up 28 hours 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp mytest
[root@node3 docker]#
7,直接访问node3地址
8,即:持续集成的话当我们在测试代码中修改了代码再次push到我们gitlab仓库中,再放问node3地址会是不一样的效果。
9,修改好测试代码后,再次构建一下。
10,在访问node3地址,发现版本号已经出来了
11,注意当我们进行构建多次时发现我们本地会出现多个none镜像。我们通过命令将其删除。
[root@node3 docker]# docker image ls -a
REPOSITORY TAG IMAGE ID CREATED SIZE
mytest v1.0 f1522d9b326b 3 minutes ago 833MB
<none> <none> 8246781c404a 3 minutes ago 833MB
<none> <none> 4fb16ef6a115 3 minutes ago 833MB
<none> <none> e4d19953bc3f 29 hours ago 833MB
<none> <none> e47f4ae43b82 29 hours ago 833MB
<none> <none> e1f4e7a6decf 29 hours ago 833MB
<none> <none> 141315f16d3a 32 hours ago 833MB
<none> <none> 3c8ac8c4fe76 32 hours ago 833MB
<none> <none> 30b197346d12 32 hours ago 833MB
daocloud.io/gizwits2015/java8 java b3ae0c4205b6 6 years ago 214MB
daocloud.io/library/java 8u40-jdk 4aefdb29fd43 8 years ago 816MB
[root@node3 docker]# docker image p
prune pull push
[root@node3 docker]# docker image prune -f
Deleted Images:
deleted: sha256:e1f4e7a6decf20ed92d03d9dfa816c5a97a066cc18fb32b8917371618d5efa46
deleted: sha256:e47f4ae43b8205f2cf6362ccf600fab2ea102442c1bceff817bdc3a51ec79db5
deleted: sha256:e4d19953bc3f03173fc29b2268729845df0cd1a894a7431cb5f51139a4292269
deleted: sha256:fb848c83f20d95b2ac438a89717d6718d0206eb0233a30308b39d4f04783dd57
deleted: sha256:3c8ac8c4fe76a86f92f2c3debe39e504c4f94931758e27cd88384a1c432964fe
deleted: sha256:141315f16d3a50d2df75c88b8c7953b4145cfead9f7e3e453c53e086d1af9527
deleted: sha256:30b197346d122b312850acb6d9135ad61eeabb46443093dac82d6ebc723a71c1
deleted: sha256:e7668530468fabf5e2f043baa3b7ad52280805f171ea09d7f302a2fa60baea16
Total reclaimed space: 35.48MB
[root@node3 docker]# docker image ls -a
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 4fb16ef6a115 4 minutes ago 833MB
mytest v1.0 f1522d9b326b 4 minutes ago 833MB
<none> <none> 8246781c404a 4 minutes ago 833MB
daocloud.io/gizwits2015/java8 java b3ae0c4205b6 6 years ago 214MB
daocloud.io/library/java 8u40-jdk 4aefdb29fd43 8 years ago 816MB
12,即可以将Jenkins帮我们来进行删除将这条命令添加到构建后操作中保存应用即可。
到此刻,我们整个CI的流程就跑通了,CI的主要流程就是在做测试。
更多推荐
所有评论(0)