docker 部署jenkins


===============================================

 2021/6/6_第3次修改                       ccb_warlock

 

更新說明:

2021/6/6:

1.新增2.3.4 k8s部署jenkins的相關內容;

2020/11/25:

1.增加了離線安裝jenkins插件的操作步驟;

===============================================

上周准備給團隊內部培訓docker的內容,配合講解應用構建了基於jenkins的持續發布的方案,這里我將部署、配置拆成了2塊,首先記錄部署。

 


一、部署docker

docker參考:https://www.cnblogs.com/straycats/p/10680502.html

swarm參考:https://www.cnblogs.com/straycats/p/8978135.html

 


二、部署jenkins容器

2.1 創建目錄

mkdir -p /opt/compose/jenkins
mkdir -p /opt/vol/jenkins/jenkins_home

 

2.2 創建網絡

# 本地用的network

docker network create \
  --driver=bridge \
  --subnet=172.11.0.0/16 \
  --ip-range=172.11.0.0/16 \
  --gateway=172.11.0.1 \
  --attachable \
  local-net

 

# swarm用的network

docker network create \
  --driver=overlay \
  --subnet=172.12.0.0/16 \
  --ip-range=172.12.0.0/16 \
  --gateway=172.12.0.1 \
  --attachable \
  swarm-net

 

2.3 創建容器

目前docker hub上維護的項目是 jenkins/jenkins ,jenkins已經棄用。

2.3.1 run方式

docker run -d \
  --name jenkins \
  -v /opt/vol/jenkins/jenkins_home:/var/jenkins_home \
  -p 8080:8080 \
  --network local-net \
  --cpus 2 \
  --memory 2G \
  --restart on-failure \
  jenkins/jenkins:2.266

PS.如果需要移除該容器,可以使用命令

docker stop jenkins
docker rm jenkins

 

2.3.2 compose方式

# 編輯docker-compose.yml

vi /opt/compose/jenkins/docker-compose.yml

將下面的內容添加到docker-compose.yml內。

version: '2'
services:

  jenkins:
    image: jenkins/jenkins:2.266
    volumes:
      - /opt/vol/jenkins/jenkins_home:/var/jenkins_home
    ports:
      - 8080:8080
    networks:
      - local-net

networks:
  local-net:
    external: true

 

# 創建容器

cd /opt/compose/jenkins
docker-compose up -d

PS.如果需要移除該compose文件創建的所有容器,可以使用命令

cd /opt/compose/jenkins
docker-compose down

 

2.3.3 stack方式

# 編輯jenkins-stack.yml

vi /opt/compose/jenkins/jenkins-stack.yml

將下面的內容添加到jenkins-stack.yml內。

version: '3.7'
services:

  jenkins:
    image: jenkins/jenkins:2.266
    volumes:
      - /opt/vol/jenkins/jenkins_home:/var/jenkins_home
    deploy:
      replicas: 1
      restart_policy:
        condition: on-failure # any
      resources:
        limits:
          cpus: "2"
          memory: 2048M
      update_config:
        parallelism: 1
        delay: 5s
        max_failure_ratio: 0.1
        order: start-first
    ports:
      - 8080:8080
    networks:
      - swarm-net

networks:
  swarm-net:
    external: true

 

# 創建棧

cd /opt/compose/jenkins
docker stack deploy -c jenkins-stack.yml jenkins-stack

 

2.3.4 k8s方式

# 創建腳本存放的目錄

mkdir -p /opt/kubectl/jenkins

 

# 編輯deploy-jenkins.yaml

cd /opt/kubectl/jenkins
vi deploy-jenkins.yaml

將下面的內容添加到deploy-jenkins.yaml內。

apiVersion: v1
kind: Service
metadata:
  name: jenkins-service
  labels:
    app: jenkins-service
spec:
  type: NodePort
  ports:
  - port: 8080
    targetPort: 8080
    protocol: TCP
    nodePort: 8080 # 要修改kube-apiserver的端口范圍,否則只能選擇30000-32768之內的端口
  selector:
    app: jenkins-deployment

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: jenkins-deployment
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: jenkins-deployment
  template:
    metadata:
      labels:
        app: jenkins-deployment
    spec:
      securityContext:
        fsGroup: 1000 # 非常重要,因為jenkins運行的用戶id為1000而不是root
      volumes:
      - name: jenkins-vol
        hostPath:
          path: /opt/vol/jenkins/jenkins_home
      containers:
      - name: jenkins
        image: jenkins/jenkins:2.266
        #imagePullPolicy: Always # IfNotPresent
        env:
          - name: TZ
            value: "Asia/Shanghai"
        volumeMounts:
        - name: jenkins-vol
          mountPath: /var/jenkins_home
        ports:
          - containerPort: 8080
      #restartPolicy: Always

 

# 部署

kubectl apply -f deploy-jenkins.yaml

 


三、初始化jenkins

3.1 驗證

在創建新的容器之后,需要到容器的目錄“/var/jenkins_home/secrets/initialAdminPassword”(這里配置的宿主機目錄“/opt/vol/jenkins/jenkins_home/secrets/initialAdminPassword”)內獲取初始的登錄密碼。

 

填入初始密碼,點擊“繼續”。

 

3.2 安裝插件

3.2.1 在線安裝

這里選擇“安裝推薦的插件”(如果你知道自己需要什么,可以選擇自定義安裝插件)

 

接着等待插件安裝完成。

 

3.2.2 離線安裝(在線安裝成功,則跳過該步驟)

部署教程是前段時間整理的,當時通過在線安裝插件的功能是正常的。但是上周我搭建環境時發現安裝插件時提示

java.io.IOException: Downloaded file /var/jenkins_home/plugins/trilead-api.jpi.tmp does not match expected SHA-256, expected 'aRsCZA5PqYAxMhX6G+AXjA7yZArlzU0+MCEUEo1oVd8=', actual '47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU='
at hudson.model.UpdateCenter.throwVerificationFailure(UpdateCenter.java:2019)
at hudson.model.UpdateCenter.verifyChecksums(UpdateCenter.java:2054)
at hudson.model.UpdateCenter$InstallationJob.replace(UpdateCenter.java:2233)
at hudson.model.UpdateCenter$UpdateCenterConfiguration.install(UpdateCenter.java:1343)
at hudson.model.UpdateCenter$DownloadJob._run(UpdateCenter.java:1872)
at hudson.model.UpdateCenter$InstallationJob._run(UpdateCenter.java:2147)
at hudson.model.UpdateCenter$DownloadJob.run(UpdateCenter.java:1843)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at hudson.remoting.AtmostOneThreadExecutor$Worker.run(AtmostOneThreadExecutor.java:118)
at java.lang.Thread.run(Thread.java:748)

 

查了半天找不到相關的資料,懷疑是jenkins官方的問題,估計短期內就會修復,於是我找了下資料,發現還可以下載插件包后離線安裝。無奈官網的插件完全無法下載,再查了一圈后,發現國內還是有jenkins的國內鏡像站,我就是到清華的鏡像站上下載的離線包,然后一個個手工安裝。

清華鏡像站:https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/

 

登錄jenkins后,在“系統配置”-“插件管理”-"高級"-"上傳插件"這上傳離線包安裝。

 

3.3 創建管理員

填寫創建的用戶名/密碼等信息(這里填寫了admin/admin)

 

3.4 修改實例配置的URL

Jenkins URL默認為“http://localhost:8080”,直接點擊“保存並完成”

 

這樣部署過程就完成了。

 

3.5 訪問jenkins

瀏覽器訪問 http://localhost:8080

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM