部署Jenkins+docker集成环境

环境:

主机(mac osx)和虚拟机(Ubuntu 16.04)

mac osx系统,运行Jenkins

Ubuntu16.04系统,运行docker(用Ubuntu14.04镜像创建一个docker)

tips:

1、Jenkins运行在哪个环境都可以(这里运行在osx系统)

2、Jenkins创建的node(slave),launch slave agents on Unix machines via SSH(通过SSH远程登陆Unix,这里的Unix环境是用Ubuntu14.04镜像创建的docker)

3、http://www.cnblogs.com/hslzju/p/5839913.html这篇文章讲了SSH登陆docker的方式。本文采用公钥验证方式SSH登陆docker。

4、只有docker的宿主机才能SSH登陆docker(这个是我试验的结果,我猜测是因为docker的IP是虚拟出来的,和Jenkins运行的服务器不在同一个子网)。

5、http://www.cnblogs.com/hslzju/p/5839913.html这篇文章提到,可以采用端口映射方式登陆docker,即ssh [email protected]和ssh -p 32770 [email protected]都可以登陆docker(172.17.0.2是docker的IP,192.168.127.159是docker的宿主机的IP)。

6、所以,Jenkins可以通过端口映射登陆docker。需要以下几步:

1)在docker的宿主机内,用Ubuntu14.04镜像创建一个docker的时候,将docker的22端口映射到宿主机(可指定也可以随机分配)

2)将docker的sshd服务打开(docker作为server,宿主机作为client)

3)将宿主机的公钥给docker(这样宿主机可以通过SSH远程登陆docker)

4)测试宿主机是否能通过SSH公钥验证方式远程登陆docker,这样保证Jenkins也能通过SSH公钥验证方式远程登陆docker。Jenkins和docker集成的时候,docker的宿主机是不需要SSH远程到docker的。

5)把docker的宿主机的子网IP地址,以及和docker的22端口映射的端口,提供给Jenkins。

6)把docker的宿主机的私钥,提供给Jenkins。

7)在Jenkins中创建node,运行。

1、Ubuntu以SSH公钥验证方式运行docker(image是Ubuntu 14.04)

[email protected]:~$ sudo docker images
[sudo] hsl 的密码: 
REPOSITORY TAG IMAGE ID CREATED SIZE
hsl/ubuntu 14.04_JenkinsNodeRunDocker 659fcb00b0dc 23 hours ago 760.1 MB
hsl/ubuntu 14.04_Git d664d1c80431 41 hours ago 248.1 MB
ubuntu 14.04 4a725d3b3b1c 6 days ago 188 MB
[email protected]:~$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[email protected]:~$ sudo docker run -tid -p 22 -P ubuntu:14.04
31f817fba3096c4d3ef9f08819bba159a4849cc368be586fe1c73635d8d0370e
[email protected]:~$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
31f817fba309 ubuntu:14.04 "/bin/bash" 15 seconds ago Up 4 seconds 0.0.0.0:32768->22/tcp pedantic_curran
[email protected]:~$ sudo docker exec -it 31 /bin/bash
[email protected]:/# which ssh
[email protected]:/# apt-get update

[email protected]:/# apt-get install openssh-server

[email protected]:/# which ssh
/usr/bin/ssh
[email protected]:/# sudo ps -e|grep ssh
[email protected]:/# service ssh start
* Starting OpenBSD Secure Shell server sshd [ OK ] 
[email protected]:/# sudo ps -e|grep ssh
3437 ? 00:00:00 sshd

[email protected]:~# apt-get install vim

[email protected]:~# which vim  
/usr/bin/vim

[email protected]:~# cd /etc/ssh
[email protected]:/etc/ssh# ls
moduli ssh_host_dsa_key ssh_host_ecdsa_key ssh_host_ed25519_key ssh_host_rsa_key ssh_import_id
ssh_config ssh_host_dsa_key.pub ssh_host_ecdsa_key.pub ssh_host_ed25519_key.pub ssh_host_rsa_key.pub sshd_config
[email protected]:/etc/ssh# vim sshd_config

#三个地方改成:

PermitRootLogin without-password(默认的)

AuthorizedKeysFile %h/.ssh/authorized_keys(取消注释)

PasswordAuthentication yes(取消注释)

#PermitRootLogin yes #允许root用户以任何认证方式登录(貌似也就两种认证方式:用户名密码认证,公钥认证)

#PermitRootLogin without-password #只允许root用public key认证方式登录

#PermitRootLogin no #不允许root用户以任何认证方式登录

#AuthorizedKeysFile %h/.ssh/authorized_keys

存放该用户可以用来登录的 RSA/DSA 公钥。该指令中可以使用下列根据连接时的实际情况进行展开的符号:

%% 表示‘%‘、%h 表示用户的主目录、%u 表示该用户的用户名。

经过扩展之后的值必须要么是绝对路径,要么是相对于用户主目录的相对路径。

默认值是".ssh/authorized_keys"。

#PasswordAuthentication yes

PasswordAuthentication设置是否允许口令验证。

如果服务器不在本地,千万不能PasswordAuthentication yes->no,万一当前的ssh链接中断,万一RAS认证没弄好,密码验证又禁止了。

[email protected]:~# exit
exit

[email protected]:~$ ssh-keygen -t rsa

#一直回车,生成宿主机的密钥

[email protected]:~$ cd .ssh
[email protected]:~/.ssh$ ls
id_rsa id_rsa.pub known_hosts

[email protected]:~/.ssh$ cat id_rsa.pub

[email protected]:~/.ssh$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
31f817fba309 ubuntu:14.04 "/bin/bash" 3 hours ago Up 3 hours 0.0.0.0:32768->22/tcp pedantic_curran
[email protected]:~/.ssh$ sudo docker exec -it 31 /bin/bash
[email protected]:/# cd .ssh
bash: cd: .ssh: No such file or directory
[email protected]:/# ssh-keygen -t rsa
[email protected]:/# cd
[email protected]:~# cd .ssh
[email protected]:~/.ssh# ls
id_rsa id_rsa.pub
[email protected]ba309:~/.ssh# touch authorized_keys

#在/etc/ssh/sshd_config 可看到authorized_keys的拼写
[email protected]:~/.ssh# ls
authorized_keys id_rsa id_rsa.pub
[email protected]:~/.ssh# vim authorized_keys

把client的公钥复制进去

********我的注释*********

ssh 客户程序可用于登录到远程服务器。所要求的只是该远程机器正在运行 sshd,即 ssh 服务器进程。

本地只需要生成一对密钥。然后把本地的公钥拷贝到想要访问的那些远程机器上。远程机器通过公钥加密信息,本地再用私钥解密。

并不需要为想要访问的每个远程服务器都准备一对密钥,本地只要有一对公钥密钥就足够了。

本地作为client,docker作为server。本地通过SSH的公钥验证方式连接docker。需要:

1、docker的sshd正在运行。2、docker有本地的公钥,放在authorized_keys文件中。

********我的注释*********

[email protected]:~/.ssh# exit
exit
[email protected]:~/.ssh$ ssh -p 32768 [email protected]

#第一次通过SSH公钥验证方式登陆docker会出现警告,以后再登陆不用验证。因为做了端口映射,所以可以直接从映射的端口登陆。
[email protected]:~# exit
logout
Connection to 192.168.127.152 closed.
[email protected]:~/.ssh$ cd
[email protected]:~$ ssh -p 32768 [email protected]

#成功通过SSH公钥验证方式登陆docker,不再有警告
Welcome to Ubuntu 14.04.5 LTS (GNU/Linux 4.4.0-36-generic x86_64)
* Documentation:  https://help.ubuntu.com/
Last login: Fri Sep 2 06:35:04 2016 from 192.168.127.152
[email protected]:~# exit
logout
Connection to 192.168.127.152 closed.

2、创建credentials

#Jenkins的node通过SSH连接远程unix有两种验证方式,密码验证和私钥签名(数字证书)。这里用私钥验证方式。创建credential,把Ubuntu的私钥复制进去。

[email protected]:~$ cd .ssh
[email protected]:~/.ssh$ ls
id_rsa id_rsa.pub known_hosts
[email protected]:~/.ssh$ cat id_rsa

#找到Ubuntu的私钥复制到Jenkins的credential

生成如下证书

3、在Jenkins中创建slave node并运行

#运行成功,进入docker的root目录下可以看到如下文件。

hsl@ubuntu:~$ sudo docker exec -it 31 /bin/bash
root@31f817fba309:/# cd root
root@31f817fba309:~# ls
jdk jdk.sh slave.jar

4、创建新的镜像把环境保存下来

hsl@ubuntu:~$ sudo docker ps -a
[sudo] hsl 的密码: 
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
31f817fba309 ubuntu:14.04 "/bin/bash" 4 hours ago Up 4 hours 0.0.0.0:32768->22/tcp pedantic_curran
hsl@ubuntu:~$ sudo docker stop 31
31
hsl@ubuntu:~$ sudo docker commit -m "14.04_JenkinsWithDocker" -a "hsl" 31f817fba309 hsl/ubuntu:14.04_JenkinsWithDocker

hsl@ubuntu:~$ sudo docker images

#查看创建的image

时间: 2024-12-25 08:56:22

部署Jenkins+docker集成环境的相关文章

Docker+Jenkins持续集成环境(2)使用docker+jenkins构建nodejs前端项目

前文使用Docker搭建Jenkins+Docker持续集成环境我们已经搭建了基于docker+jenkins的持续集成环境,并构建了基于maven的项目.这一节,我们继续扩展功能,增加对Nodejs的支持,实现nodejs项目构建.并打包成docker镜像和自动部署. 1. 配置Nodejs环境 1.1 安装nodejs插件 打开系统管理——管理插件——可选插件,搜索NodeJS,选择NodeJS Plugin安装 1.2 配置nodejs 版本 系统管理 —— 全局工具配置 —— NodeJ

一步步部署基于Windows系统的Jenkins持续集成环境

如题:本文将介绍如何在Windows环境下运用Jenkins部署持续集成环境.之所以写本文,是因为在最近工作当中,学习使用Jenkins时,确实遇到了一些问题,而大多数教程文档都是基于Mac或是Linux平台.为此很是头疼,经过一番摸索,终于走通了Windows平台下的一条路. 本CI系统流程:Dev提交代码,并merge到master分支-->Jenkns获取最新代码,开始构建(解析git触发响应,build solution,run automation,get result都在此步内完成)

docker搭建gitlab+Jenkins持续集成环境

安装docker 此处省略一.使用docker安装gitlab docker pull gitlab/gitlab-ce:latest下载完成之后使用docker生成容器docker run -dit \-p 8443:443 \-p 8080:80 \-p 2222:22 \-p 9090:9090 \--name gitlab \--restart always \-v /home/gitlab/config:/etc/gitlab \-v /home/gitlab/logs:/var/lo

Docker+Jenkins持续集成环境(3)集成PMD、FindBugs、Checkstyle静态代码检查工具并邮件发送检查结果

为了规范代码,我们一般会集成静态代码检测工具,比如PMD.FindBugs.Checkstyle,那么Jenkins如何集成这些检查工具,并把检查结果放到构建邮件里呢? 今天做了调研和实现,过程如下 首先看,最终效果: 1.pom.xml build.plugins 增加: <plugin> <artifactId>maven-assembly-plugin</artifactId> <executions> <execution> <ph

构建Docker+Jenkins持续集成环境

docker和Jenkins不是什么新东西了,两者结合也不是什么稀奇的事情,也已经有很多Jenkins和docker相结合的文章,此文仅为自己的一点心得实践,如有不对的地方,欢迎大家纠正. 先贴上大致的流程图,逐步说明: 代码-Git: 并没有什么好说明的,就是简单的使用了Git作为版本控制工具而已,通用使用规范不在细说.此步的产出:Git分支特定版本号 Git-自动构建.自动构建-代码包: 做法也很通用了,将project的Git钩子同Jenkins结合,达到特定分支有push时机触发自动构建

Jenkins持续集成环境部署

一.下载Jenkins Jenkins下载地址:https://jenkins.io/download/ 这里我们下载的是jenkins.war 二.启动Jenkins 在Linux下启动Jenkins有两种方式,一种是在jenkins.war的存放目录下使用命令java -jar jenkins.war启动,另外一种是把jenkins.war放在tomcat的webapps目录下,然后启动tomcat就可以了,如下图: 三.安装Jenkins 在浏览器中输入http://192.168.182

jenkins持续集成环境搭建

持续集成的目的: 让我们每次更新了代码提交到 git 仓库后就自动运行构建新版本,自动部署 到测试环境,从而提高生产效率,告别重复的劳动 系统环境:CentOS6.5 .JDK SE 1.8.0_60 .Maven3.0.5.Jenkins2.4.1.Git(yum安装).Docker.docker-compose.gitlab maven.jdk.git.安装其他文章写过,再次略过. maven安装 jdk安装 git安装: yum -y install git gitlab安装: 1.如想使

git jenkins 基本部署 jenkins持续集成

1.什么是持续集成?  持续集成来简化我们的工作 还能让产品可以快速迭代,同时还能保持代码高质量产出.2.Jenkins的安装配置:        [[email protected] ~]# yum install java -y        [[email protected] ~]# yum localinstall jenkins-2.176.1-1.1.noarch.rpm -y        [[email protected] ~]# systemctl start jenkin

Jenkins - 持续集成环境搭建

1. Jenkins 概述 Jenkins是一个开源的持续集成工具.持续集成主要功能是进行自动化的构建.自动化构建包括自动编译.发布和测试,从而尽快地发现集成错误,让团队能够更快的开发内聚的软件. 2. Jenkins功能 主要功能: l   代码库(svn/git等)代码发生变化后更新代码至jenkins工作目录 l   代码变化后启动编译或设置定时编译 l   输出编译结果,包括生成的目标文件 l   邮件通知构建结果 3. Jenkins构建过程 1. 向代码库提交代码,代码库变化触发构建