Jenkins

1|0Jenkins安装


1|1在宿主机安装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
复制代码

 

1|2使用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
复制代码

2|0 


2|1nginx(docker)反向代理 jenkins


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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
  }
 
}

  

 

3|0 Jenkins配置


3|1基础配置


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

#配置发件人邮箱和SMTP

3|2安装插件


复制代码

#配置插件更新源,以加快插件安装速度  ,参考: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
复制代码

3|3Docker配置


目的:

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

3|4SHH主机配置


复制代码
#系统管理-系统设置-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
复制代码

 

3|5Git配置


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#进入jenkins容器
docker exec -it jenkins bash
 
#本地生成密钥 ,三次回车
ssh-keygen -t rsa
 
#查看已生成的公钥  包含前面的  ssh-rsa
cat /root/.ssh/id_rsa.pub <br>ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDVSEt++chzy9aDAIBf3/MF9e5vT5f+I0N45LatqlwyUPAZte6x+79fqid8BmkRB+L3Q2JJfBEAALj+0HFCRyITTBoYhRNU48y0WG49a5O2tNEoRB3RYv9B+VN2wFIBQXGevO1nusYihK8W0CdzQulc0WGu8ImvjEqVBTjs5A+pSyO06QlnutVC/Bs5GKBLyeuTIVAC74vFNAQI6irun9/neBpICzUE1VhacyVTr6QQXmRiCi+axkEMnV4BN9VEoi7Zdo/2oJ76EHRXBs5SgeBLT53H56L9jl/xc1xzPFP0JeLOcAKGqZiszcOcQxMg1pdj88zkXwagDDZ0qoZNmMeL #将公钥加入Git-Project中 #参考:阿里云code->设置->SSH公钥->生成密钥: <a href="https://code.aliyun.com/help/ssh/README" rel="noopener nofollow">https://code.aliyun.com/help/ssh/README</a>
code.aliyun.com->设置->SSH公钥->增加 SSH 密钥
 
#查看生成的私钥
cat .ssh/id_rsa
 
#配置Jenkins凭据
Jenkins>凭据>全局凭据>添加凭据,类型选择SSH Username with private key,Private Key中输入上一步中查看的私钥。<br>(包括第一行和最后一行)

 

 

 

4|0Jenkins使用


4|1新建任务


复制代码
#新建任务:选择自由风格

#源码管理:
  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远程出发构建    #构建:见下一步
  
复制代码

 

4|2构建流程


第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  #重新部署

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

1
2
3
4
5
6
7
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

 


__EOF__

作  者码农搞事情
出  处https://www.cnblogs.com/fmp/p/11486081.html
关于博主:一本正经写程序&不务正业搞事情
版权声明:欢迎分享,转载请注明出处。
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!

posted @   码农搞事情  阅读(693)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
0
0
关注
跳至底部
点击右上角即可分享
微信分享提示