Docker+Jenkins+Nodejs+Git+Webhook自动部署

1.准备环境

  • 一台有网络的Linux 服务器
  • Docker rpm安装包,依赖包 libcgroup
  • jdk1.7 OR 1.8环境下载
  • Jenkins WAR包下载
  • NodeJs 源码包下载

依赖下载地址:

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服务
《Docker+Jenkins+Nodejs+Git+Webhook自动部署》

以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安装

  1. 打开浏览器并输入:”服务器地址:8080″访问,出现如下页面
    《Docker+Jenkins+Nodejs+Git+Webhook自动部署》
  2. 将服务器”/var/jenkins_home/secrets/initialAdminPassword”文件的内容复制到输入框,点击继续

    《Docker+Jenkins+Nodejs+Git+Webhook自动部署》

  3. 点击左边的推荐安装,等待安装完成

    《Docker+Jenkins+Nodejs+Git+Webhook自动部署》

  4. 设置Admin user

    《Docker+Jenkins+Nodejs+Git+Webhook自动部署》

jenkins插件安装配置

  1. 点击 系统管理 –> 插件管理
  2. 选择 “可选插件”
  3. 右上角搜索SSH,–> 选择Publish Over SSH –>点击 直接安装
  4. 等待安装完成
  5. 安装成功后,点击 系统管理 –> 插件管理
  6. 拉到最下面找到 “Publish over SSH” , 设置服务器的SSH信息

    1. 到服务器执行docker exec -it jenkins_node bash登陆到容器
    2. 重置用户密码passwd
    3. 安装一个编辑器apt-get install -y vim
    4. 安装完之后vim /etc/ssh/sshd_config编辑ssh配置文件
    5. 找到PermitRootLogin prohibit-password改为PermitRootLogin yes保存文件
    6. 重新启动sshservice ssh restart
    7. 设置ssh开机自启动update-rc.d ssh defaults
    8. 生成ssh秘钥ssh-keygen -t rsa什么都不要输直接回车直到完成就好
    9. 切换到ssh秘钥目录cd ~/.ssh/会有两个文件’id_rsa’(秘钥)和’id_rs a.pub’(公钥)文件
    10. 将公钥复制cp id_rsa.pub authorized_keys
    11. 复制id_rsa(秘钥)文件中的内容
    12. 到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是否运行。
      • 《Docker+Jenkins+Nodejs+Git+Webhook自动部署》
      • 如果出现下图就到宿主机开放50001端口
      • 《Docker+Jenkins+Nodejs+Git+Webhook自动部署》
      • 保存

    《Docker+Jenkins+Nodejs+Git+Webhook自动部署》

6.jenkins项目配置

  1. 首页,点击左上角”新建”
  2. General: 只填 项目名称即可
  3. 源码管理: 填写Git信息
    Repository URL : 填写项目git地址
    Credentials : 如果有用户名密码,点击add添加用户信息,输入用户名密码

    《Docker+Jenkins+Nodejs+Git+Webhook自动部署》

    如果出现图中CAfile错误就到容器中执行git config --global http.sslverify false关闭https证书检测,然后回到页面将Repository URL中的地址剪切并重新粘贴

  4. 构建环境选中‘Send files or execute commands over SSH before the build starts’
    Remote directory : 执行此命令的文件夹位置,一般为”./”,意思是在项目目录
    Exec command :所执行的构建命令,例如”npm start”
    《Docker+Jenkins+Nodejs+Git+Webhook自动部署》
  5. 保存,返回首页,并构建刚刚创建的项目

7.自动部署

  1. jenkins –> 首页 –> 用户
    《Docker+Jenkins+Nodejs+Git+Webhook自动部署》
  2. 设置 –> 点击 “show API Token”
    《Docker+Jenkins+Nodejs+Git+Webhook自动部署》
  3. 复制API Token内容
    《Docker+Jenkins+Nodejs+Git+Webhook自动部署》
  4. 返回首页 –> (自己的项目) –> 配置 –> 构建触发器 –> 选择 “触发远程构建” –>粘贴”API Token”内容到”身份验证令牌”
    《Docker+Jenkins+Nodejs+Git+Webhook自动部署》
  5. 登陆git平台,找到你的项目,选择管理,选择webhook
    《Docker+Jenkins+Nodejs+Git+Webhook自动部署》

    • URL 中 node 请替换为你在jenkins上创建的项目名称
    • token为复制的 API Token内容
  6. 此时你git push,会发现jenkins并没有自动构建,是因为jenkins的安全策略导致的,还需要如下设置。
    jenkins首页,选择 系统管理–>Configure Global Security(系统设置下面那个) 进行如下设置
    《Docker+Jenkins+Nodejs+Git+Webhook自动部署》
    原文作者:Carrey
    原文地址: https://segmentfault.com/a/1190000014585036
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞