<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.9.5">Jekyll</generator><link href="https://syneticscorp.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://syneticscorp.github.io/" rel="alternate" type="text/html" /><updated>2024-02-29T12:29:33+00:00</updated><id>https://syneticscorp.github.io/feed.xml</id><title type="html"> </title><subtitle>기능안전 SW 개발을 위한 ALM 구축 전문 기업</subtitle><author><name>작성자이름</name><email>작성자이메일@gmail.com</email></author><entry><title type="html">Jenkins 권한 자동화 Script</title><link href="https://syneticscorp.github.io/devsafetyops/jenkinsScript/" rel="alternate" type="text/html" title="Jenkins 권한 자동화 Script" /><published>2023-11-21T00:00:00+00:00</published><updated>2023-11-21T00:00:00+00:00</updated><id>https://syneticscorp.github.io/devsafetyops/jenkinsScript</id><content type="html" xml:base="https://syneticscorp.github.io/devsafetyops/jenkinsScript/"><![CDATA[<!-- **** 아래 부분부터 본문 영역입니다.*** -->

<h1 id="jenkins-권한-자동화">Jenkins 권한 자동화</h1>

<h2 id="목차">목차</h2>
<ul>
  <li><a href="#사용-목적">사용 목적</a></li>
  <li><a href="#사용-방법">사용 방법</a>
    <ul>
      <li><a href="#0-Project-based-Matrix-Authorization-Strategy-플러그인-설치">Project-based Matrix Authorization Strategy 플러그인 설치</a></li>
      <li><a href="#1-Jenkins-관리자-계정-권한-확인">Jenkins 관리자 계정 확인</a></li>
      <li><a href="#2-필요-파일-설치">필요 파일 설치</a></li>
      <li><a href="#3-권한-부여">권한 부여</a></li>
    </ul>
  </li>
  <li><a href="#결과">결과</a></li>
</ul>

<hr />

<h2 id="사용-목적">사용 목적</h2>

<p>Jenkins에서 사용자에게 권한을 할당하지 않다면 모든 Job Item들을 보게 되거나 Overall/Read 권한 오류가 발생한다. “test”라는 ID를 가진 사용자는 “test_job”이라는 Job만 볼 수 있도록 권한을 할당하고 싶을 때, UI에서 번거롭게 설정하기보다 Script 실행으로 권한을 할당하려 한다.</p>

<hr />

<h2 id="사용-방법">사용 방법</h2>

<h3 id="0-project-based-matrix-authorization-strategy-플러그인-설치-확인">0. Project-based Matrix Authorization Strategy 플러그인 설치 확인</h3>

<ul>
  <li>Jenkins 관리 &gt; Plugin Manager &gt; 설치된 플러그인 목록 &gt; Matrix Authorization Strategy Plugin 확인</li>
</ul>

<p><img src="https://github.com/SyneticsCorp/SyneticsCorp.github.io/assets/113246634/168fed8f-275e-4bee-a30f-d08780a6a658" alt="plugin" /></p>

<h3 id="1-jenkins-관리자-계정-권한-확인">1. Jenkins 관리자 계정 권한 확인</h3>

<ul>
  <li>Project-based Matrix Authorization Strategy 설정이 아니라면 <a href="#ui">UI</a> 혹은 <a href="#script-console">Jenkins Script Console</a>에서 실행
    <ul>
      <li>
        <h4 id="ui">UI</h4>
        <ul>
          <li>Jenkins 관리 &gt; Configure Global Security &gt; Project-based Matrix Authorization Strategy 설정 <br /> <img src="https://github.com/SyneticsCorp/SyneticsCorp.github.io/assets/113246634/1c5df159-3b25-4bdf-b780-25fc31e1e44c" alt="01_authori-1" /></li>
          <li>Add user 클릭 <br /> <img src="https://github.com/SyneticsCorp/SyneticsCorp.github.io/assets/113246634/c485b363-a1c2-46fe-8d1f-1bf49652b8e0" alt="01_authori-2" /></li>
          <li>관리자 계정 User ID 설정 <br /> <img src="https://github.com/SyneticsCorp/SyneticsCorp.github.io/assets/113246634/c2676b74-e3f6-40fe-9e4a-c917ec2e2fe4" alt="01_authori-3" /></li>
          <li>Overall/Administer 체크박스 클릭 후 Save <br /> <img src="https://github.com/SyneticsCorp/SyneticsCorp.github.io/assets/113246634/9c2b44f2-0b72-49c3-bb85-cda10b377090" alt="01_authori-4" /></li>
        </ul>
      </li>
      <li>
        <h4 id="script-console">Script Console</h4>
        <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>import hudson.model.*
import jenkins.model.*
import hudson.security.*

def adminID = "admin"

def jenkins = Jenkins.getInstance()

def pmas = jenkins.getAuthorizationStrategy()
if (!(pmas instanceof ProjectMatrixAuthorizationStrategy)) {
    pmas = new ProjectMatrixAuthorizationStrategy()
    jenkins.setAuthorizationStrategy(pmas)
}

// "admin"에게 모든 권한 추가
pmas.add(Jenkins.ADMINISTER, "${adminID}")

jenkins.save()

</code></pre></div>        </div>
      </li>
    </ul>
  </li>
</ul>

<h3 id="2-필요-파일-설치">2. 필요 파일 설치</h3>

<ul>
  <li>jenkins-cli.jar
    <ul>
      <li>Ubuntu 사용 시
        <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo wget http://[Jenkins URL]/jnlpJars/jenkins-cli.jar
</code></pre></div>        </div>
      </li>
      <li>UI에서 다운로드 시 <br /> Jenkins 관리 &gt; Jenkins CLI &gt; jenkins-cli.jar 하이퍼링크 클릭 <br /> <img src="https://github.com/SyneticsCorp/SyneticsCorp.github.io/assets/113246634/4c121de8-5753-4214-9178-05efa85352b9" alt="jenkins-cli.jar" /></li>
    </ul>
  </li>
  <li>groovy 파일 저장
    <ul>
      <li>파일 이름 예시: <strong>jenkinsAuto.groovy</strong></li>
      <li>코드</li>
    </ul>

    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>import hudson.model.*
import jenkins.model.*
import hudson.security.*
      
def grantReadPermission(String userID, String jobName) {
    // 초기값 설정
    def jenkins = Jenkins.getInstance()
    def user = User.get("${userID}", false, null)
    def job = jenkins.getItemByFullName("${jobName}", Job.class)

    // 플러그인 설정
    def pmas = jenkins.getAuthorizationStrategy()
    if (!(pmas instanceof ProjectMatrixAuthorizationStrategy)) {
        pmas = new ProjectMatrixAuthorizationStrategy()
        jenkins.setAuthorizationStrategy(pmas)
    }
      
    // Overall/READ 권한
    pmas.add(Jenkins.READ, "${userID}")
      
    jenkins.save()
      
    // 사용자별 Job 권한 설정
    AuthorizationMatrixProperty amp = job.getProperty(AuthorizationMatrixProperty.class)
    if (amp == null) {
        amp = new AuthorizationMatrixProperty()
        job.addProperty(amp)
    }
      
    amp.add(Job.READ, "${userID}")
      
    job.save()
}


// 값 받아오기
def customUserID = args[0]
def customJobName = args[1]
grantReadPermission(customUserID, customJobName)
</code></pre></div>    </div>
  </li>
</ul>

<h3 id="3-권한-부여">3. 권한 부여</h3>

<ul>
  <li>Terminal 창에서 실행</li>
  <li>jenkins-cli.jar &amp;&amp; groovy 파일이 존재하는 위치에서 실행</li>
</ul>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>java -jar jenkins-cli.jar -s http://[JENKINS_URL]/ -auth [USER_NAME]:[API_TOKEN] groovy =&lt; [GROOVY_FILE_NAME].groovy "[NEW_USER_ID]" "[NEW_JOB_NAME]" 
</code></pre></div></div>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>JENKINS_URL: Jenkins URL 주소
USER_NAME: 관리자 계정 ID
API_TOKEN: Jenkins API Token
GROOVY_FILE_NAME: Groovy 파일 이름
NEW_USER_ID: 권한 할당할 사용자 ID
NEW_JOB_NAME: 사용자에게 권한 할당할 Job 이름
</code></pre></div></div>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>// 예시

java -jar jenkins-cli.jar -s http://localhost:18080/ -auth admin:jenkinsToken groovy =&lt; jenkinsAuto.groovy "test" "test_job" 
</code></pre></div></div>

<hr />

<h2 id="결과">결과</h2>

<p><strong>실행 전</strong></p>

<p><img src="https://github.com/SyneticsCorp/SyneticsCorp.github.io/assets/113246634/6893386b-3d4c-45ea-b8a3-e431e9043cf9" alt="03_test-1" /></p>

<p><strong>실행 후</strong></p>

<p><img src="https://github.com/SyneticsCorp/SyneticsCorp.github.io/assets/113246634/773c8d44-fbfd-4458-9fec-488ef2a787f5" alt="03_test-2" /></p>]]></content><author><name>작성자이름</name><email>작성자이메일@gmail.com</email></author><category term="DevSafetyOps" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Jenkins Parameterized Job 실행 시 Response 예제</title><link href="https://syneticscorp.github.io/devsafetyops/parameterizedJob/" rel="alternate" type="text/html" title="Jenkins Parameterized Job 실행 시 Response 예제" /><published>2023-11-21T00:00:00+00:00</published><updated>2023-11-21T00:00:00+00:00</updated><id>https://syneticscorp.github.io/devsafetyops/parameterizedJob</id><content type="html" xml:base="https://syneticscorp.github.io/devsafetyops/parameterizedJob/"><![CDATA[<!-- **** 아래 부분부터 본문 영역입니다.*** -->

<h1 id="jenkins-parameterized-job-실행-시-response-예제">Jenkins Parameterized Job 실행 시 Response 예제</h1>

<h2 id="목차">목차</h2>

<ul>
  <li><a href="#사용-목적">사용 목적</a></li>
  <li><a href="#사용-방법">사용 방법</a></li>
  <li><a href="#결과">결과</a></li>
</ul>

<hr />

<h2 id="사용-목적">사용 목적</h2>

<p>Parameterized Job Build 실행 시 어떤 명령어를 작성해야 하는지, 어떤 결과를 확인할 수 있는지 알아보려 한다.</p>

<hr />

<h2 id="사용-방법">사용 방법</h2>

<ul>
  <li>파라미터가 1개일 때
    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>curl -X POST http://[JENKINS_URL]/job/[JOB_NAME]/buildWithParameters --data [PARAM1]=[VALUE1] --user [USER_NAME]:[API_TOKEN] -v
</code></pre></div>    </div>
  </li>
  <li>파라미터가 2개일 때
    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>curl -X POST http://[JENKINS_URL]/job/[JOB_NAME]/buildWithParameters --data [PARAM1]=[VALUE1] --data [PARAM2]=[VALUE2] --user [USER_NAME]:[API_TOKEN] -v
</code></pre></div>    </div>

    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>JENKINS_URL: Jenkins URL 주소
JOB_NAME: Build 실행할 Job 이름
PARAM1, PARAM2: 파라미터 이름
VALUE1, VALUE2: 파라미터의 결과값
USER_NAME: 관리자 계정 ID
API_TOKEN: Jenkins API Token
</code></pre></div>    </div>
  </li>
</ul>

<hr />

<h2 id="결과">결과</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Note: Unnecessary use of -X or --request, POST is already inferred.
*   Trying [JENKINS_URL]...
* Connected to [JENKINS_URL] ([JENKINS_URL]) port [JENKINS_URL_PORT] (#0)
* Server auth using Basic with user '[USER_ID]'
&gt; POST /job/[JOB_NAME]/buildWithParameters HTTP/1.1
&gt; Host: [JENKINS_URL]
&gt; Authorization: Basic [ ]
&gt; User-Agent: curl/7.81.0
&gt; Accept: */*
&gt; Content-Length: 9
&gt; Content-Type: application/x-www-form-urlencoded
&gt; 
* Mark bundle as not supporting multiuse
&lt; HTTP/1.1 201 Created
&lt; Date: [ ]
&lt; X-Content-Type-Options: nosniff
&lt; Location: http://[JENKINS_URL]/queue/item/12/
&lt; Content-Length: 0
&lt; Server: Jetty(10.0.11)
&lt; 
* Connection #0 to host [JENKINS_URL] left intact

</code></pre></div></div>

<p><img src="https://github.com/SyneticsCorp/SyneticsCorp.github.io/assets/113246634/86292e8e-0f60-45c7-b721-ef05e1d9f0e7" alt="result" /></p>]]></content><author><name>작성자이름</name><email>작성자이메일@gmail.com</email></author><category term="DevSafetyOps" /><category term="Jenkins" /><category term="Build" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Jenkins 플러그인 분석하기-build-user-vars</title><link href="https://syneticscorp.github.io/devsafetyops/plugin-buildUserVars/" rel="alternate" type="text/html" title="Jenkins 플러그인 분석하기-build-user-vars" /><published>2023-11-21T00:00:00+00:00</published><updated>2023-11-21T00:00:00+00:00</updated><id>https://syneticscorp.github.io/devsafetyops/plugin-buildUserVars</id><content type="html" xml:base="https://syneticscorp.github.io/devsafetyops/plugin-buildUserVars/"><![CDATA[<!-- **** 아래 부분부터 본문 영역입니다.*** -->

<h1 id="jenkins-플러그인-분석하기-build-user-vars-plugin">Jenkins 플러그인 분석하기-build-user-vars-plugin.</h1>

<blockquote>
  <h2 id="목차">목차</h2>

  <ul>
    <li>분석정보</li>
    <li>기능</li>
    <li>동작</li>
  </ul>
</blockquote>

<h2 id="분석정보">분석정보</h2>
<ul>
  <li>실행환경 : Ubuntu</li>
  <li>분석대상 plugin: build-user-vars-plugin</li>
  <li>위치 : $JENKINS_HOME/plugins</li>
  <li>분석대상 job: ESCAS-OSS-Template</li>
  <li>관련 사이트 : https://www.jenkins.io/doc/pipeline/steps/build-user-vars-plugin/</li>
</ul>

<h2 id="기능">기능</h2>

<p>빌드를 시작한 사용자를 설명하는 환경 변수 세트</p>

<table>
  <thead>
    <tr>
      <th>변수명</th>
      <th>설명</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>BUILD_USER</td>
      <td>전체 이름(이름+성)</td>
    </tr>
    <tr>
      <td>BUILD_USER_FIRST_NAME</td>
      <td>이름</td>
    </tr>
    <tr>
      <td>BUILD_USER_LAST_NAME</td>
      <td>성</td>
    </tr>
    <tr>
      <td>BUILD_USER_ID</td>
      <td>젠킨스 사용자 id</td>
    </tr>
    <tr>
      <td>BUILD_USER_GROUPS</td>
      <td>Jenkins 사용자 그룹</td>
    </tr>
    <tr>
      <td>BUILD_USER_EMAIL</td>
      <td>이메일 주소</td>
    </tr>
  </tbody>
</table>

<h2 id="동작">동작</h2>

<ul>
  <li>
    <p>설명: 해당 사용자에 대한 분석결과 URL 생성 시 사용</p>
  </li>
  <li>
    <p>예시 :</p>
  </li>
</ul>

<p><img src="https://github.com/SyneticsCorp/SyneticsCorp.github.io/assets/150226255/ca89d9be-68fd-4cdc-8d97-a0d30751dd98" alt="image" /></p>]]></content><author><name>작성자이름</name><email>작성자이메일@gmail.com</email></author><category term="DevSafetyOps" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Jenkins 플러그인 분석하기-Envinject</title><link href="https://syneticscorp.github.io/devsafetyops/plugin-envinject/" rel="alternate" type="text/html" title="Jenkins 플러그인 분석하기-Envinject" /><published>2023-11-21T00:00:00+00:00</published><updated>2023-11-21T00:00:00+00:00</updated><id>https://syneticscorp.github.io/devsafetyops/plugin-envinject</id><content type="html" xml:base="https://syneticscorp.github.io/devsafetyops/plugin-envinject/"><![CDATA[<!-- **** 아래 부분부터 본문 영역입니다.*** -->

<h1 id="jenkins-플러그인-분석하기-envinject0">Jenkins 플러그인 분석하기-Envinject0.</h1>

<blockquote>
  <h2 id="목차">목차</h2>

  <ul>
    <li>분석정보</li>
    <li>기능</li>
    <li>설정</li>
  </ul>
</blockquote>

<h2 id="분석정보">분석정보</h2>
<ul>
  <li>실행환경 : Ubuntu</li>
  <li>분석대상 plugin: envinject, envinject-api</li>
  <li>위치 : $JENKINS_HOME/plugins</li>
  <li>분석대상 job: ESCAS-OSS-Template</li>
  <li>관련 사이트
    <ul>
      <li>envinject : <a href="https://plugins.jenkins.io/envinject/">https://plugins.jenkins.io/envinject/</a></li>
      <li>envinject-api : <a href="https://plugins.jenkins.io/envinject-api/">https://plugins.jenkins.io/envinject-api/</a></li>
    </ul>
  </li>
</ul>

<h2 id="기능">기능</h2>

<ol>
  <li>
    <p>Jenkins Java 프로세스에서 상속된 환경 변수를 제거합니다.</p>
  </li>
  <li>
    <p>노드(컨트롤러/에이전트) 시작 시 환경 변수를 주입합니다.</p>
  </li>
  <li>
    <p>실행을 위한 SCM 체크아웃 전후에 설정 스크립트를 실행합니다.</p>
  </li>
  <li>
    <p>실행을 위한 SCM 체크아웃 전후에 환경 변수를 주입합니다.</p>
  </li>
  <li>
    <p>실행을 위한 빌드 단계로 환경 변수를 주입합니다.</p>
  </li>
  <li>
    <p>실행을 위한 비밀번호 값을 안전하게 주입합니다.</p>
  </li>
  <li>
    <p>각 빌드에 사용되는 환경 변수 세트를 표시하기 위해 빌드가 끝날 때 환경 변수를 내보냅니다.</p>
  </li>
</ol>

<h2 id="설정">설정</h2>

<h3 id="general">General</h3>
<ul>
  <li>
    <p>노드(컨트롤러/에이전트) 시작 시 환경 변수를 주입</p>
  </li>
  <li>설정방법 : Jenkins &gt; <job> &gt; 구성(configuration) &gt; General &gt; 'Prepare an envrionment for the run' 선택 &gt;</job></li>
  <li>properties/script/groovy script를 통해 설정 가능</li>
</ul>

<p><img src="https://github.com/SyneticsCorp/SyneticsCorp.github.io/assets/150226255/8a4e11b7-f563-4750-ae64-675c08441706" alt="image" /></p>

<ul>
  <li>설정확인</li>
  <li>URL로 확인하기: 웹 실행 &gt; http://<jenkins_url>/job/<job_name>/<build_no>/injectedEnvVars/export</build_no></job_name></jenkins_url></li>
  <li>설정 file로 확인하기: 터미널 실행 &gt; cat $JENKINS_HOME/jobs/<job_name>/builds/<build_no>/inejctedEnvVars.txt</build_no></job_name></li>
</ul>

<h3 id="build-environment">Build Environment</h3>
<ol>
  <li>실행을 위한 빌드 단계로 환경 변수를 주입</li>
</ol>

<ul>
  <li>설정방법 : Jenkins &gt; <job> &gt; 구성(configuration) &gt; Build Envrionment &gt; 'Inject environment variables to the build process' 선택 &gt;
</job>    <ul>
      <li>properties/script/groovy script를 통해 설정 가능</li>
    </ul>
  </li>
</ul>

<p><img src="https://github.com/SyneticsCorp/SyneticsCorp.github.io/assets/150226255/a472b6c2-8c4d-49b8-81bb-a1d96780e805" alt="image" /></p>

<ul>
  <li>설정확인
    <ul>
      <li>URL로 확인하기: 웹 실행 &gt; http://<jenkins_url>/job/<job_name>/<build_no>/injectedEnvVars/export</build_no></job_name></jenkins_url></li>
      <li>설정 file로 확인하기: 터미널 실행 &gt; cat $JENKINS_HOME/jobs/<job_name>/builds/<build_no>/inejctedEnvVars.txt</build_no></job_name></li>
    </ul>
  </li>
  <li>예제 :</li>
</ul>

<p><img src="https://github.com/SyneticsCorp/SyneticsCorp.github.io/assets/150226255/8b626771-7dd7-4188-b4ca-afba43d7024a" alt="image" /></p>

<ol>
  <li>실행을 위한 비밀번호 값을 안전하게 주입</li>
</ol>

<ul>
  <li>설정방법 : Jenkins &gt; <job> &gt; 구성(configuration) &gt; Build Envrionment &gt; 'Inject passwords to the build as envrionment variables' 선택 &gt;
</job>    <ul>
      <li>Global/job별 passwaord 설정 가능</li>
    </ul>
  </li>
</ul>

<p><img src="https://github.com/SyneticsCorp/SyneticsCorp.github.io/assets/150226255/4761cee3-df47-4191-84b9-a8f5d0163133" alt="image" /></p>

<ul>
  <li>설정확인: 터미널 실행 &gt; cat $JENKINS_HOME/jobs/<job_name>/config.xml</job_name></li>
</ul>

<h3 id="build-steps">Build steps</h3>
<ul>
  <li>
    <p>각 빌드에 사용되는 환경 변수 세트를 표시하기 위해 빌드가 끝날 때 환경 변수를 내보냅니다.</p>
  </li>
  <li>
    <p>설정방법 : Jenkins &gt; <job> &gt; 구성(configuration) &gt; Build steps &gt; 'Add build step' 선택</job></p>
  </li>
</ul>

<p><img src="https://github.com/SyneticsCorp/SyneticsCorp.github.io/assets/150226255/2c7c9cac-c914-4402-af3f-31c73b0d0805" alt="image" /></p>

<ul>
  <li>예제 :</li>
</ul>

<p><img src="https://github.com/SyneticsCorp/SyneticsCorp.github.io/assets/150226255/020b9d09-ca4f-4325-b1a4-947699c1d210" alt="image" /></p>

<ul>
  <li>설정확인 : cat ./build.info.propertise</li>
</ul>]]></content><author><name>작성자이름</name><email>작성자이메일@gmail.com</email></author><category term="DevSafetyOps" /><summary type="html"><![CDATA[]]></summary></entry></feed>