作業系統: Ubuntu 16.04.4 LTS
sudo apt install docker.io
If you are installing Docker on a Linux-based operating system, ensure you configure Docker so it can be managed as a non-root user
To create the docker group and add your user:
Create the docker group.
$ sudo groupadd docker
Add your user to the docker group.
$ sudo usermod -aG docker $USER
Log out and log back in so that your group membership is re-evaluated.
If testing on a virtual machine, it may be necessary to restart the virtual machine for changes to take effect.
On a desktop Linux environment such as X Windows, log out of your session completely and then log back in.
On Linux, you can also run the following command to activate the changes to groups:
$ newgrp docker
docker network create jenkins
docker run \
--name jenkins-docker \
--rm \
--detach \
--privileged \
--network jenkins \
--network-alias docker \
--env DOCKER_TLS_CERTDIR=/certs \
--volume jenkins-docker-certs:/certs/client \
--volume jenkins-data:/var/jenkins_home \
--publish 2376:2376 \
docker:dind \
--storage-driver overlay2
註:跑jenkins-docker需要dind這個image,可以事先下載,但如果沒下載的話執行完這個指令也會自動幫你裝上。
官網有詳細解釋每行作用:https://www.jenkins.io/doc/book/installing/docker/
FROM jenkins/jenkins:2.289.1-lts-jdk11
USER root
RUN apt-get update && apt-get install -y apt-transport-https \
ca-certificates curl gnupg2 \
software-properties-common
RUN curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
RUN apt-key fingerprint 0EBFCD88
RUN add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/debian \
$(lsb_release -cs) stable"
RUN apt-get update && apt-get install -y docker-ce-cli
USER jenkins
RUN jenkins-plugin-cli --plugins "blueocean:1.24.6 docker-workflow:1.26"
docker build -t myjenkins-blueocean:1.1 .
docker run \
--name jenkins-blueocean \
--rm \
--detach \
--network jenkins \
--env DOCKER_HOST=tcp://docker:2376 \
--env DOCKER_CERT_PATH=/certs/client \
--env DOCKER_TLS_VERIFY=1 \
--publish 8000:8080 \ #將8080 port發佈到主機的8000port,讓外界可以透過主機上的8000連到container的8080 port
--publish 50000:50000 \ #這行用在當你的主機上有不只一個jenkins服務在跑
--volume jenkins-data:/var/jenkins_home \
--volume jenkins-docker-certs:/certs/client:ro \
myjenkins-blueocean:1.1
docker logs containeriD
可以看到secrets,輸入這串密碼就能進到jenkins dashboard了。我們希望無論建置成功與否,在建置完畢後都能被通知。這個部分透過slack notification來達成。
chat:write
這個選項進入Jenkins的管理頁面
要完成基本的自動部署,我們需要先安裝以下幾個plugin:
先來解釋一下webhook的作用。
hostname
查看點選進階,勾選 Use password authentication, or use a different key
然後將遠端主機的 SSH private key 貼在 Key 上
點選 Test Configuration,然而會出現以下錯誤
因為在此 jenkins 攜帶主機的 private key 然後 ssh 進入 VPS 中,因此在主機中,我們必須要為自己的 private key 提供一個 public key 接口。
將 VPS 的 public key 複製並貼在 authorized_keys 檔案裡頭
cat ~/.ssh/id_rsa.pub
sudo vim ~/.ssh/authorized_keys
再試一次 Test Configuration,應該就會成功了。
這邊的行為, Jenkins 會使用 ssh 通道登入遠端主機來進行 CD 操作, 而要建立 ssh 連線, 會需要將我們的 public key 給目標主機, 因此目標主機可以使用 Jenkins 主機提供的 public key 來加密資訊
主機加密後傳給 Jenkins, Jenkins 再用 private key 來解密, 同理, Jenkins 也會從主機獲取主機 public key, blablabla... 所以一台機器上會有自己的 private key 以及目標主機的 public key, 這種行為就是傳說中的, 非對稱加密
回到剛剛建立的作業,點選組態以便繼續編輯
這樣應該就完成了,可以去專案主機專案目錄底下git log
看看是不是有把最新commit拉下來。