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持续集成环境
ASP.NET Core + Docker +Jenkins 实现持续集成