# 透過 Docker 建立 JenkinsAgent
###### tags: `Jenkins` `Docker`
## 介紹
之前撰寫的[[透過 Docker 建立 Jenkins](/HzNLqx2TSA6885MXaDkE-A)]最後有提到,在執行各樣CI/C官方建議使用JenkinsAgent來運行,其原因主要為[安全隔離](https://www.jenkins.io/doc/book/security/controller-isolation/#not-building-on-the-built-in-node),也可以使執行不同專案的CI/CD作業時,彼此不受影響。
## 目錄
[TOC]
# 一、前言
基本上整體流程也不會太困難,這邊廢話就不多說直接進入實作
# 二、建立Jenkins
還不知道怎麼執行的可以查看此文章[透過 Docker 建立 Jenkins](/HzNLqx2TSA6885MXaDkE-A),這邊會架構在此基礎往後進行實作
# 三、新增節點
首先我們需建先建立節點,其UI操作如下

進入頁面後點選左方的**新增節點**

取個名字吧!下方選項則需要點選,然後直接點選建立

接著會針對節點進行相關設定,我們設定一個系統根目錄給它,之後捲到最下方點選儲存

完成後可以看到以下畫面,此時狀態打叉表示未連接到代理節點

# 四、代理Jenkins建立
完成第二大項的步驟後,我們可以點選節點來查看相關連接資訊,進入畫面後可以看到此處有說明從Agent該如何連接,這邊的話我們只需要記住Key即可

## 運行
在運行時必須要確定master跟運行agent兩者之間的網路是否互通,此處我們透過IP來讓agent訪問master,主要指令結構如下:
```shell=
docker run -d --name {CTN_NAME} --init jenkins/inbound-agent -url http://{MASTER_NODE_IP}:8080 -workDir={WORK_DIR} {KEY} {AGENT_NAME}
```
完整指令如下:
```shell=
docker run -d --name jenkins_agent --init jenkins/inbound-agent -url http://192.168.1.102:8080 -workDir=/home/jenkins/AgentNode bd38d71dc2a390f969f9e94cc7d89679eda44e3c776a26874b381810b20f2eb1 AgentNode
```
執行後我們可以直接查看log是否連接成功

也可以進入Jenkins節點管理頁面查看連接狀況

如此一來JenkinsAgent算是已經建立完成了唷!
# 五、測試使用
測試前可以先閱讀[再 Jenkins 底下執行 NodeJs](/mtGREEfVTiq7mLTIPLAkfg),了解一下整體的新增/執行作業的程序如何進行,此處會快速帶過
## 建立作業
我們建立一個Pipeline的流程,這邊增加了`agent` 並且指定對應的agent為`label 'AgentNode'`,這樣在運行的時候就會是走指定的代理,其使用腳本如下:
```json=
pipeline {
agent{
label 'AgentNode'
}
tools {
nodejs '16.17.1'
}
stages {
stage('Hello') {
steps {
echo 'Hello World'
sh 'npm version'
}
}
}
}
```
這邊附上畫面

## 執行結果
這邊直接運行建置並且查看結果,可以看到流程是運行在我們指定的Node當中,其安裝與指令的執行也都是在此代理底下運行

# 結論
經過此實作整體來說也無太大難度,比較特別的是我們在建立AgentNode的時候會有一個選項要勾起,其實也可以在運行時指定對應的DockerImage來進行相關作業操作,至於如何使用後續再來針對這一區塊做學習。
<br/>
---
相關參考來源:
[Day 23: Jenkins與分散式部屬](https://ithelp.ithome.com.tw/articles/10271997)
<style>
.red{color: red;}
</style>