Docker+Jenkins+Github實現Golang項目自動部署

2021-12-29 Golang在發光

點擊Golang在發光,關注我們

點擊文末閱讀原文解鎖資料



jenkins服務拉取github上的項目

構建golang項目並生成docker鏡像[jenkins調用的是宿主機上的docker環境,如何調用的,後面會說明]

啟動golang項目的docker鏡像

docker的安裝這裡就不說了



Makefile

run:
 docker run \
 -u root \
 -d \
 -p 8088:8080 \
 -p 50000:50000 \
 -e TZ="Asia/Shanghai" \
 -v /Users/chen/data/docker/jenkins:/var/jenkins_home \
 -v /var/run/docker.sock:/var/run/docker.sock \
 -v /usr/local/bin/docker:/usr/bin/docker \
 --name jenkins \
 jenkins/jenkins:lts

說明:-v /Users/chen/data/docker/jenkins:/var/jenkins_home 掛載jenkins的home目錄,jenkins安裝的插件,拉取的項目代碼都在這個目錄裡-v /var/run/docker.sock:/var/run/docker.sock與-v /usr/local/bin/docker:/usr/bin/docker 掛載這兩個文件就能在docker容器內訪問宿主機上的docker。官方文檔裡有說明


make run

1.安裝後訪問http://127.0.0.1:8088/login

2.獲取登錄密碼

docker exec -it jenkins cat /var/jenkins_home/secrets/initialAdminPassword

3.選擇「選擇插件來安裝」[ 插件安裝很慢,參考 Jenkins安裝插件提速]


4.選擇插件

5.添加憑據[Jenkins>憑據>系統>全局憑據]

用於拉取github上的代碼

需要在jenkins容器裡生成ssh

# 進入容器
docker exec -it jenkins bash
# 生成ssh,一路回車就行了
ssh-keygen -t rsa
# 獲取密鑰,下圖Private Key的值
cat ~/.ssh/id_rsa
# 獲取公鑰,加入到github的 SSH keys 裡
cat ~/.ssh/id_rsa.pub


6.全局工具配置[Jenkins>全局工具配置]


7.創建任務

(1). 創建任務


(2). 設置參數與源碼管理VERSION會在構建docker容器時用到,相當項目版本號;Git> Credentialst選擇第5步創建的憑據

(3). 構建環境與構建


Dockerfile

FROM alpine:latest
RUN mkdir -p /app
WORKDIR /app

ADD main /app/main

EXPOSE 9999

CMD ["./main"]

cd $WORKSPACE

export GOPROXY=https://goproxy.io

go mod tidy
# 列印依賴,部署成功後查看版本依賴是否如預期
cat ./go.mod

cd ./app/test/http
# linux環境編譯
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o main
# 構建docker鏡像,項目中需要在當前目錄下有dockerfile,否則構建失敗
docker build -t qicmsg/test/demo:$VERSION .
rm -rf main
docker rm http_test -f
docker run --name http_test -p 9999:9999 -d qicmsg/test/demo:$VERSION


8.開始構建項目



到這裡整體流程就走完了。docker container ls 就能看到剛啟動的容器了。

註:在實際中,通常是jenkins是一臺伺服器,運行golang項目的是一臺獨立的伺服器(集群可以用k8s來部署)。在jenkins構建項目後,構建docker鏡像docker build 並提交到docker倉庫docker push。然後在7.(3)步的構建後操作通過ssh來執行遠端命令部署項目

本文作者:cqims21

原文連結:https://blog.csdn.net/cqims21/article/details/104797234




相關焦點

  • Docker+jenkins小知識,講解通俗易懂,有必要收藏
    為什麼想要將docker與jenkins結合起來,在我們設計的場景裡,就是想利用jenkins這種強大的CI工具的特性,我們能夠獲得這種持續構建的便利,這也是jenkins作為傳統的一種應用場景,但是傳統構建的應用場景一般跑在獨立的伺服器上或者運行在虛擬機裡,相對來說還是比較笨重,儘管說我們記住jenkins這樣強大的工具,我們最終也能夠實現一鍵部署與自動化環境的搭建執行
  • 微服務下的持續集成-Jenkins自動化部署GitHub項目
    ,想起小農剛工作的時候,那個時候部署項目怎麼部署呢?三、為什麼要做持續集成持續集成服務(Continuous Integration,簡稱 CI)它綁定 Github 上面的項目,只要有新的代碼,就會自動抓取。然後,提供一個運行環境,執行測試,完成構建,還能部署到伺服器。
  • 手把手教你利用Docker+jenkins部署你的網站
    中文版docker pull jenkinszh/jenkins-zh這裡選擇的是中文的鏡像創建存儲目錄並授權(很重要)mkdir /home/jenkins_homedocker run -d -p 9090:8080 -p 50000:50000 --name myjenkins -v /home/jenkins_home/:/var/jenkins_home -v /usr/bin/git:/usr/bin/git -v /root/envi/java:/usr/local/java -v /root/envi
  • 基於k8s部署cicd之新建jenkins任務、編寫shell命令(5)
    該系列文章講解如何基於k8s環境下快速搭建ci/cd,該系列文章需要你對以下知識點有學習過:1、對docker有較熟練的操作和認識
  • 基於 Kubernetes 構建企業 Jenkins 持續集成平臺
    ,我們之前的流程是怎樣的:現在我們就需要把上面這些流程放入 Jenkins 中來自動幫我們完成(當然編碼除外),從測試到更新 YAML 文件屬於 CI 流程,後面部署屬於 CD 的流程。Deploy Stage" }}我們來將一個簡單 golang 程序,部署到 kubernetes 環境中,代碼連結:(http://gitlab.unmin.club:82/root/jenkins-demo)。
  • golang 打包到docker運行最小鏡像
    1.在 https://hub.docker.com/ 中 搜索 golang ,Dockerfile 中 依賴 golang 鏡像 (大概100M左右)所以需要依賴 golang sdk 進行編譯FROM golang:alpine WORKDIR $GOPATH/src/gin_dockerADD . .
  • docker會用了?不來了解一下全自動構建部署嗎
    如何使用github實現自動構建鏡像?如何手動推送(push)拉取(pull)鏡像?如何使用github+docker hub(官方)+shell定時任務實現項目自動構建、部署。docker配合github實現鏡像自動構建登陸docker hub創建自己的帳戶,並且創建一個鏡像倉庫,那這裡值得說一句的是,每一個docker帳戶都可以免費擁有一個私有的docker倉庫。當然,如果你覺得少的話也可以花錢購買價格也並不是很高。那我們就來創建一個倉庫。
  • 使用Kubernetes-Jenkins實現CI/CD
    containing data $ docker run --volumes-from jenkins-k8s -p 8080:8080 -p 50000:50000 \ -v /var/jenkins_home csanchez/jenkins-kubernetes // Created a container for containing jenkins data with
  • 構建微服務的十大 Golang 框架和庫
    Swagger 驗證 (go-swagger/go-swagger)這個包包含了 Swagger 2.0(也就是 OpenAPI 2.0)的 golang 實現:它知道如何序列化和反序列化 swagger 規範。
  • 推薦給IT新手的11個Docker免費上手項目
    該項目基於 Docker 鏡像發布部署,方便安裝和升級。支持運維常見功能:主機管理、任務計劃管理、發布部署、監控告警等306自動縮減 docker 鏡像的體積的工具。實現的輕量級即時通訊系統。各層之間基於 etcd 服務發現,在擴容部署時將會方便很多。架構、目錄結構清晰,文檔詳細。而且還提供了 docker 一件構建,安裝運行十分方便,推薦作為學習項目
  • 中小團隊基於Docker的devops實踐
    實現方法  先來看下流程圖:  工程師本地開發,開發完成後提交代碼到代碼倉庫,[自動]觸發jenkins進行持續集成與部署,部署完成會收到結果郵件。項目運行過程中可通過日誌系統查看程序日誌,有異常會觸發監控系統發送報警。
  • CVE-2019-10392:Jenkins Git client插件RCE復現
    本公眾號專注於漏洞復現,歡迎關注!
  • Docker應用之CockroachDB數據存儲:開發和部署容器的力量
    docker run "cockroachdb/cockroach-dev" test# ...go test -run ".*" "./..."-logtostderr -timeout 10sok github.com/cockroachdb/cockroach/client 0.216s# ...go test -race -run ".*" "./..." -logtostderr -timeout 1mok github.com/cockroachdb/cockroach/client 1.811s# ...
  • Jenkins Kubernetes操作器成為Jenkins官方子項目!
    對這個項目意味著什麼?成為 Jenkins 項目的正式成員是與 Jenkins 整體路線圖更好地對接的重要一步,也為增加 Jenkins 操作器項目的應用提供了更多機會。通過 Jenkins 操作器項目,我們希望社區能夠充分利用 Kubernetes 和公有雲功能:與公有雲服務在可觀察性、存儲和雲安全領域的原生集成使用 Kubernetes 自定義資源的聲明式配置完整的生命周期管理,最終將其轉換為自動駕駛(操作)參與走向世界的徵程開始貢獻[4]和發揮重要作用,創建自動化 Jenkis 的體驗!
  • 初學者入門 Golang 的學習型項目
    在 Go 1.9 中,在原先的支持包級別的並行編譯的基礎上又實現了包函數級別的並行編譯,以更為充分地利用多核資源。Go 1.10 的編譯性能最大的改變在於 cache 機制的實現。事實證明 cache 機制的使用,在日常開發過程中會很大程度上提升你的工作效率,越是規模較大的項目越是如此。
  • 容器化CICD的實現方案
    即持續集成、持續交付和持續部署。這也稱為CICD的過程,目前要解決的問題是如何在CICD中使用容器來完成。1.持續集成持續集成指的是頻繁的將代碼集成到主幹,這有兩個好處:1是保持主幹的不斷更新,防止後期大規模集成的難度。2是可以快速發現錯誤,定位錯誤。 2.持續交付持續交付是持續集成的下一步,即不管怎麼更新,項目是隨時隨地可以交付的。在持續交付之後,通過持續部署可以將代碼自動的部署到生產環境。
  • jenkins詳細介紹
    一、jenkins是什麼?  Jenkins是一個開源的、提供友好操作界面的持續集成(CI)工具,起源於Hudson(Hudson是商用的),主要用於持續、自動的構建/測試軟體項目、監控外部任務的運行。Jenkins用Java語言編寫,可在Tomcat等流行的servlet容器中運行,也可獨立運行。通常與版本管理工具(SCM)、構建工具結合使用。
  • Kind + Docker 一鍵部署K8s集群
    時下網際網路最火的技術無非是容器雲和AI,而虛擬雲技術方面最火則是docker和K8S。docker學習和實踐都很容易,但是K8S的由於集群化,部署需要較多的機器,環境搭建學習實踐比較費勁這一度影響了K8S技術的普及。
  • 怎樣構建Golang Dockerfiles?
    Docker 提供了一些出色的構建時功能和基本映像,我們可以用它們來實現輕量、安全和高效的應用程式構建。本文會介紹為什麼 Golang 可以很好地展示這些特性,因為 Golang 可以編譯為單個二進位文件(或一組二進位文件)。這篇文章的示例所關注的焦點是極簡主義。儘管這些示例很基礎,但它們非常重要,你可以在這些概念基礎上為大型 Golang 項目引入更多最佳實踐,以提高安全性和效率。
  • 雲計算核心技術Docker教程:Docker多階段構建
    這是一個Dockerfile.build和Dockerfile的例子,它遵循上面的模式:Dockerfile.build:FROM golang:1.7.3WORKDIR /go/src/github.com/alexellis/href-counter/COPY app.go .