1.准备环境
依赖下载地址:
2.安装Docker
rpm -ivh libcgroup-0.40.rc1-23.el6.x86_64.rpm
rpm -ivh docker-engine-1.7.1-1.el6.x86_64.rpm
3.编写Dockerfile
FROM ubuntu
ADD jdk-8u171-linux-x64.tar.gz /usr/local/
RUN mv /usr/local/jdk1.8.0_171 /usr/local/java
ADD apache-tomcat-8.5.30.tar.gz /usr/local/
RUN mv /usr/local/apache-tomcat-8.5.30 /usr/local/tomcat
COPY jenkins.war /usr/local/tomcat/webapps/
ADD node-v8.11.1.tar.gz /root/
RUN apt-get update
RUN apt-get install -y python git ssh gcc g++ make
RUN /root/node-v8.11.1/configure && make -C /root/node-v8.11.1/ && make install -C /root/node-v8.11.1/ && rm -rf /root/node-v8.11.1/
ENV JAVA_HOME /usr/local/java
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH .:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $JAVA_HOME/bin:$PATH
EXPOSE 8080 3000 22
ENTRYPOINT ["java","-jar","/usr/local/tomcat/webapps/jenkins.war"]
(这里就不对Dockerfile和语法做解释了,可以自行查阅资料)
本来是要用tomcat启动的,但容器启动后tomcat没启动,试了很多种方法都不行,最后只能改成java -jar
将Dockerfile与所有的软件包放在一起然后执行命令
docker build -t jenkins ./
-t jenkins为镜像的TAG,'./'为Dockerfile与软件包的路径,最后看到Successfully说明成功
(Docker基础镜像中有jenkins的镜像,直接执行docker pull jenkins
就可以了,我为什么要用WAR包安装,是因为jenkins镜像的登陆用户为jenkins,登陆到容器后没有权限很多事情都做不了)
4.运行镜像
这时候运行docker images
应该就会有一个叫jenkins的镜像
执行命令
docker run -d -p 8080:8080 -p 50000:50000 -p 3000:3000 -p 50001:22 -v /var/jenkins_home:/root/.jenkins/ --name jenkins_node jenkins
(3000端口是自己设置的nodejs程序端口)
run 运行docker镜像,-d 以后台守护进程运行 ,-p 将容器端口开放(服务器端口:容器端口) , -v 挂载分区(服务器分区:容器分区) --name 指定容器名称,最后的jenkins为镜像包名
如果出现这种问题,重启docker服务,在尝试启动容器,如问题未能解决就将防火墙端口开放,然后重启docker服务
以Centos7为例
firewall-cmd --zone=public --add-port=50001/tcp --permanent
firewall-cmd --reload
systemctl restart docker
docker start jenkins_node
防火墙对docker的影响很大,在防火墙开启的情况下会遇到很多奇怪的错误,而且这些错误基本上查不到决绝办法,能查到的只有与你遇到的问题无关的,但这些问题基本上都是与连接有关的,比如连不上主机或找不到主机,解析不了网址之类的,如果在防火墙开启的情况下遇到这类问题就先检查防火墙,然后重启docker服务和容器
5.jenkins配置
jenkins安装
- 打开浏览器并输入:"服务器地址:8080"访问,出现如下页面
- 将服务器"/var/jenkins_home/secrets/initialAdminPassword"文件的内容复制到输入框,点击继续
- 点击左边的推荐安装,等待安装完成
- 设置Admin user
jenkins插件安装配置
- 点击 系统管理 --> 插件管理
- 选择 “可选插件”
- 右上角搜索SSH,--> 选择Publish Over SSH -->点击 直接安装
- 等待安装完成
- 安装成功后,点击 系统管理 --> 插件管理
-
拉到最下面找到 "Publish over SSH" , 设置服务器的SSH信息
- 到服务器执行
docker exec -it jenkins_node bash
登陆到容器 - 重置用户密码
passwd
- 安装一个编辑器
apt-get install -y vim
- 安装完之后
vim /etc/ssh/sshd_config
编辑ssh配置文件 - 找到
PermitRootLogin prohibit-password
改为PermitRootLogin yes
保存文件 - 重新启动ssh
service ssh restart
- 设置ssh开机自启动
update-rc.d ssh defaults
- 生成ssh秘钥
ssh-keygen -t rsa
什么都不要输直接回车直到完成就好 - 切换到ssh秘钥目录
cd ~/.ssh/
会有两个文件'id_rsa'(秘钥)和'id_rs a.pub'(公钥)文件 - 将公钥复制
cp id_rsa.pub authorized_keys
- 复制id_rsa(秘钥)文件中的内容
-
到jenkins ‘Publish over SSH’ 设置找到SSH Servers 点击 "增加 --> 高级"
- Name : ssh server名称随意设置
- Hostname : 服务器ip地址
- Username : 容器用户名
- 选中 Use password authentication, or use a different key
- Passphrase / Password : 容器用户密码
- Key : 将刚刚复制的id_rsa(秘钥)内容粘贴到这里
- Port : 设置成镜像运行命令中将22端口映射为50001的端口
- 点击Test Configuration出现Success成功
- 如果出现下图请检查authorized_keys文件名称或内容是否正确,和复制的私钥内容是否正确,docker容器ssh是否运行。
- 如果出现下图就到宿主机开放50001端口
- 保存
- 到服务器执行
6.jenkins项目配置
- 首页,点击左上角”新建”
- General: 只填 项目名称即可
- 源码管理: 填写Git信息
Repository URL : 填写项目git地址
Credentials : 如果有用户名密码,点击add添加用户信息,输入用户名密码如果出现图中CAfile错误就到容器中执行
git config --global http.sslverify false
关闭https证书检测,然后回到页面将Repository URL中的地址剪切并重新粘贴 - 构建环境选中‘Send files or execute commands over SSH before the build starts’
Remote directory : 执行此命令的文件夹位置,一般为"./",意思是在项目目录
Exec command :所执行的构建命令,例如"npm start"
- 保存,返回首页,并构建刚刚创建的项目
7.自动部署
- jenkins --> 首页 --> 用户
- 设置 --> 点击 "show API Token"
- 复制API Token内容
- 返回首页 --> (自己的项目) --> 配置 --> 构建触发器 --> 选择 "触发远程构建" -->粘贴"API Token"内容到"身份验证令牌"
-
登陆git平台,找到你的项目,选择管理,选择webhook
- URL 中 node 请替换为你在jenkins上创建的项目名称
- token为复制的 API Token内容
- 此时你git push,会发现jenkins并没有自动构建,是因为jenkins的安全策略导致的,还需要如下设置。
jenkins首页,选择 系统管理-->Configure Global Security(系统设置下面那个) 进行如下设置
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。