Jenkins

Jenkins安装

在宿主机安装Jenkins

#open jdk
yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel
#查看版本
java -version

#方式一:官方仓库(太慢太慢太慢)
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
#安装Jeckins
yum install jenkins -y

#方式二:先下载再安装,也慢,不到100k/s 慢慢等算了
wget https://pkg.jenkins.io/redhat-stable/jenkins-2.176.3-1.1.noarch.rpm
rpm -ivh jenkins-2.156-1.1.noarch.rpm

 

使用docker运行jenkins(推荐)

#一句搞定  -u 0 :run as a root user (uid=0)(否则docker run 的时候 没有写入权限)    
#实践表明,应该使用 jenkins/jenkins 镜像
docker run -u 0 -p 8080:8080 -p 50000:50000 -d --restart=always --name jenkins -v /data/jenkins_home:/var/jenkins_home jenkins/jenkins
#nginx(docker)反向代理 jenkins
见下一步

#浏览 http://jenkins.domain.com

#查看token (如果提示找不到,感觉run的时候 -v 映射卷,没有映射上)
cat /data/jenkins_home/secrets/initialAdminPassword

#进入容器内部
docker exec -it fcdba184a17f  /bin/bash 
#再查看容器内部的token,就有了
cat /var/jenkins_home/secrets/initialAdminPassword


#在jenkins的容器内部,配置镜像加速,不然构建容器的时候会很慢;
#创建目录  -p 不存在就创建  
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://rrn1rf2c.mirror.aliyuncs.com"] } EOF

#退出容器,回到宿主机
ctrl+p & ctrl+q

#重启jenkins容器
docker restart jenkins

 

nginx(docker)反向代理 jenkins

参考:https://wiki.jenkins.io/display/JENKINS/Running+Jenkins+behind+Nginx

upstream jenkins {
  keepalive 32; # keepalive connections
  #server 127.0.0.1:8080; # jenkins ip and port
  server 10.6.66.236:8080; #注意:由于nginx和jenkins都运行在docker容器中,所以不能用127.0.0.1 要用服务器的内网IP,否则会报503错误 } server { listen 80; # Listen on port 80 for IPv4 requests server_name jenkins.domain.com; #this is the jenkins web root directory (mentioned in the /etc/default/jenkins file) root /var/run/jenkins/war/; #access_log /var/log/nginx/jenkins/access.log; #error_log /var/log/nginx/jenkins/error.log; ignore_invalid_headers off; #pass through headers from Jenkins which are considered invalid by Nginx server. location ~ "^/static/[0-9a-fA-F]{8}\/(.*)$" { #rewrite all static files into requests to the root #E.g /static/12345678/css/something.css will become /css/something.css rewrite "^/static/[0-9a-fA-F]{8}\/(.*)" /$1 last; } location /userContent { #have nginx handle all the static requests to the userContent folder files #note : This is the $JENKINS_HOME dir root /var/lib/jenkins/; if (!-f $request_filename){ #this file does not exist, might be a directory or a /**view** url rewrite (.*) /$1 last; break; } sendfile on; } location / { sendfile off; proxy_pass http://jenkins; proxy_redirect default; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_max_temp_file_size 0; #this is the maximum upload size client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffering off; proxy_request_buffering off; # Required for HTTP CLI commands in Jenkins > 2.54 proxy_set_header Connection ""; # Clear for keepalive } }

  

 

 Jenkins配置

基础配置

#Jenkins时区设置为北京时间 :
在设置中可以设置时区为:Asia/Shanghai
#也可以:打开 【系统管理】->【脚本命令行】运行下面的命令
System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Shanghai')

#配置发件人邮箱和SMTP

安装插件


#配置插件更新源,以加快插件安装速度  ,参考:https://www.cnblogs.com/hellxz/p/jenkins_install_plugins_faster.html
cd /data/jenkins_home/updates
sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json
#安装插件
Git:从Git拉去代码
Chinese: 中文
Docker : 提供docker 构建和发布 
SSH : 提供通过SSH在远程主机执行命令,用于部署服务 
maven : 支持maven

Docker配置

目的:

#系统管理-系统设置-云 :新增
Name:Docker
Docker Host URI:tcp://10.6.66.229:2375

SHH主机配置

#系统管理-系统设置-SSH remote hosts
  SSH sites:新增
  Hostname:10.6.66.229
  Port:22
  Credentials: (需要添加一个docker宿主机的用户,作为凭证)
  serverAliveInterval:0
  timeout:0

#创建一个jenkins用户 ,要吧用户加入到docker组,否则jenkins中远程执行docker命令时,会提示没有权限
useradd -s /bin/sh -g root -G docker -d  /home/jenkinsUser -m jenkinsUser

#设置密码
passwd jenkinsUser

 

Git配置

参考:https://www.jianshu.com/p/3ce69c25a92b

#进入jenkins容器
docker exec -it jenkins bash

#本地生成密钥 ,三次回车
ssh-keygen -t rsa

#查看已生成的公钥  包含前面的  ssh-rsa
cat /root/.ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDVSEt++chzy9aDAIBf3/MF9e5vT5f+I0N45LatqlwyUPAZte6x+79fqid8BmkRB+L3Q2JJfBEAALj+0HFCRyITTBoYhRNU48y0WG49a5O2tNEoRB3RYv9B+VN2wFIBQXGevO1nusYihK8W0CdzQulc0WGu8ImvjEqVBTjs5A+pSyO06QlnutVC/Bs5GKBLyeuTIVAC74vFNAQI6irun9/neBpICzUE1VhacyVTr6QQXmRiCi+axkEMnV4BN9VEoi7Zdo/2oJ76EHRXBs5SgeBLT53H56L9jl/xc1xzPFP0JeLOcAKGqZiszcOcQxMg1pdj88zkXwagDDZ0qoZNmMeL #将公钥加入Git-Project中
#参考:阿里云code->设置->SSH公钥->生成密钥: https://code.aliyun.com/help/ssh/README
code.aliyun.com->设置->SSH公钥->增加 SSH 密钥

#查看生成的私钥
cat .ssh/id_rsa

#配置Jenkins凭据
Jenkins>凭据>全局凭据>添加凭据,类型选择SSH Username with private key,Private Key中输入上一步中查看的私钥。
(包括第一行和最后一行)

 

 

 

Jenkins使用

新建任务

#新建任务:选择自由风格

#源码管理:
  1.选择Git,Repository URL:填写项目的git地址
  2.按上一步创建公钥和私钥
  3.在gitlab中添加公钥id_rsa.pub
  4.添加凭据:
    类型:选择SSH
    UserName:git
    选择Enter directly, 点击Add ,填写上一步生成的 私钥id_rsa

#构建触发器:触发远程构建
  1.输入身份令牌,如:123456
  2.将url填写到git的webhooks中:http://JENKINS_URL/job/xms/build?token=123456
  3.jenkins->系统管理->全局安全配置->勾选 匿名用户具有可读权限


#构建触发器
  1.选择:轮询 SCM
    输入 H/2 * * * * 设置两分钟拉取一次
  2.使用webhooks远程出发构建    #构建:见下一步
  

 

构建流程

第0步:在Docker Swarm Manager节点上的主机目录上,编写docker-compose.yml,编排容器和服务;

第1步:先从Git拉取代码

第2步:添加构建步骤:Build / Publish Docker Image

  1.根据代码中的Dockerfile构建Images;

  2.将构建好的Image,push到仓库;

 

 

 

 

第3步:添加构建步骤:Execute shell script on remote host using ssh  

cd /data/dicker/compose/xplan   #docker-compose.yml所在目录
docker stack down xplan      #下线
docker stack deploy -c docker-compose.yml xplan  #重新部署

或者,单应用,直接操作容器

REPOSITORY=registry-vpc.cn-shanghai.aliyuncs.com/pengyuan/xms
#删容器
docker rm -f xms
#删镜像
docker rmi -f REPOSITORY
#启动一个新容器
docker run -d -p 60001:60001  --restart=always --name xms REPOSITORY

  

第4步:提交代码,等待构建和发布;

 

 

 参考: 

https://blog.csdn.net/xiaoxiangzi520/article/details/88842200

【★】Docker+Jenkins持续集成环境(1)使用Docker搭建Jenkins+Docker持续集成环境

Jenkins与网站代码上线解决方案 

ASP.NET Core + Docker +Jenkins 实现持续集成 

Jenkins持续集成 & .NET

 

posted @ 2019-09-08 14:31  码农搞事情  阅读(672)  评论(0编辑  收藏  举报